ClassesClasses | | Operators

union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXld (Operator)

Name

union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXld — Compute the union of contours that belong to the same circle.

Signature

union_cocircular_contours_xld(Contours : UnionContours : MaxArcAngleDiff, MaxArcOverlap, MaxTangentAngle, MaxDist, MaxRadiusDiff, MaxCenterDist, MergeSmallContours, Iterations : )

Herror union_cocircular_contours_xld(const Hobject Contours, Hobject* UnionContours, double MaxArcAngleDiff, double MaxArcOverlap, double MaxTangentAngle, double MaxDist, double MaxRadiusDiff, double MaxCenterDist, const char* MergeSmallContours, const Hlong Iterations)

Herror T_union_cocircular_contours_xld(const Hobject Contours, Hobject* UnionContours, const Htuple MaxArcAngleDiff, const Htuple MaxArcOverlap, const Htuple MaxTangentAngle, const Htuple MaxDist, const Htuple MaxRadiusDiff, const Htuple MaxCenterDist, const Htuple MergeSmallContours, const Htuple Iterations)

void UnionCocircularContoursXld(const HObject& Contours, HObject* UnionContours, const HTuple& MaxArcAngleDiff, const HTuple& MaxArcOverlap, const HTuple& MaxTangentAngle, const HTuple& MaxDist, const HTuple& MaxRadiusDiff, const HTuple& MaxCenterDist, const HTuple& MergeSmallContours, const HTuple& Iterations)

HXLDCont HXLDCont::UnionCocircularContoursXld(const HTuple& MaxArcAngleDiff, const HTuple& MaxArcOverlap, const HTuple& MaxTangentAngle, const HTuple& MaxDist, const HTuple& MaxRadiusDiff, const HTuple& MaxCenterDist, const HString& MergeSmallContours, Hlong Iterations) const

HXLDCont HXLDCont::UnionCocircularContoursXld(double MaxArcAngleDiff, double MaxArcOverlap, double MaxTangentAngle, double MaxDist, double MaxRadiusDiff, double MaxCenterDist, const HString& MergeSmallContours, Hlong Iterations) const

HXLDCont HXLDCont::UnionCocircularContoursXld(double MaxArcAngleDiff, double MaxArcOverlap, double MaxTangentAngle, double MaxDist, double MaxRadiusDiff, double MaxCenterDist, const char* MergeSmallContours, Hlong Iterations) const

static void HOperatorSet.UnionCocircularContoursXld(HObject contours, out HObject unionContours, HTuple maxArcAngleDiff, HTuple maxArcOverlap, HTuple maxTangentAngle, HTuple maxDist, HTuple maxRadiusDiff, HTuple maxCenterDist, HTuple mergeSmallContours, HTuple iterations)

HXLDCont HXLDCont.UnionCocircularContoursXld(HTuple maxArcAngleDiff, HTuple maxArcOverlap, HTuple maxTangentAngle, HTuple maxDist, HTuple maxRadiusDiff, HTuple maxCenterDist, string mergeSmallContours, int iterations)

HXLDCont HXLDCont.UnionCocircularContoursXld(double maxArcAngleDiff, double maxArcOverlap, double maxTangentAngle, double maxDist, double maxRadiusDiff, double maxCenterDist, string mergeSmallContours, int iterations)

Description

The operator union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXldUnionCocircularContoursXld merges all contours that belong to the same circle. The result is a set of contours in which contours on the same circle are connected.

The algorithm tries to merge contours by first fitting circles to each contour and then examining the result by means of radius, circle center, and gap on the circular arc. The list of contours is processed in sequence of increasing radii. Contours to which no circle could be fitted are optionally merged in a second pass.

The threshold parameters are used to define whether contours belong to the same circle. All thresholds must be fulfilled simultaneously for two contours to be merged.

Parameters

MaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffmaxArcAngleDiff

The parameter MaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffmaxArcAngleDiff defines the maximum angular distance in radians between the end point of one contour and the start point of a second contour on a circle.

image/svg+xml a x

MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlap

MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlap denotes the maximum angle by which contours may overlap.

image/svg+xml x a

MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAngle

MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAngle describes the maximum angle between circle tangents and the connecting line of two contours.

image/svg+xml a x

MaxDistMaxDistMaxDistMaxDistmaxDist

MaxDistMaxDistMaxDistMaxDistmaxDist denotes the maximum absolute distance in pixels of the end and start points of two contours.

image/svg+xml a x

MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiff

MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiff is the maximum absolute difference of the radii of circles fitted to the contours.

image/svg+xml x a

MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDist

MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDist is the limit of the Euclidian distance of the circle centers.

image/svg+xml x x a

MergeSmallContoursMergeSmallContoursMergeSmallContoursMergeSmallContoursmergeSmallContours

If the parameter MergeSmallContoursMergeSmallContoursMergeSmallContoursMergeSmallContoursmergeSmallContours is set to 'true'"true""true""true""true", contours without fitted circles are also merged. For a small contour to match, each point of the contour needs to have a distance to the circle center which differs from the radius by not more then MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiff. The angle between a line between two consecutive points on the contour and the circle tangent must be within MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAngle. Additionally, the condition for MaxDistMaxDistMaxDistMaxDistmaxDist must be fulfilled for two contours to be merged.

IterationsIterationsIterationsIterationsiterations

Merging of contours leads to new circle parameters. Therefore, an iteration can lead to further merges. The parameter IterationsIterationsIterationsIterationsiterations controls the number of iterations. More than two iterations are seldom needed.

For each possible merge of two contours a cost is calculated by summing up the distances corresponding to the different threshold values. For comparability, the distances are scaled by the thresholds to a value between 0.0 and 1.0. If two or more contour start points match to the same end point of another contour, the contour with the lower cost is merged.

You should make sure that the input contours can be approximated by lines and circular arcs, for example by preprocessing them with split_contours_xldsplit_contours_xldSplitContoursXldSplitContoursXldSplitContoursXld.

Attention

Note that already closed contours are not considered for a union anymore. That is, even if a contour and the already closed contour share the same circle, they are returned as separate contours.

Execution Information

Parameters

ContoursContoursContoursContourscontours (input_object)  xld_cont-array objectHXLDContHXLDContHobject

Contours to be merged.

UnionContoursUnionContoursUnionContoursUnionContoursunionContours (output_object)  xld_cont-array objectHXLDContHXLDContHobject *

Merged contours.

MaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffmaxArcAngleDiff (input_control)  angle.rad HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximum angular distance of two circular arcs.

Default value: 0.5

Suggested values: 0.25, 0.5, 0.75, 1.0

MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlap (input_control)  angle.rad HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximum overlap of two circular arcs.

Default value: 0.1

Suggested values: 0.0, 0.1, 0.2

MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAngle (input_control)  angle.rad HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximum angle between the connecting line and the tangents of circular arcs.

Default value: 0.2

Suggested values: 0.1, 0.2, 0.3, 0.4, 0.5

MaxDistMaxDistMaxDistMaxDistmaxDist (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximum length of the gap between two circular arcs in pixels.

Default value: 30

Suggested values: 10, 30, 50, 70

MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiff (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximum radius difference of the circles fitted to two arcs.

Default value: 10

Suggested values: 10, 20, 30

MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDist (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximum center distance of the circles fitted to two arcs.

Default value: 10

Suggested values: 10, 20, 30

MergeSmallContoursMergeSmallContoursMergeSmallContoursMergeSmallContoursmergeSmallContours (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Determine whether small contours without fitted circles should also be merged.

Default value: 'true' "true" "true" "true" "true"

List of values: 'false'"false""false""false""false", 'true'"true""true""true""true"

IterationsIterationsIterationsIterationsiterations (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Number of iterations.

Default value: 1

Suggested values: 1, 2

Complexity

O(n^2) for n contours.

Result

union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXldUnionCocircularContoursXld returns 2 (H_MSG_TRUE) if all parameters are correct.

Possible Predecessors

split_contours_xldsplit_contours_xldSplitContoursXldSplitContoursXldSplitContoursXld, select_contours_xldselect_contours_xldSelectContoursXldSelectContoursXldSelectContoursXld

Alternatives

union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXldUnionCollinearContoursXld, union_cotangential_contours_xldunion_cotangential_contours_xldUnionCotangentialContoursXldUnionCotangentialContoursXldUnionCotangentialContoursXld, union_straight_contours_xldunion_straight_contours_xldUnionStraightContoursXldUnionStraightContoursXldUnionStraightContoursXld, union_adjacent_contours_xldunion_adjacent_contours_xldUnionAdjacentContoursXldUnionAdjacentContoursXldUnionAdjacentContoursXld, union_collinear_contours_ext_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXldUnionCollinearContoursExtXld

Module

Foundation


ClassesClasses | | Operators