| Operatoren |
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.
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.
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.
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.
Der Parameter MaxAngle legt den maximalen Winkel (im Bogenmaß) zwischen den Regressionsgeraden der beiden Konturen fest.
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.
Eingabekonturen.
Ausgabekonturen.
Maximale Länge der Lücke zwischen zwei Konturen, gemessen entlang der Regressionsgeraden der Referenzkontur.
Defaultwert: 10.0
Typischer Wertebereich: 0.0 ≤ MaxDistAbs
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
Maximaler Abstand der zweiten Kontur von der Regressionsgeraden der Referenzkontur.
Defaultwert: 2.0
Typischer Wertebereich: 0.0 ≤ MaxShift
Maximaler Winkel zwischen den Regressionsgeraden von zwei Konturen.
Defaultwert: 0.1
Typischer Wertebereich: 0.0 ≤ MaxAngle ≤ 0.78539816339
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
| Operatoren |