dist_ellipse_contour_xlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXld (Operator)

Name

dist_ellipse_contour_xlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXld — Berechnen des Abstands von Konturen zu einer Ellipse.

Signatur

dist_ellipse_contour_xld(Contours : : Mode, MaxNumPoints, ClippingEndPoints, Row, Column, Phi, Radius1, Radius2 : MinDist, MaxDist, AvgDist, SigmaDist)

Herror dist_ellipse_contour_xld(const Hobject Contours, const char* Mode, const Hlong MaxNumPoints, const Hlong ClippingEndPoints, double Row, double Column, double Phi, double Radius1, double Radius2, double* MinDist, double* MaxDist, double* AvgDist, double* SigmaDist)

Herror T_dist_ellipse_contour_xld(const Hobject Contours, const Htuple Mode, const Htuple MaxNumPoints, const Htuple ClippingEndPoints, const Htuple Row, const Htuple Column, const Htuple Phi, const Htuple Radius1, const Htuple Radius2, Htuple* MinDist, Htuple* MaxDist, Htuple* AvgDist, Htuple* SigmaDist)

void DistEllipseContourXld(const HObject& Contours, const HTuple& Mode, const HTuple& MaxNumPoints, const HTuple& ClippingEndPoints, const HTuple& Row, const HTuple& Column, const HTuple& Phi, const HTuple& Radius1, const HTuple& Radius2, HTuple* MinDist, HTuple* MaxDist, HTuple* AvgDist, HTuple* SigmaDist)

void HXLDCont::DistEllipseContourXld(const HString& Mode, Hlong MaxNumPoints, Hlong ClippingEndPoints, double Row, double Column, double Phi, double Radius1, double Radius2, HTuple* MinDist, HTuple* MaxDist, HTuple* AvgDist, HTuple* SigmaDist) const

void HXLDCont::DistEllipseContourXld(const HString& Mode, Hlong MaxNumPoints, Hlong ClippingEndPoints, double Row, double Column, double Phi, double Radius1, double Radius2, double* MinDist, double* MaxDist, double* AvgDist, double* SigmaDist) const

void HXLDCont::DistEllipseContourXld(const char* Mode, Hlong MaxNumPoints, Hlong ClippingEndPoints, double Row, double Column, double Phi, double Radius1, double Radius2, double* MinDist, double* MaxDist, double* AvgDist, double* SigmaDist) const

void HXLDCont::DistEllipseContourXld(const wchar_t* Mode, Hlong MaxNumPoints, Hlong ClippingEndPoints, double Row, double Column, double Phi, double Radius1, double Radius2, double* MinDist, double* MaxDist, double* AvgDist, double* SigmaDist) const   (Nur Windows)

static void HOperatorSet.DistEllipseContourXld(HObject contours, HTuple mode, HTuple maxNumPoints, HTuple clippingEndPoints, HTuple row, HTuple column, HTuple phi, HTuple radius1, HTuple radius2, out HTuple minDist, out HTuple maxDist, out HTuple avgDist, out HTuple sigmaDist)

void HXLDCont.DistEllipseContourXld(string mode, int maxNumPoints, int clippingEndPoints, double row, double column, double phi, double radius1, double radius2, out HTuple minDist, out HTuple maxDist, out HTuple avgDist, out HTuple sigmaDist)

void HXLDCont.DistEllipseContourXld(string mode, int maxNumPoints, int clippingEndPoints, double row, double column, double phi, double radius1, double radius2, out double minDist, out double maxDist, out double avgDist, out double sigmaDist)

Beschreibung

dist_ellipse_contour_xlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXldDistEllipseContourXld berechnet den Abstand der Konturen in ContoursContoursContoursContourscontours zu einer Ellipse, die durch ihren Mittelpunkt (RowRowRowRowrow, ColumnColumnColumnColumncolumn), die Orientierung ihrer Hauptachse PhiPhiPhiPhiphi und die Länge der großen Radius1Radius1Radius1Radius1radius1 bzw. kleinen Halbachse Radius2Radius2Radius2Radius2radius2 beschrieben wird. Zur Bestimmung des Abstandes eines Konturpunktes zur Ellipse stehen dabei folgende Verfahren, selektierbar über ModeModeModeModemode zur Verfügung:

'geometric'

Als Abstandsmaß wird die geometrische Distanz der Konturpunkte zur Ellipse verwendet. Dieses Abstandsmaß wird auch orthogonaler oder euklidischer Abstand genannt.

'algebraic'

Als Abstandsmaß wird die algebraische Distanz verwendet, wobei die Ellipsenparameter a - f so normiert werden, dass der Mittelpunkt der Ellipse als Abstandswert die Länge der kleineren Halbachse Radius2Radius2Radius2Radius2radius2 erhält. Das Maß ist mit einem high curvature bias behaftet: In der Nähe von Ellipsenpunkten mit hoher Krümmung (insbesondere die Pole auf der Hauptachse) ist der Abstand kleiner als in der Nähe von Ellipsenpunkten mit geringer Krümmung (etwa die Pole auf der Nebenachse).

