KlassenKlassenKlassenKlassen | | | | Operatoren

union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXld (Operator)

Name

union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXld — Vereinigen von kollinearen Konturen.

Signatur

union_collinear_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, MaxShift, MaxAngle, Mode : )

Herror union_collinear_contours_xld(const Hobject Contours, Hobject* UnionContours, double MaxDistAbs, double MaxDistRel, double MaxShift, double MaxAngle, const char* Mode)

Herror T_union_collinear_contours_xld(const Hobject Contours, Hobject* UnionContours, const Htuple MaxDistAbs, const Htuple MaxDistRel, const Htuple MaxShift, const Htuple MaxAngle, const Htuple Mode)

Herror union_collinear_contours_xld(Hobject Contours, Hobject* UnionContours, const HTuple& MaxDistAbs, const HTuple& MaxDistRel, const HTuple& MaxShift, const HTuple& MaxAngle, const HTuple& Mode)

HXLDContArray HXLDContArray::UnionCollinearContoursXld(const HTuple& MaxDistAbs, const HTuple& MaxDistRel, const HTuple& MaxShift, const HTuple& MaxAngle, const HTuple& Mode) const

void UnionCollinearContoursXld(const HObject& Contours, HObject* UnionContours, const HTuple& MaxDistAbs, const HTuple& MaxDistRel, const HTuple& MaxShift, const HTuple& MaxAngle, const HTuple& Mode)

HXLDCont HXLDCont::UnionCollinearContoursXld(double MaxDistAbs, double MaxDistRel, double MaxShift, double MaxAngle, const HString& Mode) const

HXLDCont HXLDCont::UnionCollinearContoursXld(double MaxDistAbs, double MaxDistRel, double MaxShift, double MaxAngle, const char* Mode) const

void HOperatorSetX.UnionCollinearContoursXld(
[in] IHUntypedObjectX* Contours, [out] IHUntypedObjectX*UnionContours, [in] VARIANT MaxDistAbs, [in] VARIANT MaxDistRel, [in] VARIANT MaxShift, [in] VARIANT MaxAngle, [in] VARIANT Mode)

IHXLDContX* HXLDContX.UnionCollinearContoursXld(
[in] double MaxDistAbs, [in] double MaxDistRel, [in] double MaxShift, [in] double MaxAngle, [in] BSTR Mode)

static void HOperatorSet.UnionCollinearContoursXld(HObject contours, out HObject unionContours, HTuple maxDistAbs, HTuple maxDistRel, HTuple maxShift, HTuple maxAngle, HTuple mode)

HXLDCont HXLDCont.UnionCollinearContoursXld(double maxDistAbs, double maxDistRel, double maxShift, double maxAngle, string mode)

Beschreibung

Der Operator union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXld vereinigt aus einer Menge von geraden, linienförmige Konturen (ContoursContoursContoursContoursContourscontours) 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 UnionContoursUnionContoursUnionContoursUnionContoursUnionContoursunionContours 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 MaxDistAbsMaxDistAbsMaxDistAbsMaxDistAbsMaxDistAbsmaxDistAbs, MaxDistRelMaxDistRelMaxDistRelMaxDistRelMaxDistRelmaxDistRel, MaxShiftMaxShiftMaxShiftMaxShiftMaxShiftmaxShift und MaxAngleMaxAngleMaxAngleMaxAngleMaxAnglemaxAngle 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 MaxDistAbsMaxDistAbsMaxDistAbsMaxDistAbsMaxDistAbsmaxDistAbs 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. MaxDistRelMaxDistRelMaxDistRelMaxDistRelMaxDistRelmaxDistRel 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 MaxShiftMaxShiftMaxShiftMaxShiftMaxShiftmaxShift 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. MaxAngleMaxAngleMaxAngleMaxAngleMaxAnglemaxAngle 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_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXld verwendet werden. Dieser stellt eine erweiterte Version von union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXld 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_xldunion_collinear_contours_xldUnionCollinearContoursXldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXld 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_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXld 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 ModeModeModeModeModemode lässt sich steuern, wie mit eventuellen Attributen der Eingabekonturen umgegangen werden soll. Konturattribute werden beispielsweise vom Operator edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix gesetzt und beschreiben dort für jeden Konturpunkt die lokale Orientierung, die Kantenstärke und die Gradientenrichtung. Mit der Defaulteinstellung 'attr_keep'"attr_keep""attr_keep""attr_keep""attr_keep""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'"attr_forget""attr_forget""attr_forget""attr_forget""attr_forget" angegeben werden muss. Voraussetzung dafür ist natürlich, dass für die weitere Auswertung die Attribute nicht mehr benötigt werden.

