dist_ellipse_contour_xld dist_ellipse_contour_xld DistEllipseContourXld DistEllipseContourXld (Operator)
Name
dist_ellipse_contour_xld dist_ellipse_contour_xld DistEllipseContourXld DistEllipseContourXld
— 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_xld dist_ellipse_contour_xld DistEllipseContourXld DistEllipseContourXld DistEllipseContourXld
berechnet den Abstand der
Konturen in Contours Contours Contours Contours contours
zu einer Ellipse, die durch ihren
Mittelpunkt (Row Row Row Row row
, Column Column Column Column column
), die Orientierung
ihrer Hauptachse Phi Phi Phi Phi phi
und die Länge der großen
Radius1 Radius1 Radius1 Radius1 radius1
bzw. kleinen Halbachse Radius2 Radius2 Radius2 Radius2 radius2
beschrieben wird. Zur Bestimmung des Abstandes eines Konturpunktes
zur Ellipse stehen dabei folgende
Verfahren, selektierbar über Mode Mode Mode Mode mode
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
Radius2 Radius2 Radius2 Radius2 radius2
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 Radius1 Radius1 Radius1 Radius1 radius1
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
MinDist MinDist MinDist MinDist minDist
und maximale Abstand MaxDist MaxDist MaxDist MaxDist maxDist
,
der mittlere Abstand AvgDist AvgDist AvgDist AvgDist avgDist
und die Standardabweichung
des Abstandes SigmaDist SigmaDist SigmaDist SigmaDist sigmaDist
.
Zur Reduktion des Aufwands lässt sich die Berechnung auf eine Teilmenge
der Konturpunkte einschränken: Wird für MaxNumPoints MaxNumPoints MaxNumPoints MaxNumPoints maxNumPoints
eine
Zahl ungleich -1 übergeben, werden nur maximal MaxNumPoints MaxNumPoints MaxNumPoints MaxNumPoints maxNumPoints
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,
ClippingEndPoints ClippingEndPoints ClippingEndPoints ClippingEndPoints clippingEndPoints
Punkte am Anfang und Ende der Kontur von
der Abstandsberechnung auszuschließen.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Wird ohne Parallelisierung verarbeitet.
Parameter
Contours Contours Contours Contours contours
(input_object) xld_cont(-array) →
object HXLDCont HXLDCont Hobject
Eingabekonturen.
Mode Mode Mode Mode mode
(input_control) string →
HTuple HTuple Htuple (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"
MaxNumPoints MaxNumPoints MaxNumPoints MaxNumPoints maxNumPoints
(input_control) integer →
HTuple HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Maximale Anzahl Konturpunkte für Berechnung (-1 für
alle Punkte).
Defaultwert: -1
Restriktion: MaxNumPoints >= 3
ClippingEndPoints ClippingEndPoints ClippingEndPoints ClippingEndPoints clippingEndPoints
(input_control) integer →
HTuple HTuple Htuple (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
Row Row Row Row row
(input_control) ellipse.center.y →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Zeilenkoordinate des Mittelpunktes der Ellipse.
Column Column Column Column column
(input_control) ellipse.center.x →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Spaltenkoordinate des Mittelpunktes der Ellipse.
Phi Phi Phi Phi phi
(input_control) ellipse.angle.rad →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Orientierung der Hauptachse im Bogenmaß.
Restriktion: Phi >= 0 && Phi <= 6.283185307
Radius1 Radius1 Radius1 Radius1 radius1
(input_control) ellipse.radius1 →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Länge der großen Halbachse.
Restriktion: Radius1 > 0
Radius2 Radius2 Radius2 Radius2 radius2
(input_control) ellipse.radius2 →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Länge der kleinen Halbachse.
Restriktion: Radius2 >= 0 && Radius2 <= Radius1
MinDist MinDist MinDist MinDist minDist
(output_control) real(-array) →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Minimaler Abstand.
MaxDist MaxDist MaxDist MaxDist maxDist
(output_control) real(-array) →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Maximaler Abstand.
AvgDist AvgDist AvgDist AvgDist avgDist
(output_control) real(-array) →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Mittlerer Abstand.
SigmaDist SigmaDist SigmaDist SigmaDist sigmaDist
(output_control) real(-array) →
HTuple HTuple Htuple (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_xld dist_ellipse_contour_xld DistEllipseContourXld DistEllipseContourXld DistEllipseContourXld
den Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
fit_ellipse_contour_xld fit_ellipse_contour_xld FitEllipseContourXld FitEllipseContourXld FitEllipseContourXld
Alternativen
dist_ellipse_contour_points_xld dist_ellipse_contour_points_xld DistEllipseContourPointsXld DistEllipseContourPointsXld DistEllipseContourPointsXld
Modul
Foundation