| 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 geraden, linienförmige Konturen (Contours) diejenigen miteinander, die zueinander kollinear sind. Die Vereinigung zweier Konturen ergibt sich aus der Konkatenation der Konturpunkte der beiden Eingangskonturen. Gegebenenfalls werden diese zuvor umgedreht, so dass die zu verbindenen Endpunkte in der resultierenden Punktliste direkte Nachbarn sind. Die Operation wird intern solange wiederholt, bis keine Konturen mehr vereinigt werden können. Als Ergebnis werden in UnionContours alle durch Vereinigung neu entstandenen Konturen sowie (unverändert) die Eingangskonturen, die mit keiner anderen Kontur verbunden werden konnten, zurückgegeben.
Zwei Linien gelten als kollinear, wenn eine der Linien durch die andere linear fortgesetzt werden kann. Dabei ist es ausreichend, wenn eine Linie durch die andere fortgesetzt wird. Ist allerdings eine der betrachteten Linien deutlich länger als die andere (mehr als doppelt so lang), muss die längere Linie durch die kürzere linear fortgesetzt werden und nicht umgekehrt.
Zwei Konturen sind im wesentlichen dann kollinear, wenn die Linien, die sich aus den Regressesionsgeraden und den auf sie projizierten Endpunkten ergeben, zueinander kollinear sind. Dabei sollte vom Anwender -- u.U. mit Hilfe einer geeigneten Vorverarbeitung -- sichergestellt werden, dass es sich bei den Konturen näherungsweise um gerade Linienstücke handelt. Insbesondere gilt, dass geschlossene Konturen nicht kollinear zu anderen Konturen sein können.
Mit Hilfe der Parameter MaxDistAbs, MaxDistRel, MaxShift und MaxAngle kann der Anwender vorgeben, wann zwei Konturen als kollinear gelten sollen und wann nicht. Die ersten drei Parameter beziehen sich dabei auf die Linie, für die aktuell untersucht wird, ob sie durch eine zweite verlängert werden kann. Dabei bezeichnet MaxDistAbs den maximal zulässigen Abstand der zweiten Kontur von der untersuchten Kontur in Richtung ihrer Regressionsgeraden. Dies entspricht dem Abstand der Projektionen der beiden benachbarten Endpunkte auf die Regressionsgerade der ersten Kontur. MaxDistRel bezeichnet den gleichen Abstand, definiert ihn jedoch relativ zur Länge der untersuchten Kontur. Das Minimum der beiden Entfernungen definiert den konkret anzuwendenden Schwellwert für die betrachtete Kontur.
Der Parameter MaxShift definiert den maximal zulässigen Abstand der zweiten Kontur von der Regressionsgeraden der ersten Kontur. Die Abstände ergeben sich nicht direkt aus den Endpunkten der zweiten Kontur, sondern aus deren Projektionen auf die Regressionsgerade der zweiten Kontur. In die Bewertung fließt dabei der größere der beiden Abstände ein. MaxAngle bestimmt schließlich den maximal zulässigen Winkel (im Bogenmaß) zwischen den beiden Regressionsgeraden.
Damit zwei Konturen vereinigt werden können, müssen alle Bedingungen (bezogen auf eine der beiden Konturen, die die Referenzregressionsgerade bestimmt) erfüllt sein, d.h. alle Werte müssen unter den angegebenen Schwellwerten liegen. Darüber hinaus dürfen sich die Konturen nur wenig (um 0.5 Pixel) überlappen. Soll der Grad der Überlappung genauer kontrolliert werden, muss der Operator union_collinear_contours_ext_xld verwendet werden. Dieser stellt eine erweiterte Version von union_collinear_contours_xld dar und ermöglicht neben zahlreichen weiteren Parametern das Setzen eines Überlappungsbereichs.
Für das Vereinigen kollinearer Konturen ist es nicht nur wichtig zu bestimmen, welche Konturen vereinigt werden können, sondern auch in welcher Reihenfolge dies zu erfolgen hat, da nach dem Zusammenfügen zweier Konturen sich für die neue Kontur im Allgemeinen andere Bewertungen ergeben als zuvor für die einzelnen Teilstücke. Aus diesem Grund ermittelt union_collinear_contours_xld für jedes mögliche Konturpaar eine Bewertung (Kosten) und verbindet stets das Konturpaar zuerst, das die beste Bewertung (geringste Kosten) erhielt. Danach werden für die neue Kontur wiederum alle Kandidaten für eine mögliche Vereinigung ermittelt, bewertet und der bestehenden Liste potentieller Konturpaare hinzugefügt. Erhalten zwei Konturpaare exakt die gleiche, beste Bewertung, wird die Reihenfolge der Vereinigungen durch die Ordnung der Konturen im XLD-Objektarray bestimmt. Dabei ist zu beachten, dass, wenn eine Kontur in beiden Paaren vertreten ist, durch die erste Vereinigung die zweite möglicherweise hinfällig geworden ist.
Die Kosten für das Verbinden ergeben sich dabei in natürlicher Weise aus den oben definierten Abständen. Je kleiner die Abstände zwischen zwei Konturen sind, desto geringer sind die Kosten. Entspricht ein Abstand genau dem Schwellwert, wird für diesen Wert der Anteil an den Kosten maximal. Als zusätzliche Größe fließt in die Kostenberechnung das Liniensegment mit ein, das die beiden Konturen verbindet. Ausschlaggebend sind hier der Winkel gegenüber der Regressionsgeraden und die Länge der Linie (d.h. deren Anteil senkrecht zur Regressionsgeraden).
Die Gewichtung der einzelnen Parameter erfolgt hier ausschließlich über die vorgegebenen Schwellwerte. Beim Operator union_collinear_contours_ext_xld lässt sich im Gegensatz dazu der Einfluss jedes einzelnen Parameters auf die Bewertung individuell einstellen. Darüber hinaus können dort die Gesamtkosten begrenzt werden, um Verbindungen zwischen Konturen zu verhindern, für die alle Werte sehr nah an den Grenzen sind.
Mit Hilfe des Parameters Mode lässt sich steuern, wie mit eventuellen Attributen der Eingabekonturen umgegangen werden soll. Konturattribute werden beispielsweise vom Operator edges_sub_pix gesetzt und beschreiben dort für jeden Konturpunkt die lokale Orientierung, die Kantenstärke und die Gradientenrichtung. Mit der Defaulteinstellung 'attr_keep' werden - falls vorhanden - die Attribute in die Ausgabekonturen übernommen und gegebenenfalls, wenn eine Kontur für die Vereinigung mit einer anderen gedreht werden muss, an die neue Richtung angepasst. Bei sehr vielen Eingabekonturen kann es aus Laufzeitgründen allerdings sinnvoll sein, die Attribute zu ignorieren, wofür als Wert 'attr_forget' angegeben werden muss. Voraussetzung dafür ist natürlich, dass für die weitere Auswertung die Attribute nicht mehr benötigt werden.
Eingabe-Konturen.
Ausgabe-Konturen.
Maximaler Abstand der Endpunkte in Richtung der Referenzgeraden.
Defaultwert: 10.0
Typischer Wertebereich: 0.0 ≤ MaxDistAbs
Maximaler Abstand der Endpunkte in Richtung der Referenzgeraden relativ zur Länge der zu verlängernden Kontur.
Defaultwert: 1.0
Typischer Wertebereich: 0.0 ≤ MaxDistRel
Maximaler Abstand der Konturen von der Referenzgeraden der zu verlängernden Kontur.
Defaultwert: 2.0
Typischer Wertebereich: 0.0 ≤ MaxShift
Maximale Richtungsdifferenz.
Defaultwert: 0.1
Typischer Wertebereich: 0.0 ≤ MaxAngle ≤ 0.78539816339
Modus für die Behandlung der Konturattribute
Defaultwert: 'attr_keep'
Werteliste: 'attr_forget', 'attr_keep'
split_contours_xld, select_contours_xld
union_collinear_contours_ext_xld, union_cocircular_contours_xld, union_straight_contours_xld, union_adjacent_contours_xld, union_cotangential_contours_xld
edges_sub_pix, threshold_sub_pix, gen_polygons_xld, get_contour_xld, get_contour_attrib_xld
Foundation
| Operatoren |