fit_circle_contour_xld ( Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder )

Approximation of XLD contours by circles.

fit_circle_contour_xld approximates the XLD contours Contours by circles. It does not perform a segmentation of the input contours. Thus, one has to make sure that each contour corresponds to one and only one circle. The operator returns for each contour the center (Row, Column), and the Radius.

The algorithm used for the fitting of circles can be selected via Algorithm:

'algebraic':
This approach minimizes the algebraic distance between the contour
points and the resulting circle.

'ahuber':
Similar to 'algebraic'. Here the contour points are weighted to
decrease the impact of outliers based on the approach of Huber.

'atukey':
Similar to 'algebraic'. Here the contour points are weighted to
decrease the impact of outliers based on the approach of Tukey.

For 'ahuber' and 'atukey' a robust error statistics is used to estimate the standard deviation of the distances from the contour points without outliers from the approximating circle. The parameter ClippingFactor (a scaling factor for the standard deviation) controls the amount of damping outliers: The smaller the value chosen for ClippingFactor the more outliers are detected. The detection of outliers and the least squares fitting is repeated. The parameter Iterations specifies the number of iterations.

To reduce the computational load, the fitting of circles can be restricted to a subset of the contour points: If a value other than -1 is assigned to MaxNumPoints, only up to MaxNumPoints points - uniformly distributed over the contour - are used.

For circular arcs, the points on the circle closest to the start points and end points of the original contours are chosen as start and end points. The corresponding angles refering to the X-axis are returned in StartPhi and EndPhi, see also gen_ellipse_contour_xld. Contours, for which the distance between their start points and their end points is less or equal MaxClosureDist are considered to be closed. Thus, they are approximated by circles instead of circular arcs. Due to artefacts in the pre-processing the start and end points of a contour might be faulty. Therefore, it is possible to exclude ClippingEndPoints points at the beginning and at the end of a contour from the fitting of circles. However, they are still used for the determination of StartPhi and EndPhi.


Parameters

Contours (input_object)
xld_cont(-array) -> object
Input contours.

Algorithm (input_control)
string -> string
Algorithm for the fitting of circles.
Default value: 'algebraic'
List of values: 'algebraic', 'ahuber', 'atukey'

MaxNumPoints (input_control)
integer -> integer
Maximum number of contour points used for the computation (-1 for all points).
Default value: -1
Restriction: MaxNumPoints >= 3

MaxClosureDist (input_control)
real -> real
Maximum distance between the end points of a contour to be considered as 'closed'.
Default value: 0.0
Restriction: MaxClosureDist >= 0.0

ClippingEndPoints (input_control)
integer -> integer
Number of points at the beginning and at the end of the contours to be ignored for the fitting.
Default value: 0
Restriction: ClippingEndPoints >= 0

Iterations (input_control)
integer -> integer
Maximum number of iterations.
Default value: 3
Restriction: Iterations >= 0

ClippingFactor (input_control)
real -> real
Clipping factor for the elimination of outliers (typical: 1.0 for Huber and 2.0 for Tukey).
Default value: 2.0
List of values: 1.0, 1.5, 2.0, 2.5, 3.0
Restriction: ClippingFactor > 0

Row (output_control)
circle.center.y(-array) -> real
Row coordinate of the center of the circle.

Column (output_control)
circle.center.x(-array) -> real
Column coordinate of the center of the circle.

Radius (output_control)
circle.radius(-array) -> real
Radius of circle.

StartPhi (output_control)
real(-array) -> real
Angle of the start point [rad].

EndPhi (output_control)
real(-array) -> real
Angle of the end point [rad].

PointOrder (output_control)
string(-array) -> string
Point order along the boundary.
List of values: 'positive', 'negative'


Result

fit_circle_contour_xld returns 2 (H_MSG_TRUE) if all parameter values are correct, and circles could be fitted to the input contours. If the input is empty the behaviour can be set via set_system('no_object_result',<Result>). If necessary, an exception is raised. If the parameter ClippingFactor is chosen too small, i.e., all points are classified as outliers, the error 3264 is raised.


Parallelization Information

fit_circle_contour_xld is local and processed completely exclusively without parallelization.


Possible Predecessors

gen_contours_skeleton_xld, lines_gauss, lines_facet, edges_sub_pix, smooth_contours_xld


Possible Successors

gen_ellipse_contour_xld, disp_circle, get_points_ellipse


See also

fit_ellipse_contour_xld, fit_line_contour_xld


Module

Sub-pixel operators



Copyright © 1996-2005 MVTec Software GmbH