KlassenKlassenKlassenKlassen | | | | Operatoren

dist_ellipse_contour_xlddist_ellipse_contour_xldDistEllipseContourXlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXld (Operator)

Name

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

Herror dist_ellipse_contour_xld(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, double* MinDist, double* MaxDist, double* AvgDist, double* SigmaDist)

Herror dist_ellipse_contour_xld(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)

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

HTuple HXLDContArray::DistEllipseContourXld(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* MaxDist, HTuple* AvgDist, HTuple* SigmaDist) const

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 HOperatorSetX.DistEllipseContourXld(
[in] IHUntypedObjectX* Contours, [in] VARIANT Mode, [in] VARIANT MaxNumPoints, [in] VARIANT ClippingEndPoints, [in] VARIANT Row, [in] VARIANT Column, [in] VARIANT Phi, [in] VARIANT Radius1, [in] VARIANT Radius2, [out] VARIANT* MinDist, [out] VARIANT* MaxDist, [out] VARIANT* AvgDist, [out] VARIANT* SigmaDist)

VARIANT HXLDContX.DistEllipseContourXld(
[in] BSTR Mode, [in] Hlong MaxNumPoints, [in] Hlong ClippingEndPoints, [in] double Row, [in] double Column, [in] double Phi, [in] double Radius1, [in] double Radius2, [out] VARIANT* MaxDist, [out] VARIANT* AvgDist, [out] VARIANT* SigmaDist)

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_xldDistEllipseContourXlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXld berechnet den Abstand der Konturen in ContoursContoursContoursContoursContourscontours zu einer Ellipse, die durch ihren Mittelpunkt (RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn), die Orientierung ihrer Hauptachse PhiPhiPhiPhiPhiphi und die Länge der großen Radius1Radius1Radius1Radius1Radius1radius1 bzw. kleinen Halbachse Radius2Radius2Radius2Radius2Radius2radius2 beschrieben wird. Zur Bestimmung des Abstandes eines Konturpunktes zur Ellipse stehen dabei folgende Verfahren, selektierbar über ModeModeModeModeModemode 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 Radius2Radius2Radius2Radius2Radius2radius2 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 Radius1Radius1Radius1Radius1Radius1radius1 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 MinDistMinDistMinDistMinDistMinDistminDist und maximale Abstand MaxDistMaxDistMaxDistMaxDistMaxDistmaxDist, der mittlere Abstand AvgDistAvgDistAvgDistAvgDistAvgDistavgDist und die Standardabweichung des Abstandes SigmaDistSigmaDistSigmaDistSigmaDistSigmaDistsigmaDist.

Zur Reduktion des Aufwands 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 nicht exakt bekannt sein können, besteht die Möglichkeit, ClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsclippingEndPoints Punkte am Anfang und Ende der Kontur von der Abstandsberechnung auszuschließen.

Parallelisierung

Parameter

ContoursContoursContoursContoursContourscontours (input_object)  xld_cont(-array) objectHXLDContHXLDContHXLDContHXLDContXHobject

Eingabekonturen.

ModeModeModeModeModemode (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Methode zur Abstandsbestimmung.

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

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

MaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsMaxNumPointsmaxNumPoints (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

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

Defaultwert: -1

Restriktion: MaxNumPoints >= 3

ClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsClippingEndPointsclippingEndPoints (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

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

Defaultwert: 0

Restriktion: ClippingEndPoints >= 0

RowRowRowRowRowrow (input_control)  ellipse.center.y HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Zeilenkoordinate des Mittelpunktes der Ellipse.

ColumnColumnColumnColumnColumncolumn (input_control)  ellipse.center.x HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Spaltenkoordinate des Mittelpunktes der Ellipse.

PhiPhiPhiPhiPhiphi (input_control)  ellipse.angle.rad HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Orientierung der Hauptachse im Bogenmaß.

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

Radius1Radius1Radius1Radius1Radius1radius1 (input_control)  ellipse.radius1 HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Länge der großen Halbachse.

Restriktion: Radius1 > 0

Radius2Radius2Radius2Radius2Radius2radius2 (input_control)  ellipse.radius2 HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Länge der kleinen Halbachse.

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

MinDistMinDistMinDistMinDistMinDistminDist (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Minimaler Abstand.

MaxDistMaxDistMaxDistMaxDistMaxDistmaxDist (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Maximaler Abstand.

AvgDistAvgDistAvgDistAvgDistAvgDistavgDist (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Mittlerer Abstand.

SigmaDistSigmaDistSigmaDistSigmaDistSigmaDistsigmaDist (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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 (C++ (HALCON 5.0-10.0))

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; i<Row.Num(); i++)
{
  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);
}

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_xldDistEllipseContourXlddist_ellipse_contour_xldDistEllipseContourXldDistEllipseContourXld den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

fit_ellipse_contour_xldfit_ellipse_contour_xldFitEllipseContourXldfit_ellipse_contour_xldFitEllipseContourXldFitEllipseContourXld

Alternativen

dist_ellipse_contour_points_xlddist_ellipse_contour_points_xldDistEllipseContourPointsXlddist_ellipse_contour_points_xldDistEllipseContourPointsXldDistEllipseContourPointsXld

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren