LocateCircularArc
Locate a circular arc.
Can use available TwinCAT Job Tasks for executing parallel code regions.
Can return partial results when canceled by Watchdog.
Syntax
Definition:
HRESULT LocateCircularArc(
HRESULT hrPrev,
ITcVnImage* ipSrcImage,
TcVnCircularArc& stCircularArc,
TcVnPoint2_REAL& aCenter,
float fSearchRadius,
double fArcDirectionRad,
ETcVnEdgeDirection eEdgeDirection,
float fMinStrength,
double fAngleStepRad = 0.1,
ULONG nMaxThickness = 10,
bool bInvertSearchDirection = false,
ULONG nSubpixelsIterations = 10,
float fApproxPrecision = 0.001f,
ETcVnEdgeDetectionAlgorithm eAlgorithm = EDA_INTERPOLATION,
ITcVnContainer** pipContourPoints = nullptr,
float fRangeCutoffFactor = 0.135f
)
Parameters
Name |
Type |
Default |
Description |
---|---|---|---|
hrPrev |
|
HRESULT indicating the result of previous operations (If SUCCEEDED(hrPrev) equals false, no operation is executed.) | |
ipSrcImage |
|
Source image (1 channel) | |
stCircularArc |
|
Returns the circular arc parameters | |
aCenter |
|
Input estimated circle center (only used as a starting point to search for the circle contour, not used for the circle center estimation) | |
fSearchRadius |
float |
|
Input search radius (starting from aCenter, should be greater than the actual circle radius but aCenter + fSearchRadius should be within the image borders) |
fArcDirectionRad |
double |
|
Input search starting direction in radian. Valid range is [-pi, +pi], where right is 0 rad, top is -pi/2 rad and bottom +pi/2 rad. The circular arc should at least be valid in range fArcDirectionRad +- 4 * fAngleStepRad) |
eEdgeDirection |
|
Specification of the edge direction to search for | |
fMinStrength |
float |
|
Specification of the minimum strength (intensity difference) of the edge to search for |
fAngleStepRad |
double |
0.1 |
Search step in rad (should be chosen so that about 20 - 60 steps are available for the whole arc. In most cases 0.1 rad (5.7 deg) is a good value) |
nMaxThickness |
ULONG |
10 |
Specification of the maximum thickness of the edge to search for, which means fMinStrength must be reached within nMaxThickness pixels |
bInvertSearchDirection |
bool |
false |
If true, the search starts from outside the circular arc in direction of the center |
nSubpixelsIterations |
ULONG |
10 |
Specifies the number of subpixels (for INTERPOLATION, 10 - 20 usually is sufficient) or maximum number of iterations for optimizing the parameters (for APPROX_ERF and APPROX_GAUSSIAN, 50 - 100 usually is sufficient) |
fApproxPrecision |
float |
0.001f |
Specifies the approximation precision for APPROX_ERF and APPROX_GAUSSIAN (0.001 usually is sufficient, unused for INTERPOLATION) |
eAlgorithm |
EDA_INTERPOLATION |
Selection of the edge detection algorithm | |
pipContourPoints |
nullptr |
Returns the subpixel accurate contour (optional, set to 0 if not required; ContainerType_Vector_TcVnPoint2_REAL; Non-zero interface pointers are reused.) | |
fRangeCutoffFactor |
float |
0.135f |
Relative edge strength factor to cut off the range of pixels used for approximation. Negative numbers are valid to include noise, i.e. intensity differences in the other direction. At most nMaxThickness pixels are used in each direction. |
Required License
TC3 Vision Metrology 2D