fit_circle_contour_xld
— Approximieren von bogenförmigen XLD-Konturen durch Kreise.
fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)
fit_circle_contour_xld
approximiert die XLD-Konturen
Contours
durch Kreise. Eine Segmentation der
Eingabekonturen erfolgt dabei nicht. Es muss also sichergestellt
sein, dass jede Kontur in Contours
genau einem Kreis
entspricht. Zurückgegeben wird der Mittelpunkt (Row
,
Column
) und der Radius Radius
.
Das gewünschte Approximationsverfahren wird über den Parameter
Algorithm
ausgewählt:
Minimiert wird der algebraische Abstand zwischen den Konturpunkten und dem gesuchten Kreis.
Wie 'algebraic'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Huber gedämpft werden (siehe unten).
Wie 'algebraic'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Tukey ignoriert werden (siehe unten).
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.
Wie 'geometric'. Es wird jedoch eine Gewichtung der Konturpunkte vorgenommen, bei der Ausreißer nach dem Ansatz von Huber gedämpft werden (siehe unten).
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
ClippingFactor
(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 Iterations
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
Iterations
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
MaxNumPoints
eine Zahl ungleich -1 übergeben, werden nur
maximal MaxNumPoints
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 StartPhi
und EndPhi
die korrespondierenden Winkel dieser Punkte bezogen auf die
Horizontale, vgl. gen_ellipse_contour_xld
. Konturen, deren
Anfangs- und Endpunkte weniger als MaxClosureDist
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, ClippingEndPoints
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.
Contours
(input_object) xld_cont(-array) →
object
Eingabekonturen.
Algorithm
(input_control) string →
(string)
Algorithmus zur Kreisanpassung.
Defaultwert: 'algebraic'
Werteliste: 'ahuber' , 'algebraic' , 'atukey' , 'geohuber' , 'geometric' , 'geotukey'
MaxNumPoints
(input_control) integer →
(integer)
Maximale Anzahl Konturpunkte zur Kreisanpassung (-1 für alle Punkte).
Defaultwert: -1
Restriktion: MaxNumPoints >= 3
MaxClosureDist
(input_control) real →
(real)
Maximaler Abstand zweier Konturendpunkte, so dass die Kontur noch als geschlossene Kontur akzeptiert wird.
Defaultwert: 0.0
Restriktion: MaxClosureDist >= 0.0
ClippingEndPoints
(input_control) integer →
(integer)
Anzahl der Konturpunkte am Anfang und Ende der Kontur, die für die Kreisanpassung ignoriert werden sollen.
Defaultwert: 0
Restriktion: ClippingEndPoints >= 0
Iterations
(input_control) integer →
(integer)
Maximale Anzahl von Iterationen bei der gewichteten Optimierung.
Defaultwert: 3
Restriktion: Iterations >= 0
ClippingFactor
(input_control) real →
(real)
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
Row
(output_control) circle.center.y(-array) →
(real)
Zeilenkoordinate des Mittelpunktes des Kreises.
Column
(output_control) circle.center.x(-array) →
(real)
Spaltenkoordinate des Mittelpunktes des Kreises.
Radius
(output_control) circle.radius(-array) →
(real)
Radius des Kreises.
StartPhi
(output_control) angle.rad(-array) →
(real)
Winkel des Startpunktes [rad].
EndPhi
(output_control) angle.rad(-array) →
(real)
Winkel des Endpunktes [rad].
PointOrder
(output_control) string(-array) →
(string)
Mathematischer Umlaufsinn.
Werteliste: 'negative' , 'positive'
Sind die Parameterwerte korrekt und konnte eine Kreisanpassung
durchgeführt werden, liefert fit_circle_contour_xld
den
Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder
vorhanden) lässt sich mittels
set_system('no_object_result',<Result>)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Wenn der Parameter ClippingFactor
so klein gewählt worden ist,
dass alle Punkte als Ausreißer klassifiziert werden, wird die Fehlermeldung
3264 zurückgeliefert.
gen_contours_skeleton_xld
,
lines_gauss
,
lines_facet
,
edges_sub_pix
,
smooth_contours_xld
gen_ellipse_contour_xld
,
disp_circle
,
get_points_ellipse
fit_ellipse_contour_xld
,
fit_line_contour_xld
,
fit_rectangle2_contour_xld
Foundation