union_collinear_contours_xld
— Vereinigen von kollinearen Konturen.
union_collinear_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, MaxShift, MaxAngle, Mode : )
Der Operator union_collinear_contours_xld
vereinigt aus einer
Menge von Konturen (Contours
) diejenigen miteinander, die
zueinander kollinear sind. Die Vereinigung zweier Konturen ergibt
sich aus der Verkettung der Konturpunkte der beiden Eingabekonturen.
Sie werden zusammen mit den Konturen, die mit keiner anderen Kontur
vereinigt werden konnten, in UnionContours
zurück gegeben.
Typische Anwendungen
union_collinear_contours_xld
kann zum Schließen von Lücken in
extrahierten Kanten oder Linien verwendet werden. Diese Lücken können
z.B. durch geringen Kontrast in den Bildern entstehen. Der Operator
kann auch verwendet werden, um Konturen zu verbinden, die aufgrund von
Kreuzungspunkten der Kanten oder Linien voneinander getrennt sind.
Typischerweise ist union_collinear_contours_xld
Teil des
Prozesses, in dem extrahierte Kanten oder Linien gruppiert und
ausgewählt werden, um semantisch aussagekräftige Einheiten zu
bilden.
Beispiel
Das folgende Beispiel zeigt die Wirkung von
union_collinear_contours_xld
. Auf der linken Seite ist eine
Menge unzusammenhängender Konturen dargestellt. Die Konturen, die
jeweils auf der selben Seite des Rechtecks liegen, sind näherungsweise
kollinear. Auf der rechten Seite ist das Ergebnis von
union_collinear_contours_xld
dargestellt. Es zeigt, dass die
Konturen, die näherungsweise kollinear waren miteinander vereinigt
wurden. Die Konturen, die mehr oder weniger senkrecht zueinander
stehen, wurden nicht miteinander vereinigt.
(1) | (2) |
Parameter
Die Parameter MaxDistAbs
, MaxDistRel
,
MaxShift
und MaxAngle
legen fest, wann zwei Konturen
als kollinear angesehen werden. Der Parameter Mode
steuert
die Behandlung von Attributen der Eingabekonturen.
Prinzipiell sind die Maße für die ersten drei Parameter reihenfolgenabhängig, d.h., sie hängen davon ab, welche Kontur als Referenzkontur betrachtet wird, die durch die zweite Kontur erweitert werden soll. Um diese Reihenfolgenabhängigkeit zu vermeiden, werden die Maße jeweils in beiden Richtungen ermittelt. Es wird dann die Reihenfolge verwendet, die zu den kleineren Werten für die drei Maße führt. Beachten Sie, dass in den Illustrationen unten immer die linke Kontur als Referenzkontur verwendet wird.
MaxDistAbs
Der Parameter MaxDistAbs
legt den maximalen Abstand
zwischen zwei zu verbindenden Konturen fest. Der Abstand wird
entlang der Regressionsgeraden der Referenzkontur gemessen. Es
handelt sich also um die Länge der Projektion der Lücke zwischen den
beiden Konturen auf die Regressionsgerade der Referenzkontur.
MaxDistRel
Der Parameter MaxDistRel
legt den maximalen relativen
Abstand zwischen zwei zu verbindenden Konturen fest. Zur Berechnung
des relativen Abstands wird der absolute Abstand a (siehe die
Beschreibung des Parameters MaxDistAbs
) durch die Länge b
der Referenzkontur geteilt.
MaxShift
Der Parameter MaxShift
legt den maximalen Abstand der
zweiten Kontur von der Regressionsgeraden der Referenzkontur fest.
Dieser Abstand wird senkrecht zur Regressionsgeraden der
Referenzkontur gemessen.
MaxAngle
Der Parameter MaxAngle
legt den maximalen Winkel (im
Bogenmaß) zwischen den Regressionsgeraden der beiden Konturen fest.
Mode
Der Parameter Mode
steuert die Behandlung der Attribute,
die für die Eingabekonturen gesetzt sein können, z.B., wenn die
Konturen mit edges_sub_pix
erzeugt wurden.
Alle Attribute werden in die Ausgabekonturen kopiert.
Globale Attribute werden allerdings nur für solche Konturen übernommen, die nicht mit anderen Konturen vereinigt wurden. Im Allgemeinen ist es nicht möglich, aus den globalen Attributen von einzelnen Konturen die entsprechenden globalen Attribute einer vereinigten Kontur zu berechnen.
Die Ausgabekonturen enthalten keine Attribute. Diese Einstellung kann aus Laufzeitgründen gewählt werden, wenn die Attribute in den folgenden Arbeitsschritten nicht benötigt werden.
Um abzufragen, welche Attribute verfügbar sind, kann
query_contour_attribs_xld
verwendet werden.
Implementierungsdetails
Die Eingabekonturen werden paarweise analysiert und gegebenenfalls vereinigt. Dieser Prozess wird so oft wiederholt, bis keine weiteren Konturen mehr vereinigt werden können. Falls notwendig, wird die Reihenfolge umgekehrt, in der die Punkte innerhalb einer Kontur gespeichert sind, so dass die benachbarten Endpunkte der Konturen in der vereinigten Kontur direkt aufeinanderfolgen.
Zwei Konturen werden nur dann vereinigt, wenn alle Kriterien erfüllt
sind, wenn also alle Maße kleiner als die mit den entsprechenden
Parametern festgelegten Schwellwerte sind. Eine weitere Voraussetzung
ist, dass sich die Konturen nur unwesentlich überlappen dürfen (siehe
union_collinear_contours_ext_xld
für eine Illustration, die
Überlappung zeigt). Es wird lediglich eine Überlappung von maximal 0.5
Pixeln toleriert. Um einen größeren Überlappungsbereich zuzulassen, kann
union_collinear_contours_ext_xld
verwendet werden.
Neben der Suche nach Paaren von Konturen, die vereinigt werden
können, ist die Reihenfolge, in der die Konturen vereinigt werden
für das Verhalten von union_collinear_contours_xld
wichtig.
Hierfür werden alle Paare von Konturen durch die Berechnung eines
Kostenmaßes bewertet. Als Kostenmaß wird die Summe der einzelnen Maße
verwendet, wobei jedes Maß auf den entsprechend Schwellwert normiert
wird, der mit den Parametern MaxDistAbs
, MaxDistRel
,
MaxShift
und MaxAngle
festgelegt wurde. Das Paar von
Konturen, welches die geringsten Kosten aufweist, wird als erstes
vereinigt. Daraufhin werden die Kosten aktualisiert, um die neu
erzeugte Kontur zu berücksichtigen. Basierend auf den aktualisierten
Kosten wird das als nächstes zu vereinigende Paar ermittelt.
Die Definition von Kollinearität, wie sie in
union_collinear_contours_xld
verwendet wird, hängt von den
Regressionsgeraden der einzelnen Konturen ab. Um unerwartete
Ergebnisse zu vermeiden, sollten die Eingabekonturen einigermaßen
geraden Linien entsprechen. Dies kann z.B. mit dem Operator
segment_contours_xld
erreicht werden. Es ist zu beachten, dass
geschlossene Konturen mit keiner anderen Kontur vereinigt werden.
Einschränkungen und Alternativen
union_collinear_contours_xld
kann nur zum Vereinigen von
Konturen verwendet werden, die näherungsweise auf einer Geraden
liegen. Zum Vereinigen von Konturen, die genähert auf einem Kreis
liegen, kann union_cocircular_contours_xld
verwendet werden.
Um Konturen zu vereinigen, die beliebige Formen darstellen, kann
union_cotangential_contours_xld
verwendet werden. Sollen nur
sehr kleine Lücken zwischen Konturen geschlossen werden, unabhängig
von der Richtung in der die angrenzenden Konturen verlaufen, so kann
hierfür union_adjacent_contours_xld
verwendet werden.
Wenn die Konfigurationsmöglichkeiten von
union_collinear_contours_xld
nicht ausreichen, können die
Kriterien zur Vereinigung von Konturen mit
union_collinear_contours_ext_xld
noch detaillierter festgelegt
werden. Unter anderem können hiermit die maximale Überlappung der
Konturen festgelegt und die Gesamtkosten der Vereinigung begrenzt
werden. Durch letzteres kann verhindert werden, dass Paare von
Konturen vereinigt werden, bei denen die Maße für mehrere Kriterien
bereits nahe an den jeweiligen Schwellwerten liegen.
Contours
(input_object) xld_cont-array →
object
Eingabekonturen.
UnionContours
(output_object) xld_cont-array →
object
Ausgabekonturen.
MaxDistAbs
(input_control) real →
(real)
Maximale Länge der Lücke zwischen zwei Konturen, gemessen entlang der Regressionsgeraden der Referenzkontur.
Defaultwert: 10.0
Typischer Wertebereich: 0.0
≤
MaxDistAbs
MaxDistRel
(input_control) real →
(real)
Maximale Länge der Lücke zwischen zwei Konturen, relativ zur Länge der Referenzkontur. Beides wird entlang der Regressionsgeraden der Referenzkontur gemessen.
Defaultwert: 1.0
Typischer Wertebereich: 0.0
≤
MaxDistRel
MaxShift
(input_control) real →
(real)
Maximaler Abstand der zweiten Kontur von der Regressionsgeraden der Referenzkontur.
Defaultwert: 2.0
Typischer Wertebereich: 0.0
≤
MaxShift
MaxAngle
(input_control) real →
(real)
Maximaler Winkel zwischen den Regressionsgeraden von zwei Konturen.
Defaultwert: 0.1
Typischer Wertebereich: 0.0
≤
MaxAngle
≤
0.78539816339
Mode
(input_control) string →
(string)
Modus, der die Behandlung der Konturattribute festlegt.
Defaultwert: 'attr_keep'
Werteliste: 'attr_forget' , 'attr_keep'
edges_sub_pix
,
lines_gauss
,
segment_contours_xld
,
select_contours_xld
,
select_shape_xld
,
split_contours_xld
,
threshold_sub_pix
fit_line_contour_xld
,
select_contours_xld
,
select_shape_xld
union_collinear_contours_ext_xld
,
union_straight_contours_xld
,
union_cocircular_contours_xld
,
union_cotangential_contours_xld
,
union_adjacent_contours_xld
get_contour_xld
,
get_contour_attrib_xld
,
query_contour_attribs_xld
Foundation