union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXldunion_cocircular_contours_xld (Operator)

Name

union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXldunion_cocircular_contours_xld — Zusammenfassen von Konturen, die zu denselben Kreisen gehören.

Signatur

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

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

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)

def union_cocircular_contours_xld(contours: HObject, max_arc_angle_diff: Union[int, float], max_arc_overlap: Union[int, float], max_tangent_angle: Union[int, float], max_dist: Union[int, float], max_radius_diff: Union[int, float], max_center_dist: Union[int, float], merge_small_contours: str, iterations: int) -> HObject

Beschreibung

Der Operator union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXldUnionCocircularContoursXldunion_cocircular_contours_xld vereint alle Konturen, die zu denselben Kreisen gehören. Das Ergebnis ist eine Menge von Konturen, in der Konturen verbunden sind, die auf denselben Kreisen liegen.

Der Algorithmus versucht Konturen zusammenzufassen, indem er Kreise an jede Kontur anpasst und diese bezüglich Radius, Kreismittelpunkt und Abstand auf dem Kreisbogen vergleicht. Die Liste der Konturen wird in aufsteigender Reihenfolge der Radiuslänge bearbeitet. Konturen, an die kein Kreis angepasst werden kann, werden in einem optionalen zweiten Durchgang hinzugefügt.

Die Schwellenwertparameter bestimmen, ob Konturen zu demselben Kreis gehören. Alle Schwellenwerte müssen gleichzeitig erfüllt werden, damit zwei Konturen verbunden werden.

Parameter

MaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffmaxArcAngleDiffmax_arc_angle_diff

Der Parameter MaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffmaxArcAngleDiffmax_arc_angle_diff definiert die maximale Winkeldistanz auf dem Kreisbogen zwischen dem Ende der einen und dem Start der zweiten Kontur.

image/svg+xml a x
MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlapmax_arc_overlap

MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlapmax_arc_overlap bestimmt die Winkeldistanz, um die sich zwei Konturen überlappen dürfen.

image/svg+xml x a
MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAnglemax_tangent_angle

MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAnglemax_tangent_angle beschreibt den maximalen Winkel zwischen den Kreistangenten an den zwei Konturenden und der Verbindungsstrecke zwischen ihnen.

image/svg+xml a x
MaxDistMaxDistMaxDistMaxDistmaxDistmax_dist

MaxDistMaxDistMaxDistMaxDistmaxDistmax_dist ist die Schwelle für die absolute Pixeldistanz zwischen End- und Startpunkt der Konturen.

image/svg+xml a x
MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiffmax_radius_diff

MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiffmax_radius_diff beschreibt die maximale Differenz der Radien der angepassten Kreise,

image/svg+xml x a
MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDistmax_center_dist

MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDistmax_center_dist die maximale euklidische Distanz zwischen den Mittelpunkten der angepassten Kreise.

image/svg+xml x x a
MergeSmallContoursMergeSmallContoursMergeSmallContoursMergeSmallContoursmergeSmallContoursmerge_small_contours

Wenn der Parameter MergeSmallContoursMergeSmallContoursMergeSmallContoursMergeSmallContoursmergeSmallContoursmerge_small_contours auf 'true'"true""true""true""true""true" gesetzt ist, werden auch Konturen ohne angepasste Kreise verschmolzen. Eine solche Kontur wird als passend angenommen, wenn jeder Konturpunkt einen Abstand zum Kreismittelpunkt innerhalb von MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiffmax_radius_diff zum Kreisradius besitzt und wenn der Winkel der Verbindungsstrecke von zwei aufeinander folgenden Punkten der Kontur innerhalb der Grenze von MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAnglemax_tangent_angle zur Kreistangenten liegt. Zusätzlich muss die Bedingung bezüglich MaxDistMaxDistMaxDistMaxDistmaxDistmax_dist erfüllt sein.

IterationsIterationsIterationsIterationsiterationsiterations

Die Verbindung von Konturen führt zu neuen Kreisparametern. Deshalb kann eine Iteration des Algorithmus zu weiteren Verbindungen führen. Der Parameter IterationsIterationsIterationsIterationsiterationsiterations gibt die Anzahl der Iterationen an. Mehr als zwei Iterationen sind selten nötig.

