fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld (Operator)

Name

fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld — Anpassen von Rechtecken an XLD-Konturen.

Signatur

fit_rectangle2_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Phi, Length1, Length2, PointOrder)

Herror fit_rectangle2_contour_xld(const Hobject Contours, const char* Algorithm, const Hlong MaxNumPoints, double MaxClosureDist, const Hlong ClippingEndPoints, const Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Phi, double* Length1, double* Length2, char* PointOrder)

Herror T_fit_rectangle2_contour_xld(const Hobject Contours, const Htuple Algorithm, const Htuple MaxNumPoints, const Htuple MaxClosureDist, const Htuple ClippingEndPoints, const Htuple Iterations, const Htuple ClippingFactor, Htuple* Row, Htuple* Column, Htuple* Phi, Htuple* Length1, Htuple* Length2, Htuple* PointOrder)

void FitRectangle2ContourXld(const HObject& Contours, const HTuple& Algorithm, const HTuple& MaxNumPoints, const HTuple& MaxClosureDist, const HTuple& ClippingEndPoints, const HTuple& Iterations, const HTuple& ClippingFactor, HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2, HTuple* PointOrder)

void HXLDCont::FitRectangle2ContourXld(const HString& Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2, HTuple* PointOrder) const

void HXLDCont::FitRectangle2ContourXld(const HString& Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Phi, double* Length1, double* Length2, HString* PointOrder) const

void HXLDCont::FitRectangle2ContourXld(const char* Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Phi, double* Length1, double* Length2, HString* PointOrder) const

void HXLDCont::FitRectangle2ContourXld(const wchar_t* Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Phi, double* Length1, double* Length2, HString* PointOrder) const   (Nur Windows)

static void HOperatorSet.FitRectangle2ContourXld(HObject contours, HTuple algorithm, HTuple maxNumPoints, HTuple maxClosureDist, HTuple clippingEndPoints, HTuple iterations, HTuple clippingFactor, out HTuple row, out HTuple column, out HTuple phi, out HTuple length1, out HTuple length2, out HTuple pointOrder)

void HXLDCont.FitRectangle2ContourXld(string algorithm, int maxNumPoints, double maxClosureDist, int clippingEndPoints, int iterations, double clippingFactor, out HTuple row, out HTuple column, out HTuple phi, out HTuple length1, out HTuple length2, out HTuple pointOrder)

void HXLDCont.FitRectangle2ContourXld(string algorithm, int maxNumPoints, double maxClosureDist, int clippingEndPoints, int iterations, double clippingFactor, out double row, out double column, out double phi, out double length1, out double length2, out string pointOrder)

Beschreibung

fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXldFitRectangle2ContourXld passt Rechtecke an die rechteckigen XLD-Konturen ContoursContoursContoursContourscontours an und gibt die Parameter der Rechtecke in RowRowRowRowrow, ColumnColumnColumnColumncolumn (Mittelpunkt), PhiPhiPhiPhiphi (Orientierung) sowie Length1Length1Length1Length1length1 und Length2Length2Length2Length2length2 (halben Kantenlängen) zurück. Der Winkel PhiPhiPhiPhiphi wird im Bogenmaß ausgegeben und gibt den Winkel der horizontalen Achse und der Kante mit der halben Länge Length1Length1Length1Length1length1 im mathematisch positiven Sinn (gegen den Uhrzeigersinn) an. Zusätzlich wird der Umlaufsinn der Kontur in PointOrderPointOrderPointOrderPointOrderpointOrder zurückgegeben. PointOrderPointOrderPointOrderPointOrderpointOrder = 'positive'"positive""positive""positive""positive" bedeutet hierbei, dass die Kontur im mathematisch positiven Sinn (gegen den Uhrzeigersinn) durchlaufen wird.

Das gewünschte Approximationsverfahren wird über den Parameter AlgorithmAlgorithmAlgorithmAlgorithmalgorithm ausgewählt:

'regression'"regression""regression""regression""regression"

Standard Least-Squares-Geradenanpassung.

'huber'"huber""huber""huber""huber"

Gewichtete Least-Squares-Geradenanpassung, bei der Ausreißer nach dem Ansatz von Huber gedämpft werden (siehe unten).

'tukey'"tukey""tukey""tukey""tukey"

Gewichtete Least-Squares-Geradenanpassung, bei der Ausreißer nach dem Ansatz von Tukey ignoriert werden (siehe unten).

