Name
fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld — Anpassen von Rechtecken an XLD-Konturen.
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)
Herror fit_rectangle2_contour_xld(Hobject Contours, const HTuple& Algorithm, const HTuple& MaxNumPoints, const HTuple& MaxClosureDist, const HTuple& ClippingEndPoints, const HTuple& Iterations, const HTuple& ClippingFactor, double* Row, double* Column, double* Phi, double* Length1, double* Length2, char* PointOrder)
Herror fit_rectangle2_contour_xld(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)
double HXLDCont::FitRectangle2ContourXld(const HTuple& Algorithm, const HTuple& MaxNumPoints, const HTuple& MaxClosureDist, const HTuple& ClippingEndPoints, const HTuple& Iterations, const HTuple& ClippingFactor, double* Column, double* Phi, double* Length1, double* Length2, char* PointOrder) const
HTuple HXLDContArray::FitRectangle2ContourXld(const HTuple& Algorithm, const HTuple& MaxNumPoints, const HTuple& MaxClosureDist, const HTuple& ClippingEndPoints, const HTuple& Iterations, const HTuple& ClippingFactor, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2, HTuple* PointOrder) const
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 HOperatorSetX.FitRectangle2ContourXld(
[in] IHUntypedObjectX* Contours, [in] VARIANT Algorithm, [in] VARIANT MaxNumPoints, [in] VARIANT MaxClosureDist, [in] VARIANT ClippingEndPoints, [in] VARIANT Iterations, [in] VARIANT ClippingFactor, [out] VARIANT* Row, [out] VARIANT* Column, [out] VARIANT* Phi, [out] VARIANT* Length1, [out] VARIANT* Length2, [out] VARIANT* PointOrder)
VARIANT HXLDContX.FitRectangle2ContourXld(
[in] BSTR Algorithm, [in] Hlong MaxNumPoints, [in] double MaxClosureDist, [in] Hlong ClippingEndPoints, [in] Hlong Iterations, [in] double ClippingFactor, [out] VARIANT* Column, [out] VARIANT* Phi, [out] VARIANT* Length1, [out] VARIANT* Length2, [out] VARIANT* PointOrder)
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)
fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld passt Rechtecke an die
rechteckigen XLD-Konturen ContoursContoursContoursContoursContourscontours an und gibt die
Parameter der Rechtecke in RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn
(Mittelpunkt), PhiPhiPhiPhiPhiphi (Orientierung) sowie Length1Length1Length1Length1Length1length1
und Length2Length2Length2Length2Length2length2 (halben Kantenlängen) zurück. Der Winkel
PhiPhiPhiPhiPhiphi wird im Bogenmaß ausgegeben und gibt den Winkel der
horizontalen Achse und der Kante mit der halben Länge
Length1Length1Length1Length1Length1length1 im mathematisch positiven Sinn (gegen den
Uhrzeigersinn) an. Zusätzlich wird der Umlaufsinn der Kontur in
PointOrderPointOrderPointOrderPointOrderPointOrderpointOrder zurückgegeben. PointOrderPointOrderPointOrderPointOrderPointOrderpointOrder =
'positive'"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
AlgorithmAlgorithmAlgorithmAlgorithmAlgorithmalgorithm ausgewählt:
- 'regression'"regression""regression""regression""regression""regression"
-
Standard Least-Squares-Geradenanpassung.
- 'huber'"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""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""huber" und 'tukey'"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
ClippingFactorClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor (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 IterationsIterationsIterationsIterationsIterationsiterations enthält die Anzahl
durchzuführender Iterationen. Die letzten beiden Parameter werden für
AlgorithmAlgorithmAlgorithmAlgorithmAlgorithmalgorithm = 'regression'"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
MaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsmaxNumPoints eine Zahl ungleich -1 übergeben,
werden nur maximal MaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsmaxNumPoints 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,
ClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsclippingEndPoints Punkte am Anfang und Ende der Kontur von
der Rechteckanpassung auszuschließen.
Konturen, deren Anfangs- und Endpunkte weniger als
MaxClosureDistMaxClosureDistMaxClosureDistMaxClosureDistMaxClosureDistmaxClosureDist 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_xldFitRectangle2ContourXldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld
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
ClippingFactorClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor nicht zu klein gewählt wird, um zu
vermeiden, dass durch die Ausreißerunterdrückung Rechtecksseiten
ohne Punkte entstehen. Dies kann nur für AlgorithmAlgorithmAlgorithmAlgorithmAlgorithmalgorithm =
'tukey'"tukey""tukey""tukey""tukey""tukey" passieren. Falls die obigen Bedingungen beachtet
werden, liefert fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld hochgenaue
Rechtecksparameter zurück. In Verbindung mit der
Ausreißerunterdrückung nach Tukey kann
fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld z.B. sehr gut dazu verwendet
werden, Rechtecke robust an rechteckige Konturen mit abgerundeten
Ecken anzupassen.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Algorithmus zur Rechtecksanpassung.
Defaultwert:
'regression'
"regression"
"regression"
"regression"
"regression"
"regression"
Werteliste: 'huber'"huber""huber""huber""huber""huber", 'regression'"regression""regression""regression""regression""regression", 'tukey'"tukey""tukey""tukey""tukey""tukey"
Maximale Anzahl Konturpunkte zur Rechtecksanpassung
(-1 für alle Punkte).
Defaultwert: -1
Restriktion: MaxNumPoints == -1 || MaxNumPoints >= 8
Maximaler Abstand zweier Konturendpunkte, so dass die
Kontur noch als geschlossene Kontur akzeptiert wird.
Defaultwert: 0.0
Restriktion: MaxClosureDist >= 0.0
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
Maximale Anzahl von Iterationen (unbenutzt bei
'regression').
Defaultwert: 3
Restriktion: Iterations >= 0
Clipping Faktor für die Ausreißerdämpfung
(typisch: 1.0 bei 'huber' und 2.0 bei 'tukey').
Defaultwert: 2.0
Werteliste: 1.0, 1.5, 2.0, 2.5, 3.0
Restriktion: ClippingFactor > 0
Zeilenkoordinate des Mittelpunktes des Rechtecks.
Spaltenkoordinate des Mittelpunktes des Rechtecks.
PhiPhiPhiPhiPhiphi (output_control) rectangle2.angle.rad(-array) → HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)
Orientierung der Hauptachse des Rechtecks in Bogenmaß.
Erster Halbmesser (halbe Länge) des Rechtecks.
Zweiter Halbmesser (halbe Breite) des Rechtecks.
Mathematischer Umlaufsinn der Kontur.
Werteliste: 'negative'"negative""negative""negative""negative""negative", 'positive'"positive""positive""positive""positive""positive"
Sind die Parameterwerte korrekt und konnte eine Rechteckanpassung
durchgeführt werden, liefert fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXld 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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt. Wenn
der Parameter ClippingFactorClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor 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.
gen_contours_skeleton_xldgen_contours_skeleton_xldGenContoursSkeletonXldgen_contours_skeleton_xldGenContoursSkeletonXldGenContoursSkeletonXld,
lines_gausslines_gaussLinesGausslines_gaussLinesGaussLinesGauss,
lines_facetlines_facetLinesFacetlines_facetLinesFacetLinesFacet,
edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix,
smooth_contours_xldsmooth_contours_xldSmoothContoursXldsmooth_contours_xldSmoothContoursXldSmoothContoursXld,
union_collinear_contours_xldunion_collinear_contours_xldUnionCollinearContoursXldunion_collinear_contours_xldUnionCollinearContoursXldUnionCollinearContoursXld,
union_collinear_contours_ext_xldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldunion_collinear_contours_ext_xldUnionCollinearContoursExtXldUnionCollinearContoursExtXld,
union_adjacent_contours_xldunion_adjacent_contours_xldUnionAdjacentContoursXldunion_adjacent_contours_xldUnionAdjacentContoursXldUnionAdjacentContoursXld
dist_rectangle2_contour_points_xlddist_rectangle2_contour_points_xldDistRectangle2ContourPointsXlddist_rectangle2_contour_points_xldDistRectangle2ContourPointsXldDistRectangle2ContourPointsXld,
gen_rectangle2_contour_xldgen_rectangle2_contour_xldGenRectangle2ContourXldgen_rectangle2_contour_xldGenRectangle2ContourXldGenRectangle2ContourXld
smallest_rectangle2_xldsmallest_rectangle2_xldSmallestRectangle2Xldsmallest_rectangle2_xldSmallestRectangle2XldSmallestRectangle2Xld
fit_line_contour_xldfit_line_contour_xldFitLineContourXldfit_line_contour_xldFitLineContourXldFitLineContourXld,
fit_circle_contour_xldfit_circle_contour_xldFitCircleContourXldfit_circle_contour_xldFitCircleContourXldFitCircleContourXld,
fit_ellipse_contour_xldfit_ellipse_contour_xldFitEllipseContourXldfit_ellipse_contour_xldFitEllipseContourXldFitEllipseContourXld
Foundation