Für jede mögliche Zusammenfassung von zwei Konturen werden die Kosten berechnet. Diese ergeben sich aus der Summation der Distanzen bezüglich der obigen Schwellenwerte. Die Distanzen werden für die Vergleichbarkeit mit den Schwellenwerten skaliert, so dass sie zwischen 0.0 und 1.0 liegen. Wenn zwei oder mehr Konturstartpunkte an einen Konturendpunkt passen, so wird die Verbindung mit den kleinsten Kosten verschmolzen.

Vor Aufruf sollte sichergestellt sein, dass sich die Konturen durch Linien und Kreisbögen annähern lassen. Dies kann zum Beispiel durch eine Vorverarbeitung mit dem Operator split_contours_xldsplit_contours_xldSplitContoursXldSplitContoursXldSplitContoursXldsplit_contours_xld erreicht werden.

Achtung

Bereits geschlossene Konturen werden nicht mehr in die Vereinigung einbezogen. D.h., auch wenn eine Kontur auf dem gleichen Kreis liegt wie eine bereits geschlossene Kreiskontur, werden beide Konturen getrennt zurückgeliefert

Ausführungsinformationen

Parameter

ContoursContoursContoursContourscontourscontours (input_object)  xld_cont-array objectHXLDContHObjectHXLDContHobject

Zu vereinigende Konturen.

UnionContoursUnionContoursUnionContoursUnionContoursunionContoursunion_contours (output_object)  xld_cont-array objectHXLDContHObjectHXLDContHobject *

Vereinigte Konturen.

MaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffMaxArcAngleDiffmaxArcAngleDiffmax_arc_angle_diff (input_control)  angle.rad HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximale Winkeldistanz zwischen zwei Kreisbögen.

Defaultwert: 0.5

Wertevorschläge: 0.25, 0.5, 0.75, 1.0

MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlapmax_arc_overlap (input_control)  angle.rad HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximale Überlappung von zwei Kreisbögen.

Defaultwert: 0.1

Wertevorschläge: 0.0, 0.1, 0.2

MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAnglemax_tangent_angle (input_control)  angle.rad HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximaler Winkel zwischen Verbindungsstrecke und Tangenten der Kreisbögen.

Defaultwert: 0.2

Wertevorschläge: 0.1, 0.2, 0.3, 0.4, 0.5

MaxDistMaxDistMaxDistMaxDistmaxDistmax_dist (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximale Absolutlänge der Lücke zwischen zwei Kreisbögen in Bildpunkten.

Defaultwert: 30

Wertevorschläge: 10, 30, 50, 70

MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiffmax_radius_diff (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximale Differenz der Radien der Kreise an zwei Kreisbögen.

Defaultwert: 10

Wertevorschläge: 10, 20, 30

MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDistmax_center_dist (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maximale Distanz zwischen den Kreismittelpunkten zweier Kreisbögen.

Defaultwert: 10

Wertevorschläge: 10, 20, 30

MergeSmallContoursMergeSmallContoursMergeSmallContoursMergeSmallContoursmergeSmallContoursmerge_small_contours (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Legt fest, ob auch Konturen ohne angepassten Kreis vereinigt werden sollen.

Defaultwert: 'true' "true" "true" "true" "true" "true"

Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"

IterationsIterationsIterationsIterationsiterationsiterations (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der Iterationen.

Defaultwert: 1

Wertevorschläge: 1, 2

Komplexität

O(n^2) für n Konturen.

Ergebnis

union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXldUnionCocircularContoursXldunion_cocircular_contours_xld gibt 2 (H_MSG_TRUE) zurück, wenn alle Parameter korrekt angegeben sind.

Vorgänger

split_contours_xldsplit_contours_xldSplitContoursXldSplitContoursXldSplitContoursXldsplit_contours_xld, select_contours_xldselect_contours_xldSelectContoursXldSelectContoursXldSelectContoursXldselect_contours_xld

Alternativen

union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXldUnionCollinearContoursXldunion_collinear_contours_xld, union_cotangential_contours_xldunion_cotangential_contours_xldUnionCotangentialContoursXldUnionCotangentialContoursXldUnionCotangentialContoursXldunion_cotangential_contours_xld, union_straight_contours_xldunion_straight_contours_xldUnionStraightContoursXldUnionStraightContoursXldUnionStraightContoursXldunion_straight_contours_xld, union_adjacent_contours_xldunion_adjacent_contours_xldUnionAdjacentContoursXldUnionAdjacentContoursXldUnionAdjacentContoursXldunion_adjacent_contours_xld, union_collinear_contours_ext_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXldUnionCollinearContoursExtXldunion_collinear_contours_ext_xld

Modul

Foundation