In den Modi 'huber'"huber""huber""huber""huber" und 'tukey'"tukey""tukey""tukey""tukey" wird eine robuste Fehlerstatistik verwendet, um die Standardabweichung der Abstände der Konturpunkte (ohne Ausreißer) von den approximierenden Geraden des Rechtecks zu ermitteln. Die Standardabweichung wird pro Seite des Rechtecks separat berechnet, um auch Konturen, deren Seiten nicht genau senkrecht aufeinander stehen, verarbeiten zu können. Der Parameter ClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor (ein Skalierungsfaktor für diese Standardabweichung) steuert in diesen Modi den Grad der Ausreißerdämpfung: Je kleiner der Wert gewählt wird, desto mehr Punkte werden als Ausreißer behandelt. Die Ausreißerdetektion wird iteriert. Der Parameter IterationsIterationsIterationsIterationsiterations enthält die Anzahl durchzuführender Iterationen. Die letzten beiden Parameter werden für AlgorithmAlgorithmAlgorithmAlgorithmalgorithm = 'regression'"regression""regression""regression""regression" ignoriert. Bei dem Ansatz nach Tukey ('*tukey') werden Ausreißer noch vor der Anpassung eliminiert (und die übrigen Punkte werden gewichtet), während die Ausreißer bei dem Ansatz nach Huber ('*huber') noch in geringem Maße in die Optimierung eingehen. Speziell gehen bei Letzterem die Ausreißer linear und die übrigen Punkte quadratisch in die Optimierung ein. Bei dem algebraischen Abstand gehen alle Punkte quadratisch in die Optimierung ein. In der Praxis ist der Ansatz nach Tukey zu empfehlen.

Zur Reduktion des Aufwandes lässt sich die Berechnung auf eine Teilmenge der Konturpunkte einschränken: Wird für MaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsmaxNumPoints eine Zahl ungleich -1 übergeben, werden nur maximal MaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsmaxNumPoints gleichmäßig über die Kontur verteilte Punkte verwendet.

Da die Start- und Endpunkte einer Kontur je nach Vorverarbeitung möglicherweise fehlerbehaftet sein können, besteht die Möglichkeit, ClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsclippingEndPoints Punkte am Anfang und Ende der Kontur von der Rechteckanpassung auszuschließen.

Konturen, deren Anfangs- und Endpunkte weniger als MaxClosureDistMaxClosureDistMaxClosureDistMaxClosureDistmaxClosureDist voneinander entfernt sind, werden als geschlossen betrachtet. Bei geschlossenen Konturen wird der Endpunkt der Kontur nicht zur Anpassung herangezogen, da er sonst doppelt gewichtet würde.

Die Anpassung des Rechtecks an die Kontur basiert darauf, dass die Konturpunkte intern den vier Seiten des Rechtecks zugeordnet werden. Dabei muss es für jede Seite des Rechtecks mindestens einen Punkt geben, der im Inneren, d.h. nicht an den Enden, des Liniensegments der Seite liegt. Deshalb sind also mindestens acht Punkte zur Anpassung des Rechtecks notwendig. Ein Punkt der Kontur wird der Seite des Rechtecks zugeordnet, zu der er den kürzesten Abstand hat. Dabei werden die aktuell intern optimierten Rechtecksparameter verwendet. Falls bei der Zuordnung von Punkten zu Seiten des Rechtecks mindestens eine Seite ohne zugeordneten Punkt gefunden wird, kann das Rechteck nicht eindeutig bestimmt werden. In diesem Fall wird der Fehler 3266 zurückgeliefert. Aus diesem Grund muss bei der Verwendung von fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXldFitRectangle2ContourXld sichergestellt werden, dass die Eingabekonturen einem Rechteck hinreichend ähnlich sind. Insbesondere sollte keiner der Winkel der Kontur, falls sie durch vier Geradenstücke approximiert würde, weniger als 45 Grad oder mehr als 135 Grad betragen. Aufgrund der Zuordnung der Konturpunkte zur nächstgelegenen Rechteckseite würde dies dazu führen, dass mindestens einer Seite keine Konturpunkte zugeordnet würden. Weiterhin ist zu beachten, dass ClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor nicht zu klein gewählt wird, um zu vermeiden, dass durch die Ausreißerunterdrückung Rechtecksseiten ohne Punkte entstehen. Dies kann nur für AlgorithmAlgorithmAlgorithmAlgorithmalgorithm = 'tukey'"tukey""tukey""tukey""tukey" passieren. Falls die obigen Bedingungen beachtet werden, liefert fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXldFitRectangle2ContourXld hochgenaue Rechtecksparameter zurück. In Verbindung mit der Ausreißerunterdrückung nach Tukey kann fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXldFitRectangle2ContourXld z.B. sehr gut dazu verwendet werden, Rechtecke robust an rechteckige Konturen mit abgerundeten Ecken anzupassen.

Ausführungsinformationen

Parameter

ContoursContoursContoursContourscontours (input_object)  xld_cont(-array) objectHXLDContHXLDContHobject

Eingabekonturen.

