Herror ::fit_circle_contour_xld (
Hobject Contours,
const HTuple &Algorithm,
const HTuple &MaxNumPoints,
const HTuple &MaxClosureDist,
const HTuple &ClippingEndPoints,
const HTuple &Iterations,
const HTuple &ClippingFactor,
double *Row,
double *Column,
double *Radius,
double *StartPhi,
double *EndPhi,
char *PointOrder
)
Herror ::fit_circle_contour_xld (
Hobject Contours,
const HTuple &Algorithm,
const HTuple &MaxNumPoints,
const HTuple &MaxClosureDist,
const HTuple &ClippingEndPoints,
const HTuple &Iterations,
const HTuple &ClippingFactor,
HTuple *Row,
HTuple *Column,
HTuple *Radius,
HTuple *StartPhi,
HTuple *EndPhi,
HTuple *PointOrder
)
double HXLDCont::FitCircleContourXld (
const HTuple &Algorithm,
const HTuple &MaxNumPoints,
const HTuple &MaxClosureDist,
const HTuple &ClippingEndPoints,
const HTuple &Iterations,
const HTuple &ClippingFactor,
double *Column,
double *Radius,
double *StartPhi,
double *EndPhi,
char *PointOrder
) const
HTuple HXLDContArray::FitCircleContourXld (
const HTuple &Algorithm,
const HTuple &MaxNumPoints,
const HTuple &MaxClosureDist,
const HTuple &ClippingEndPoints,
const HTuple &Iterations,
const HTuple &ClippingFactor,
HTuple *Column,
HTuple *Radius,
HTuple *StartPhi,
HTuple *EndPhi,
HTuple *PointOrder
) const
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 \emph{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 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) -> Hobject: HXLDCont(Array)
|
|
Input contours. |
Algorithm (input_control)
|
string -> HTuple.char *
|
|
Algorithm for the fitting of circles. |
|
Default value: 'algebraic' |
|
List of values: 'algebraic', 'ahuber', 'atukey' |
MaxNumPoints (input_control)
|
integer -> HTuple.long
|
|
Maximum number of contour points used for the
computation (-1 for all points). |
|
Default value: -1 |
|
Restriction: MaxNumPoints >= 3 |
MaxClosureDist (input_control)
|
real -> HTuple.double
|
|
Maximum distance between the end points of a
contour to be considered as 'closed'. |
|
Default value: 2.0 |
|
Restriction: MaxClosureDist >= 0.0 |
ClippingEndPoints (input_control)
|
integer -> HTuple.long
|
|
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 -> HTuple.long
|
|
Maximum number of iterations. |
|
Default value: 3 |
|
Restriction: Iterations >= 0 |
ClippingFactor (input_control)
|
real -> HTuple.double
|
|
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) -> (HTuple.) double *
|
|
Row coordinate of the center of the circle. |
Column (output_control)
|
circle.center.x(-array) -> (HTuple.) double *
|
|
Column coordinate of the center of the circle. |
Radius (output_control)
|
circle.radius(-array) -> (HTuple.) double *
|
|
Radius of circle. |
StartPhi (output_control)
|
real(-array) -> (HTuple.) double *
|
|
Angle of the start point [rad]. |
EndPhi (output_control)
|
real(-array) -> (HTuple.) double *
|
|
Angle of the end point [rad]. |
PointOrder (output_control)
|
string(-array) -> (HTuple.) char *
|
|
Point order along the boundary. |
|
List of values: 'positive', 'negative' |
Result
::fit_circle_contour_xld returns 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.
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-2002 MVTec Software GmbH