Parallelisierung

Parameter

ContoursContoursContoursContoursContourscontours (input_object)  xld_cont-array objectHXLDContHXLDContHXLDContArrayHXLDContXHobject

Eingabe-Konturen.

UnionContoursUnionContoursUnionContoursUnionContoursUnionContoursunionContours (output_object)  xld_cont-array objectHXLDContHXLDContHXLDContArrayHXLDContXHobject *

Ausgabe-Konturen.

MaxDistAbsMaxDistAbsMaxDistAbsMaxDistAbsMaxDistAbsmaxDistAbs (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Maximaler Abstand der Endpunkte in Richtung der Referenzgeraden.

Defaultwert: 10.0

Typischer Wertebereich: 0.0 ≤ MaxDistAbs MaxDistAbs MaxDistAbs MaxDistAbs MaxDistAbs maxDistAbs

MaxDistRelMaxDistRelMaxDistRelMaxDistRelMaxDistRelmaxDistRel (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

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 MaxDistRel MaxDistRel MaxDistRel MaxDistRel maxDistRel

MaxShiftMaxShiftMaxShiftMaxShiftMaxShiftmaxShift (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Maximaler Abstand der Konturen von der Referenzgeraden der zu verlängernden Kontur.

Defaultwert: 2.0

Typischer Wertebereich: 0.0 ≤ MaxShift MaxShift MaxShift MaxShift MaxShift maxShift

MaxAngleMaxAngleMaxAngleMaxAngleMaxAnglemaxAngle (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Maximale Richtungsdifferenz.

Defaultwert: 0.1

Typischer Wertebereich: 0.0 ≤ MaxAngle MaxAngle MaxAngle MaxAngle MaxAngle maxAngle ≤ 0.78539816339

ModeModeModeModeModemode (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Modus für die Behandlung der Konturattribute

Defaultwert: 'attr_keep' "attr_keep" "attr_keep" "attr_keep" "attr_keep" "attr_keep"

Werteliste: 'attr_forget'"attr_forget""attr_forget""attr_forget""attr_forget""attr_forget", 'attr_keep'"attr_keep""attr_keep""attr_keep""attr_keep""attr_keep"

Vorgänger

split_contours_xldsplit_contours_xldSplitContoursXldsplit_contours_xldSplitContoursXldSplitContoursXld, select_contours_xldselect_contours_xldSelectContoursXldselect_contours_xldSelectContoursXldSelectContoursXld

Alternativen

union_collinear_contours_ext_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXld, union_cocircular_contours_xldunion_cocircular_contours_xldUnionCocircularContoursXldunion_cocircular_contours_xldUnionCocircularContoursXldUnionCocircularContoursXld, union_straight_contours_xldunion_straight_contours_xldUnionStraightContoursXldunion_straight_contours_xldUnionStraightContoursXldUnionStraightContoursXld, union_adjacent_contours_xldunion_adjacent_contours_xldUnionAdjacentContoursXldunion_adjacent_contours_xldUnionAdjacentContoursXldUnionAdjacentContoursXld, union_cotangential_contours_xldunion_cotangential_contours_xldUnionCotangentialContoursXldunion_cotangential_contours_xldUnionCotangentialContoursXldUnionCotangentialContoursXld

Siehe auch

edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix, threshold_sub_pixthreshold_sub_pixThresholdSubPixthreshold_sub_pixThresholdSubPixThresholdSubPix, gen_polygons_xldgen_polygons_xldGenPolygonsXldgen_polygons_xldGenPolygonsXldGenPolygonsXld, get_contour_xldget_contour_xldGetContourXldget_contour_xldGetContourXldGetContourXld, get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldget_contour_attrib_xldGetContourAttribXldGetContourAttribXld

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren