fit_circle_contour_xldfit_circle_contour_xldFitCircleContourXldFitCircleContourXld (Operator)

Name

fit_circle_contour_xldfit_circle_contour_xldFitCircleContourXldFitCircleContourXld — Approximieren von bogenförmigen XLD-Konturen durch Kreise.

Signatur

fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)

Herror fit_circle_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* Radius, double* StartPhi, double* EndPhi, char* PointOrder)

Herror T_fit_circle_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* Radius, Htuple* StartPhi, Htuple* EndPhi, Htuple* PointOrder)

void FitCircleContourXld(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* Radius, HTuple* StartPhi, HTuple* EndPhi, HTuple* PointOrder)

void HXLDCont::FitCircleContourXld(const HString& Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, HTuple* Row, HTuple* Column, HTuple* Radius, HTuple* StartPhi, HTuple* EndPhi, HTuple* PointOrder) const

void HXLDCont::FitCircleContourXld(const HString& Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Radius, double* StartPhi, double* EndPhi, HString* PointOrder) const

void HXLDCont::FitCircleContourXld(const char* Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Radius, double* StartPhi, double* EndPhi, HString* PointOrder) const

void HXLDCont::FitCircleContourXld(const wchar_t* Algorithm, Hlong MaxNumPoints, double MaxClosureDist, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* Row, double* Column, double* Radius, double* StartPhi, double* EndPhi, HString* PointOrder) const   (Nur Windows)

static void HOperatorSet.FitCircleContourXld(HObject contours, HTuple algorithm, HTuple maxNumPoints, HTuple maxClosureDist, HTuple clippingEndPoints, HTuple iterations, HTuple clippingFactor, out HTuple row, out HTuple column, out HTuple radius, out HTuple startPhi, out HTuple endPhi, out HTuple pointOrder)

void HXLDCont.FitCircleContourXld(string algorithm, int maxNumPoints, double maxClosureDist, int clippingEndPoints, int iterations, double clippingFactor, out HTuple row, out HTuple column, out HTuple radius, out HTuple startPhi, out HTuple endPhi, out HTuple pointOrder)

void HXLDCont.FitCircleContourXld(string algorithm, int maxNumPoints, double maxClosureDist, int clippingEndPoints, int iterations, double clippingFactor, out double row, out double column, out double radius, out double startPhi, out double endPhi, out string pointOrder)

Beschreibung

fit_circle_contour_xldfit_circle_contour_xldFitCircleContourXldFitCircleContourXldFitCircleContourXld approximiert die XLD-Konturen ContoursContoursContoursContourscontours durch Kreise. Eine Segmentation der Eingabekonturen erfolgt dabei nicht. Es muss also sichergestellt sein, dass jede Kontur in ContoursContoursContoursContourscontours genau einem Kreis entspricht. Zurückgegeben wird der Mittelpunkt (RowRowRowRowrow, ColumnColumnColumnColumncolumn) und der Radius RadiusRadiusRadiusRadiusradius.

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

'algebraic'"algebraic""algebraic""algebraic""algebraic"

Minimiert wird der algebraische Abstand zwischen den Konturpunkten und dem gesuchten Kreis.

'ahuber'"ahuber""ahuber""ahuber""ahuber"

Wie 'algebraic'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Huber gedämpft werden (siehe unten).

'atukey'"atukey""atukey""atukey""atukey"

Wie 'algebraic'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Tukey ignoriert werden (siehe unten).

'geometric'"geometric""geometric""geometric""geometric"

Minimiert wird der geometrische Anstand von Konturpunkten und dem gesuchten Kreis. Dieses Fehlermaß ist in einem statistischen Sinne optimal, braucht aber auch eine längere Rechenzeit. Besonders bei merklich verrauschten Konturpunkten ist die Wahl dieser Option zu empfehlen.

'geohuber'"geohuber""geohuber""geohuber""geohuber"

Wie 'geometric'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Huber gedämpft werden (siehe unten).

'geotukey'"geotukey""geotukey""geotukey""geotukey"

Wie 'geometric'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Tukey ignoriert werden (siehe unten).

In den Modi '*huber' und '*tukey' wird eine robuste Fehlerstatistik verwendet, um die Standardabweichung der Abstände der Konturpunkte (ohne Ausreißer) von dem approximierenden Kreis zu ermitteln. 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. Jeder Konturpunkt fließt individuell gewichtet in die Berechnung der Kreisparameter mit ein. Ausreißer werden nach dem Ansatz von Tukey komplett eliminiert, während bei dem Verfahren nach Huber diese noch gering, i.e. linear, gewichtet werden. Ohne robuste Gewichtung geht der Abstand quadratisch in die Optimierung mit ein. In der Praxis ist der Ansatz nach Tukey zu emfehlen.

