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
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.
MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlapmax_arc_overlap
-
MaxArcOverlapMaxArcOverlapMaxArcOverlapMaxArcOverlapmaxArcOverlapmax_arc_overlap bestimmt die Winkeldistanz, um die
sich zwei Konturen überlappen dürfen.
MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAnglemax_tangent_angle
-
MaxTangentAngleMaxTangentAngleMaxTangentAngleMaxTangentAnglemaxTangentAnglemax_tangent_angle beschreibt den maximalen Winkel zwischen den
Kreistangenten an den zwei Konturenden und der Verbindungsstrecke
zwischen ihnen.
MaxDistMaxDistMaxDistMaxDistmaxDistmax_dist
-
MaxDistMaxDistMaxDistMaxDistmaxDistmax_dist ist die Schwelle für die absolute
Pixeldistanz zwischen End- und Startpunkt der
Konturen.
MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiffmax_radius_diff
-
MaxRadiusDiffMaxRadiusDiffMaxRadiusDiffMaxRadiusDiffmaxRadiusDiffmax_radius_diff beschreibt die maximale Differenz
der Radien der angepassten Kreise,
MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDistmax_center_dist
-
MaxCenterDistMaxCenterDistMaxCenterDistMaxCenterDistmaxCenterDistmax_center_dist die
maximale euklidische Distanz zwischen den Mittelpunkten der
angepassten Kreise.
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
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
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 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