difference_closed_contours_xld
— Berechnen der Differenzmenge von geschlossenen Konturen.
difference_closed_contours_xld(Contours, Sub : ContoursDifference : : )
Der Operator difference_closed_contours_xld
berechnet die
Differenzmenge der von den geschlossenen Eingabekonturen umgebenen Regionen.
Der Rand dieser Differenzmenge wird in ContoursDifference
zurückgegeben.
Wenn die einzelnen Eingabekonturen nicht geschlossen sind, werden sie automatisch durch Verbinden von Anfangs- und Endpunkt geschlossen.
Intern werden zuerst die Regionen, die von den Konturen Contours
bzw. Sub
umschlossen sind, getrennt voneinander bestimmt (siehe
unten). Danach wird die Differenzmenge der beiden sich ergebenden Regionen
berechnet.
Im folgenden werden die beiden Eingabekonturen als Menge von Rändern
der zu schneidenden Regionen betrachtet. Jede dieser Mengen besteht aus einer
beliebigen Anzahl von Rändern (die einzelnen Konturen aus Contours
bzw. Sub
). Jeder Rand kann konvex oder konkav sein und sich selbst
schneiden. Löcher können durch Verschachtelung der Ränder gebildet werden.
Die von allen Rändern einer solchen Menge von Rändern umschlossene Region ist durch die sogenannte Even-Odd-Rule definiert. Sie besteht also aus der Menge aller Punkte, die folgende Eigenschaft besitzen: Die Strecke, die man durch Verbinden des Punktes mit einem außerhalb der Region liegenden Referenzpunkt erhält, schneidet eine ungerade Anzahl von Rändern.
Anschaulich bedeutet dies, dass ein Rand, der vollständig innerhalb eines anderen Randes liegt, ein Loch in der Region erzeugt, die durch den ersten Rand umschlossen ist. Analog dazu wird auch der Überlappungsbereich zweier Regionen als "Loch" betrachtet, d.h., er gehört nicht zu der Region, die von den beiden Rändern umschlossen wird. Die Region, die von einem Rand umschlossen wird, ist dabei unabhängig von der Umlaufrichtung des Randes.
Ein sich selbst schneidender Rand kann entweder am Schnittpunkt aufgetrennt werden oder er wird so angeordnet, dass er sich selbst am Schnittpunkt berührt. Die sich ergebenden Ränder werden als unabhängige Ränder betrachtet.
Die resultierenden Konturen ContoursDifference
werden automatisch
in Konturen, die Regionen umschließen, und Konturen, die Löcher umschließen,
klassifiziert. Diese Information wird im globalen Attribut 'is_hole'
gespeichert. Für Konturen, die Löcher umschließen, wird das globale Attribut
'is_hole' auf 1 gesetzt, ansonsten auf 0.
Aufeinanderfolgende Punkte, die sich in Zeilen- und Spaltenrichtung um weniger als 1e-06 Pixel unterscheiden, werden als ein Punkt angesehen.
Contours
(input_object) xld_cont(-array) →
object
Konturen, die die Region umschließen, von der die zweite Region abgezogen wird.
Sub
(input_object) xld_cont(-array) →
object
Konturen, die die Region umschließen, die von der ersten Region abgezogen wird.
ContoursDifference
(output_object) xld_cont(-array) →
object
Konturen, die die Differenzmenge umschließen.
difference_closed_contours_xld
liefert den Wert 2 (H_MSG_TRUE) wenn alle
Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung
durchgeführt
gen_contour_region_xld
,
zero_crossing_sub_pix
,
threshold_sub_pix
intersection_closed_contours_xld
,
symm_difference_closed_contours_xld
,
union2_closed_contours_xld
,
difference_closed_polygons_xld
Foundation