Der Parameter IterationsIterationsIterationsIterationsiterations enthält die Anzahl durchzuführender Iterationen für die Algorithmen 'algebraic', 'ahuber' und 'atukey'. Für die Algorithmen 'geometric', 'geohuber' und 'geotukey' wird dieser Parameter ignoriert. Wird IterationsIterationsIterationsIterationsiterations auf null gesetzt, so versucht der Algorithmus nicht, den gefitteteten Kreis iterativ zu verbessern. Er überprüft lediglich, ob der erste Fit bereits ausreichend approximiert, abhängig von der gewählten Behandlung der Ausreißer.

Zur Reduktion des Aufwands 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.

Für Kreisbögen, also offene Konturen, werden die Anfangs- und Endpunkte bestimmt, indem zu den Anfangs- und Endpunkten der Eingabekonturen die nächstgelegenen Kreispunkte ermittelt werden. Zurückgegeben werden dann in StartPhiStartPhiStartPhiStartPhistartPhi und EndPhiEndPhiEndPhiEndPhiendPhi die korrespondierenden Winkel dieser Punkte bezogen auf die Horizontale, vgl. gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXld. Konturen, deren Anfangs- und Endpunkte weniger als MaxClosureDistMaxClosureDistMaxClosureDistMaxClosureDistmaxClosureDist voneinander entfernt sind, werden als geschlossen betrachtet und entsprechend durch einen Kreis (anstelle eines Kreisbogens) approximiert. Da die Start- und Endpunkte einer Kontur je nach Vorverarbeitung nicht exakt bekannt sein können, besteht die Möglichkeit, ClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsclippingEndPoints Punkte am Anfang und Ende der Kontur von der Kreisanpassung auszuschließen. Sie werden jedoch weiterhin für die Bestimmung der Anfangs- und Endwinkel verwendet.

Die notwendige, minimale Anzahl an Konturpunkten zur Anpassung eines Kreises ist drei. Es wird daher vorausgesetzt, dass die Konturen mindestens Punkte enthalten.

Ausführungsinformationen

Parameter

ContoursContoursContoursContourscontours (input_object)  xld_cont(-array) objectHXLDContHXLDContHobject

Eingabekonturen.

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

Algorithmus zur Kreisanpassung.

Defaultwert: 'algebraic' "algebraic" "algebraic" "algebraic" "algebraic"

Werteliste: 'ahuber'"ahuber""ahuber""ahuber""ahuber", 'algebraic'"algebraic""algebraic""algebraic""algebraic", 'atukey'"atukey""atukey""atukey""atukey", 'geohuber'"geohuber""geohuber""geohuber""geohuber", 'geometric'"geometric""geometric""geometric""geometric", 'geotukey'"geotukey""geotukey""geotukey""geotukey"

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

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

Defaultwert: -1

Restriktion: MaxNumPoints >= 3

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 Kreisanpassung ignoriert werden sollen.

Defaultwert: 0

Restriktion: ClippingEndPoints >= 0

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

Maximale Anzahl von Iterationen bei der gewichteten Optimierung.

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)  circle.center.y(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate des Mittelpunktes des Kreises.

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

Spaltenkoordinate des Mittelpunktes des Kreises.

RadiusRadiusRadiusRadiusradius (output_control)  circle.radius(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Radius des Kreises.

StartPhiStartPhiStartPhiStartPhistartPhi (output_control)  angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Winkel des Startpunktes [rad].

EndPhiEndPhiEndPhiEndPhiendPhi (output_control)  angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Winkel des Endpunktes [rad].

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

Mathematischer Umlaufsinn.

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

Ergebnis

Sind die Parameterwerte korrekt und konnte eine Kreisanpassung durchgeführt werden, liefert fit_circle_contour_xldfit_circle_contour_xldFitCircleContourXldFitCircleContourXldFitCircleContourXld 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 die Fehlermeldung 3264 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

Nachfolger

gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXld, disp_circledisp_circleDispCircleDispCircleDispCircle, get_points_ellipseget_points_ellipseGetPointsEllipseGetPointsEllipseGetPointsEllipse

Siehe auch

fit_ellipse_contour_xldfit_ellipse_contour_xldFitEllipseContourXldFitEllipseContourXldFitEllipseContourXld, fit_line_contour_xldfit_line_contour_xldFitLineContourXldFitLineContourXldFitLineContourXld, fit_rectangle2_contour_xldfit_rectangle2_contour_xldFitRectangle2ContourXldFitRectangle2ContourXldFitRectangle2ContourXld

Modul

Foundation