AlgorithmAlgorithmAlgorithmAlgorithmalgorithm (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Algorithmus zur Rechtecksanpassung.

Defaultwert: 'regression' "regression" "regression" "regression" "regression"

Werteliste: 'huber'"huber""huber""huber""huber", 'regression'"regression""regression""regression""regression", 'tukey'"tukey""tukey""tukey""tukey"

MaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsmaxNumPoints (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale Anzahl Konturpunkte zur Rechtecksanpassung (-1 für alle Punkte).

Defaultwert: -1

Restriktion: MaxNumPoints == -1 || MaxNumPoints >= 8

MaxClosureDistMaxClosureDistMaxClosureDistMaxClosureDistmaxClosureDist (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Maximaler Abstand zweier Konturendpunkte, so dass die Kontur noch als geschlossene Kontur akzeptiert wird.

Defaultwert: 0.0

Restriktion: MaxClosureDist >= 0.0

ClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsclippingEndPoints (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der Konturpunkte am Anfang und Ende der Kontur, die für die Rechtecksanpassung ignoriert werden sollen.

Defaultwert: 0

Wertevorschläge: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Restriktion: ClippingEndPoints >= 0

IterationsIterationsIterationsIterationsiterations (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale Anzahl von Iterationen (unbenutzt bei 'regression').

Defaultwert: 3

Restriktion: Iterations >= 0

ClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Clipping Faktor für die Ausreißerdämpfung (typisch: 1.0 bei 'huber' und 2.0 bei 'tukey').

Defaultwert: 2.0

Wertevorschläge: 1.0, 1.5, 2.0, 2.5, 3.0

Restriktion: ClippingFactor > 0

RowRowRowRowrow (output_control)  rectangle2.center.y(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate des Mittelpunktes des Rechtecks.

ColumnColumnColumnColumncolumn (output_control)  rectangle2.center.x(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate des Mittelpunktes des Rechtecks.

PhiPhiPhiPhiphi (output_control)  rectangle2.angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Orientierung der Hauptachse des Rechtecks in Bogenmaß.

Length1Length1Length1Length1length1 (output_control)  rectangle2.hwidth(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Erster Halbmesser (halbe Länge) des Rechtecks.

Length2Length2Length2Length2length2 (output_control)  rectangle2.hheight(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Zweiter Halbmesser (halbe Breite) des Rechtecks.

PointOrderPointOrderPointOrderPointOrderpointOrder (output_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Mathematischer Umlaufsinn der Kontur.

Werteliste: 'negative'"negative""negative""negative""negative", 'positive'"positive""positive""positive""positive"

Ergebnis

Sind die Parameterwerte korrekt und konnte eine Rechteckanpassung durchgeführt werden, liefert fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXldFitRectangle2ContourXld den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt. Wenn der Parameter ClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor so klein gewählt worden ist, dass alle Punkte als Ausreißer klassifiziert werden, wird der Fehler 3266 zurückgeliefert. Falls für mindestens eine Seite des Rechteckts keine Punkte, die auf dieser Seite liegen, gefunden werden konnten, wird auch der Fehler 3266 zurückgeliefert.

Vorgänger

gen_contours_skeleton_xldgen_contours_skeleton_xldGenContoursSkeletonXldGenContoursSkeletonXldGenContoursSkeletonXld, lines_gausslines_gaussLinesGaussLinesGaussLinesGauss, lines_facetlines_facetLinesFacetLinesFacetLinesFacet, edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPix, smooth_contours_xldsmooth_contours_xldSmoothContoursXldSmoothContoursXldSmoothContoursXld, union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXldUnionCollinearContoursXld, union_collinear_contours_ext_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXldUnionCollinearContoursExtXld, union_adjacent_contours_xldunion_adjacent_contours_xldUnionAdjacentContoursXldUnionAdjacentContoursXldUnionAdjacentContoursXld

Nachfolger

dist_rectangle2_contour_points_xlddist_rectangle2_contour_points_xldDistRectangle2ContourPointsXldDistRectangle2ContourPointsXldDistRectangle2ContourPointsXld, gen_rectangle2_contour_xldgen_rectangle2_contour_xldGenRectangle2ContourXldGenRectangle2ContourXldGenRectangle2ContourXld

Alternativen

smallest_rectangle2_xldsmallest_rectangle2_xldSmallestRectangle2XldSmallestRectangle2XldSmallestRectangle2Xld

Siehe auch

fit_line_contour_xldfit_line_contour_xldFitLineContourXldFitLineContourXldFitLineContourXld, fit_circle_contour_xldfit_circle_contour_xldFitCircleContourXldFitCircleContourXldFitCircleContourXld, fit_ellipse_contour_xldfit_ellipse_contour_xldFitEllipseContourXldFitEllipseContourXldFitEllipseContourXld

Modul

Foundation