'focpoints'

Als Abstandsmaß wird die Abweichung verwendet, wobei die beiden Brennpunkte der Ellipse bezeichnen und a für die Länge der großen Halbachse Radius1Radius1Radius1Radius1radius1 steht. Das Maß ist mit einem low curvature bias behaftet: In der Nähe von Ellipsenpunkten mit hoher Krümmung (insbesondere die Pole auf der Hauptachse) ist der Abstand größer als in der Nähe von Ellipsenpunkten mit geringer Krümmung (etwa die Pole auf der Nebenachse).

'bisec'

Als Abstandsmaß wird die Entfernung des Konturpunkts vom Schnittpunkt der Winkelhalbierenden der beiden Geraden durch X und die beiden Brennpunkte mit der Ellipse verwendet. Dies ist eine gute Näherung an den Orthogonalabstand des Konturpunktes von der Ellipse. Die Genauigkeit der Näherung hängt sowohl vom Aspektverhältnis der Ellipse als auch von der Entfernung ab.

Zurückgegeben werden dann folgende statistische Werte über den Absolutbeträgen der einzelnen Abstände: Der minimale MinDistMinDistMinDistMinDistminDist und maximale Abstand MaxDistMaxDistMaxDistMaxDistmaxDist, der mittlere Abstand AvgDistAvgDistAvgDistAvgDistavgDist und die Standardabweichung des Abstandes SigmaDistSigmaDistSigmaDistSigmaDistsigmaDist.

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. 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 Abstandsberechnung auszuschließen.

Ausführungsinformationen

Parameter

ContoursContoursContoursContourscontours (input_object)  xld_cont(-array) objectHXLDContHXLDContHobject

Eingabekonturen.

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

Methode zur Abstandsbestimmung.

Defaultwert: 'geometric' "geometric" "geometric" "geometric" "geometric"

Werteliste: 'algebraic'"algebraic""algebraic""algebraic""algebraic", 'bisec'"bisec""bisec""bisec""bisec", 'focpoints'"focpoints""focpoints""focpoints""focpoints", 'geometric'"geometric""geometric""geometric""geometric"

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

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

Defaultwert: -1

Restriktion: MaxNumPoints >= 3

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

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

Defaultwert: 0

Restriktion: ClippingEndPoints >= 0

RowRowRowRowrow (input_control)  ellipse.center.y HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate des Mittelpunktes der Ellipse.

ColumnColumnColumnColumncolumn (input_control)  ellipse.center.x HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate des Mittelpunktes der Ellipse.

PhiPhiPhiPhiphi (input_control)  ellipse.angle.rad HTupleHTupleHtuple (real) (double) (double) (double)

Orientierung der Hauptachse im Bogenmaß.

Restriktion: Phi >= 0 && Phi <= 6.283185307

Radius1Radius1Radius1Radius1radius1 (input_control)  ellipse.radius1 HTupleHTupleHtuple (real) (double) (double) (double)

Länge der großen Halbachse.

Restriktion: Radius1 > 0

Radius2Radius2Radius2Radius2radius2 (input_control)  ellipse.radius2 HTupleHTupleHtuple (real) (double) (double) (double)

Länge der kleinen Halbachse.

Restriktion: Radius2 >= 0 && Radius2 <= Radius1

MinDistMinDistMinDistMinDistminDist (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Minimaler Abstand.

MaxDistMaxDistMaxDistMaxDistmaxDist (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Maximaler Abstand.

AvgDistAvgDistAvgDistAvgDistavgDist (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Mittlerer Abstand.

SigmaDistSigmaDistSigmaDistSigmaDistsigmaDist (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Standardabweichung des Abstands.

Beispiel (HDevelop)

read_image (Image, 'caltab')
find_caltab (Image, CalPlate, 'caltab_big.descr', 3, 112, 5)
reduce_domain (Image, CalPlate, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
select_contours_xld (Edges, EdgesClosed, 'closed', 0, 2.0, 0, 0)
select_contours_xld (EdgesClosed, EdgesMarks, 'contour_length', 20, 100, \
                     0, 0)
fit_ellipse_contour_xld (EdgesMarks, 'fitzgibbon', -1, 2, 0, 200, 3, 2.0, \
                         Row, Column, Phi, Radius1, Radius2, StartPhi, \
                         EndPhi, PointOrder)
for i := 0 to |Row|-1 by 1
    select_obj (EdgesMarks, ObjectSelected, i+1)
    dist_ellipse_contour_xld (ObjectSelected, 'bisec', -1, 0, Row[i], \
                              Column[i], Phi[i], Radius1[i], Radius2[i], \
                              MinDist, MaxDist, AvgDist, SigmaDist)
endfor

Beispiel (HDevelop)

read_image (Image, 'caltab')
find_caltab (Image, CalPlate, 'caltab_big.descr', 3, 112, 5)
reduce_domain (Image, CalPlate, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
select_contours_xld (Edges, EdgesClosed, 'closed', 0, 2.0, 0, 0)
select_contours_xld (EdgesClosed, EdgesMarks, 'contour_length', 20, 100, \
                     0, 0)
fit_ellipse_contour_xld (EdgesMarks, 'fitzgibbon', -1, 2, 0, 200, 3, 2.0, \
                         Row, Column, Phi, Radius1, Radius2, StartPhi, \
                         EndPhi, PointOrder)
for i := 0 to |Row|-1 by 1
    select_obj (EdgesMarks, ObjectSelected, i+1)
    dist_ellipse_contour_xld (ObjectSelected, 'bisec', -1, 0, Row[i], \
                              Column[i], Phi[i], Radius1[i], Radius2[i], \
                              MinDist, MaxDist, AvgDist, SigmaDist)
endfor

Beispiel (HDevelop)

read_image (Image, 'caltab')
find_caltab (Image, CalPlate, 'caltab_big.descr', 3, 112, 5)
reduce_domain (Image, CalPlate, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
select_contours_xld (Edges, EdgesClosed, 'closed', 0, 2.0, 0, 0)
select_contours_xld (EdgesClosed, EdgesMarks, 'contour_length', 20, 100, \
                     0, 0)
fit_ellipse_contour_xld (EdgesMarks, 'fitzgibbon', -1, 2, 0, 200, 3, 2.0, \
                         Row, Column, Phi, Radius1, Radius2, StartPhi, \
                         EndPhi, PointOrder)
for i := 0 to |Row|-1 by 1
    select_obj (EdgesMarks, ObjectSelected, i+1)
    dist_ellipse_contour_xld (ObjectSelected, 'bisec', -1, 0, Row[i], \
                              Column[i], Phi[i], Radius1[i], Radius2[i], \
                              MinDist, MaxDist, AvgDist, SigmaDist)
endfor

Beispiel (HDevelop)

read_image (Image, 'caltab')
find_caltab (Image, CalPlate, 'caltab_big.descr', 3, 112, 5)
reduce_domain (Image, CalPlate, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
select_contours_xld (Edges, EdgesClosed, 'closed', 0, 2.0, 0, 0)
select_contours_xld (EdgesClosed, EdgesMarks, 'contour_length', 20, 100, \
                     0, 0)
fit_ellipse_contour_xld (EdgesMarks, 'fitzgibbon', -1, 2, 0, 200, 3, 2.0, \
                         Row, Column, Phi, Radius1, Radius2, StartPhi, \
                         EndPhi, PointOrder)
for i := 0 to |Row|-1 by 1
    select_obj (EdgesMarks, ObjectSelected, i+1)
    dist_ellipse_contour_xld (ObjectSelected, 'bisec', -1, 0, Row[i], \
                              Column[i], Phi[i], Radius1[i], Radius2[i], \
                              MinDist, MaxDist, AvgDist, SigmaDist)
endfor

Beispiel (HDevelop)

read_image (Image, 'caltab')
find_caltab (Image, CalPlate, 'caltab_big.descr', 3, 112, 5)
reduce_domain (Image, CalPlate, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
select_contours_xld (Edges, EdgesClosed, 'closed', 0, 2.0, 0, 0)
select_contours_xld (EdgesClosed, EdgesMarks, 'contour_length', 20, 100, \
                     0, 0)
fit_ellipse_contour_xld (EdgesMarks, 'fitzgibbon', -1, 2, 0, 200, 3, 2.0, \
                         Row, Column, Phi, Radius1, Radius2, StartPhi, \
                         EndPhi, PointOrder)
for i := 0 to |Row|-1 by 1
    select_obj (EdgesMarks, ObjectSelected, i+1)
    dist_ellipse_contour_xld (ObjectSelected, 'bisec', -1, 0, Row[i], \
                              Column[i], Phi[i], Radius1[i], Radius2[i], \
                              MinDist, MaxDist, AvgDist, SigmaDist)
endfor

Ergebnis

Sind die Parameterwerte korrekt, dann liefert dist_ellipse_contour_xlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXldDistEllipseContourXld den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

fit_ellipse_contour_xldfit_ellipse_contour_xldFitEllipseContourXldFitEllipseContourXldFitEllipseContourXld

Alternativen

dist_ellipse_contour_points_xlddist_ellipse_contour_points_xldDistEllipseContourPointsXldDistEllipseContourPointsXldDistEllipseContourPointsXld

Modul

Foundation