fit_line_contour_xldfit_line_contour_xldFitLineContourXldFitLineContourXld (Operator)

Name

fit_line_contour_xldfit_line_contour_xldFitLineContourXldFitLineContourXld — Approximieren von XLD-Konturen durch Liniensegmente.

Signatur

fit_line_contour_xld(Contours : : Algorithm, MaxNumPoints, ClippingEndPoints, Iterations, ClippingFactor : RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

Herror fit_line_contour_xld(const Hobject Contours, const char* Algorithm, const Hlong MaxNumPoints, const Hlong ClippingEndPoints, const Hlong Iterations, double ClippingFactor, double* RowBegin, double* ColBegin, double* RowEnd, double* ColEnd, double* Nr, double* Nc, double* Dist)

Herror T_fit_line_contour_xld(const Hobject Contours, const Htuple Algorithm, const Htuple MaxNumPoints, const Htuple ClippingEndPoints, const Htuple Iterations, const Htuple ClippingFactor, Htuple* RowBegin, Htuple* ColBegin, Htuple* RowEnd, Htuple* ColEnd, Htuple* Nr, Htuple* Nc, Htuple* Dist)

void FitLineContourXld(const HObject& Contours, const HTuple& Algorithm, const HTuple& MaxNumPoints, const HTuple& ClippingEndPoints, const HTuple& Iterations, const HTuple& ClippingFactor, HTuple* RowBegin, HTuple* ColBegin, HTuple* RowEnd, HTuple* ColEnd, HTuple* Nr, HTuple* Nc, HTuple* Dist)

void HXLDCont::FitLineContourXld(const HString& Algorithm, Hlong MaxNumPoints, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, HTuple* RowBegin, HTuple* ColBegin, HTuple* RowEnd, HTuple* ColEnd, HTuple* Nr, HTuple* Nc, HTuple* Dist) const

void HXLDCont::FitLineContourXld(const HString& Algorithm, Hlong MaxNumPoints, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* RowBegin, double* ColBegin, double* RowEnd, double* ColEnd, double* Nr, double* Nc, double* Dist) const

void HXLDCont::FitLineContourXld(const char* Algorithm, Hlong MaxNumPoints, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* RowBegin, double* ColBegin, double* RowEnd, double* ColEnd, double* Nr, double* Nc, double* Dist) const

void HXLDCont::FitLineContourXld(const wchar_t* Algorithm, Hlong MaxNumPoints, Hlong ClippingEndPoints, Hlong Iterations, double ClippingFactor, double* RowBegin, double* ColBegin, double* RowEnd, double* ColEnd, double* Nr, double* Nc, double* Dist) const   (Nur Windows)

static void HOperatorSet.FitLineContourXld(HObject contours, HTuple algorithm, HTuple maxNumPoints, HTuple clippingEndPoints, HTuple iterations, HTuple clippingFactor, out HTuple rowBegin, out HTuple colBegin, out HTuple rowEnd, out HTuple colEnd, out HTuple nr, out HTuple nc, out HTuple dist)

void HXLDCont.FitLineContourXld(string algorithm, int maxNumPoints, int clippingEndPoints, int iterations, double clippingFactor, out HTuple rowBegin, out HTuple colBegin, out HTuple rowEnd, out HTuple colEnd, out HTuple nr, out HTuple nc, out HTuple dist)

void HXLDCont.FitLineContourXld(string algorithm, int maxNumPoints, int clippingEndPoints, int iterations, double clippingFactor, out double rowBegin, out double colBegin, out double rowEnd, out double colEnd, out double nr, out double nc, out double dist)

Beschreibung

fit_line_contour_xldfit_line_contour_xldFitLineContourXldFitLineContourXldFitLineContourXld approximiert die XLD-Konturen ContoursContoursContoursContourscontours durch Liniensegmente. Eine Segmentation der Eingabekonturen erfolgt dabei nicht. Es muss also sichergestellt sein, dass jede Kontur in ContoursContoursContoursContourscontours genau einem Liniensegment entspricht. Zurückgegeben wird der Anfangs- (RowBeginRowBeginRowBeginRowBeginrowBegin, ColBeginColBeginColBeginColBegincolBegin) bzw. Endpunkt (RowEndRowEndRowEndRowEndrowEnd, ColEndColEndColEndColEndcolEnd), sowie die Geradengleichung jedes Liniensegments, codiert durch den Normalenvektor (NrNrNrNrnr, NcNcNcNcnc) der Gerade und dem Abstand DistDistDistDistdist der Gerade vom Ursprung, d.h. die Geradengleichung ist gegeben durch .

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).

'drop'"drop""drop""drop""drop":

Gewichtete Least-Squares-Geradenanpassung, bei der Ausreißer ignoriert werden, d.h. alle Konturpunkte, die weiter von der Kontur entfernt liegen als die mittlere Entfernung von der Regressionsgeraden multipliziert mit dem ClippingFactorClippingFactorClippingFactorClippingFactorclippingFactor (s.u.).

'gauss'"gauss""gauss""gauss""gauss":

Gewichtete Least-Squares-Geradenanpassung, bei der Ausreißer gestützt auf Mittelwert und Standardabweichung der Abweichungen aller Konturpunkte von der Geraden gedämpft werden.

In den Modi 'huber', 'tukey' und 'drop' wird eine robuste Fehlerstatistik verwendet, um die Standardabweichung der Abstände der Konturpunkte (ohne Ausreißer) von der approximierenden Geraden 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. Die Ausreißerdetektion wird iteriert. Der Parameter IterationsIterationsIterationsIterationsiterations enthält die Anzahl durchzuführender Iterationen. Er wird im Modus 'regression' ignoriert. Bei dem Ansatz nach Tukey ('tukey') werden Ausreißer noch vor der Kreisanpassung 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. In der Praxis ist der Ansatz nach Tukey zu emfehlen.

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.

Die Anfangs- und Endpunkte werden bestimmt, indem zu den Anfangs- und Endpunkten der Eingabekonturen die nächstgelegenen Punkte auf den zugrundeliegenden Regressionsgeraden ermittelt werden. 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 Geradenanpassung auszuschließen. Sie werden jedoch weiterhin für die Bestimmung der Anfangs- und Endpunkte verwendet.

Die notwendige, minimale Anzahl an Konturpunkten zur Anpassung einer Linie ist zwei. 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 Geradenanpassung.

Defaultwert: 'tukey' "tukey" "tukey" "tukey" "tukey"

Werteliste: 'drop'"drop""drop""drop""drop", 'gauss'"gauss""gauss""gauss""gauss", '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 Geradenanpassung (-1 für alle Punkte).

Defaultwert: -1

Restriktion: MaxNumPoints >= 2

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

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

Defaultwert: 0

Restriktion: ClippingEndPoints >= 0

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

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

Defaultwert: 5

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 'drop' sowie 2.0 bei 'tukey').

Defaultwert: 2.0

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

Restriktion: ClippingFactor > 0

RowBeginRowBeginRowBeginRowBeginrowBegin (output_control)  line.begin.y(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate der Anfangspunkte der Liniensegmente.

ColBeginColBeginColBeginColBegincolBegin (output_control)  line.begin.x(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate der Anfangspunkte der Liniensegmente.

RowEndRowEndRowEndRowEndrowEnd (output_control)  line.end.y(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate der Endpunkte der Liniensegmente.

ColEndColEndColEndColEndcolEnd (output_control)  line.end.x(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate der Endpunkte der Liniensegmente.

NrNrNrNrnr (output_control)  number(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Geradenparameter: Zeilenkoordinate von Normalenvektor

NcNcNcNcnc (output_control)  number(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Geradenparameter: Spaltenkoordinate von Normalenvektor

DistDistDistDistdist (output_control)  number(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Geradenparameter: Abstand der Geraden vom Ursprung

Beispiel (HDevelop)

read_image (Image, 'mreut')
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 20, 40)
gen_polygons_xld (Edges, Polygons, 'ramer', 2)
split_contours_xld (Polygons, Contours, 'polygon', 1, 5)
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, \
                      ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

Beispiel (HDevelop)

read_image (Image, 'mreut')
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 20, 40)
gen_polygons_xld (Edges, Polygons, 'ramer', 2)
split_contours_xld (Polygons, Contours, 'polygon', 1, 5)
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, \
                      ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

Beispiel (HDevelop)

read_image (Image, 'mreut')
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 20, 40)
gen_polygons_xld (Edges, Polygons, 'ramer', 2)
split_contours_xld (Polygons, Contours, 'polygon', 1, 5)
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, \
                      ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

Beispiel (HDevelop)

read_image (Image, 'mreut')
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 20, 40)
gen_polygons_xld (Edges, Polygons, 'ramer', 2)
split_contours_xld (Polygons, Contours, 'polygon', 1, 5)
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, \
                      ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

Beispiel (HDevelop)

read_image (Image, 'mreut')
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 20, 40)
gen_polygons_xld (Edges, Polygons, 'ramer', 2)
split_contours_xld (Polygons, Contours, 'polygon', 1, 5)
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, \
                      ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

Ergebnis

Sind die Parameterwerte korrekt und konnte eine Geradenanpassung durchgeführt werden, liefert fit_line_contour_xldfit_line_contour_xldFitLineContourXldFitLineContourXldFitLineContourXld 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

disp_linedisp_lineDispLineDispLineDispLine, line_orientationline_orientationLineOrientationLineOrientationLineOrientation

Siehe auch

regress_contours_xldregress_contours_xldRegressContoursXldRegressContoursXldRegressContoursXld, get_regress_params_xldget_regress_params_xldGetRegressParamsXldGetRegressParamsXldGetRegressParamsXld

Modul

Foundation