fit_primitives_object_model_3d
— Anpassen von 3D Primitiven an 3D Punkte.
fit_primitives_object_model_3d( : : ObjectModel3D, GenParamName, GenParamValue : ObjectModel3DOut)
Der Operator fit_primitives_object_model_3d
passt ein
3D Primitiv an eine Menge von 3D Punkten an. Die 3D Punkte
sind durch ein 3D-Objektmodellhandle ObjectModel3D
gegeben. Die 3D Formen, die als 3D Primitive zur Verfügung stehen,
umfassen eine Ebene, eine Kugel und einen Zylinder. Eine Segmentierung
der Eingabepunkte erfolgt nicht, d.h., es muss sichergestellt
sein, dass die 3D Punktmenge bereits einem 3D Primitiv entspricht.
Eine Segmentierung kann z.B. mit dem Operator
segment_object_model_3d
durchgeführt werden.
Das Ergebnis von fit_primitives_object_model_3d
ist
ein Handle ObjectModel3DOut
für das 3D-Objektmodell,
welches u.a. die Parameter des angepassten Primitivs enthält. Die
Information, die im 3D-Objektmodell gespeichert ist, kann mit dem
Operator get_object_model_3d_params
abgerufen werden. Für
Primitive vom Typ Ebene und Zylinder wird auch deren Ausdehnung
bestimmt. Auch diese Werte können mit
get_object_model_3d_params
ermittelt werden.
Die Parameter des Zylinder sind die (x-, y-, z-) Koordinaten des
Mittelpunktes, die normierten (x-, y-, z-) Richtungen der Hauptachse
des Zylinders und der Zylinderradius. Der Mittelpunkt liegt nicht
notwendigerweise im Schwerpunkt des Zylinders (siehe hierzu auch die
Erläuterung der Parameter MinExtent und MaxExtent des Operators
gen_cylinder_object_model_3d
). Das Vorzeichen der Hauptachse ist
so gewählt, dass die Hauptachse in den Halbraum zeigt, der den
Ursprung beinhaltet. Die Parameter der
Kugel sind die (x-, y-, z-) Koordinaten des Mittelpunktes und der
Kugelradius. Die Parameter der Ebene sind die 4 Parameter der
Hesseschen Normalform, d.h. der (x-, y-, z-) Einheitsnormalenvektor und der
orthogonale Abstand der Ebene vom Ursprung des Koordinatensystems.
Das Vorzeichen in der Hesseschen Normalform ist so gewählt, dass der
Normalenvektor in den Halbraum zeigt, der den Ursprung beinhaltet, und
der Abstand nicht positiv ist.
Kann kein 3D Primitiv an die 3D Punktmenge angepasst werden, enthält
das zurückgegebene 3D-Objektmodell kein Primitiv. Abhängig von den
gewählten Parameterwerten für 'output_point_coord' und
'output_xyz_mapping' (siehe unten) ist das
zurückgelieferte Objektmodell entweder leer oder enthält die 3D Punkte
oder enthält die 3D Punkte zusammen mit der Zuordnung der 3D Punkte zu
Bildkoordinaten des Eingabe-Objektmodells ObjectModel3D
.
Um das Fitting zu steuern, können in GenParamName
und
GenParamValue
generische Parameter angepasst werden.
In den meisten Fällen reichen die Standardwerte aus, so dass
keine Anpassung nötig ist. Die folgenden generischen
Parameter und die dazugehörigen Werte sind verfügbar:
Der Parameter legt fest, welches 3D Primitiv an die 3D Punktmenge angepasst werden soll. Ein bestimmtes 3D Primitiv wird ausgewählt, indem 'primitive_type' auf 'cylinder' (Zylinder), 'sphere' (Kugel) oder 'plane' (Ebene) gesetzt wird. Soll aus mehreren 3D Primitiven das am besten passende 3D Primitiv, d.h., das 3D Primitiv mit dem kleinsten quadratischen Restfehler, gewählt werden, können die gewählten Primitivtypen gemeinsam in einem Tupel gesetzt werden. Soll aus allen 3D Primitiven das am besten passende 3D Primitiv gewählt werden, kann 'primitive_type' auf 'all' gesetzt werden.
Werteliste: 'cylinder' , 'sphere' , 'plane' , 'all'
Defaultwert: 'cylinder'
Der Parameter legt den benutzten Algorithmus für das Fitting fest. Ist 'fitting_algorithm' auf 'least_squares' gesetzt, werden die quadratischen Distanzen zwischen den Punkten und dem resultierenden Primitiv minimiert. Ist 'fitting_algorithm' auf 'least_squares_huber' gesetzt, ist der Ansatz ähnlich zu dem mit 'least_squares' nur dass zusätzlich eine Gewichtung der Punkte vorgenommen wird, bei der Ausreißer nach dem Ansatz von Huber gedämpft werden (siehe unten). Ist 'fitting_algorithm' auf 'least_squares_tukey' gesetzt, ist der Ansatz ähnlich zu dem mit 'least_squares' nur dass zusätzlich eine Gewichtung der Punkte vorgenommen wird und Ausreißer nach dem Ansatz von Tukey ignoriert werden (siehe unten).
Für 'least_squares_huber' und 'least_squares_tukey' wird eine robuste Fehlerstatistik verwendet, um die Standardabweichung der Abstände der Objektpunkte (ohne Ausreißer) von dem approximierenden 3D Primitiv zu ermitteln. Ausreißer werden nach dem Ansatz von Tukey komplett eliminiert, während bei dem Verfahren nach Huber diese noch gering, d.h. linear, gewichtet werden. In der Praxis ist der Ansatz nach Tukey zu empfehlen.
Werteliste: 'least_squares' , 'least_squares_huber' , 'least_squares_tukey'
Defaultwert: 'least_squares'
Der Parameter legt den minimalen Radius des Zylinders oder der Kugel in Metern fest. Falls ein Zylinder oder eine Kugel mit einem kleineren Radius angepasst wird, wird ein leeres 3D-Objektmodell zurückgegeben. Falls eine Ebene angepasst wird, wird dieser Parameter ignoriert.
Wertevorschläge: 0.01, 0.02, 0.1
Defaultwert: 0.01
Der Parameter legt den maximalen Radius des Zylinders oder der Kugel in Metern fest. Falls ein Zylinder oder eine Kugel mit einem größeren Radius angepasst wird, wird ein leeres 3D-Objektmodell zurückgegeben. Falls eine Ebene angepasst wird, wird dieser Parameter ignoriert.
Wertevorschläge: 0.02, 0.04, 0.2
Defaultwert: 0.2
Der Parameter legt fest, ob die für das Fitting genutzten 3D Punkte in das 3D-Ausgabeobjektmodell kopiert werden sollen. Wird 'copy_point_coord' auf 'true' gesetzt, werden die 3D Punkte kopiert. Wird 'copy_point_coord' auf 'false' gesetzt, werden keine 3D Punkte kopiert.
Werteliste: 'true' , 'false'
Defaultwert: 'true'
Der Parameter legt fest, ob
eine eventuell vorhandene Zuordnung der 3D Punkte zu
Bildkoordinaten in das 3D-Ausgabeobjektmodell kopiert werden soll.
Diese Information ist sinnvoll, wenn danach z.B. der Operator
object_model_3d_to_xyz
verwendet werden soll (z.B. für die
Visualisierung). Ist 'output_xyz_mapping' auf
'true' gesetzt, wird die Zuordnung der 3D Punkte zu den
Bildkoordinaten kopiert.
Es ist zu beachten, dass der Parameter nur dann gültig ist, wenn
eine Zuordnung der 3D Punkte zu den Bildkoordinaten im
3D-Eingabeobjektmodell enthalten ist. Wenn das
3D-Eingabeobjektmodell von einem anderen 3D-Objektmodell, welches
die Zuordnung der 3D Punkte zu den Bildkoordinaten enthält, durch
Kopieren mit copy_object_model_3d
abgeleitet wird, ist
bereits beim Kopieren mit copy_object_model_3d
darauf zu
achten, dass die Zuordnung ebenfalls kopiert wird. Weiterhin ist der
Parameter nur gültig, wenn auch die 3D Punkte in das
3D-Ausgabeobjektmodell kopiert werden, d.h., wenn
'output_point_coord' auf 'true' gesetzt ist.
Ist 'output_xyz_mapping' auf 'false' gesetzt,
wird die Zuordnung der 3D Punkte zu den Bildkoordinaten nicht kopiert.
Werteliste: 'true' , 'false'
Defaultwert: 'false'
Die notwendige minimale Anzahl an 3D Punkten zum Anpassen einer Ebene ist drei. Die notwendige minimale Anzahl an 3D Punkten zum Anpassen einer Kugel ist vier. Die notwendige minimale Anzahl an 3D Punkten zum Anpassen eines Zylinders ist fünf.
ObjectModel3D
(input_control) object_model_3d(-array) →
(handle)
Handle des 3D-Eingabeobjektmodells.
GenParamName
(input_control) attribute.name-array →
(string)
Name des generischen Parameters.
Parameteranzahl: GenParamName == GenParamValue
Werteliste: 'fitting_algorithm' , 'max_radius' , 'min_radius' , 'output_point_coord' , 'output_xyz_mapping' , 'primitive_type'
GenParamValue
(input_control) attribute.name-array →
(string / real / integer)
Wert des generischen Parameters.
Parameteranzahl: GenParamValue == GenParamName
Wertevorschläge: 'cylinder' , 'sphere' , 'plane' , 'all' , 'least_squares' , 'least_squares_huber' , 'least_squares_tukey' , 0.01, 0.05, 0.1, 0.2, 'true' , 'false'
ObjectModel3DOut
(output_control) object_model_3d(-array) →
(handle)
Handle des 3D-Ausgabeobjektmodells.
fit_primitives_object_model_3d
liefert den Wert 2 (H_MSG_TRUE), falls die
Parameter korrekt sind. Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
xyz_to_object_model_3d
,
read_object_model_3d
get_object_model_3d_params
,
object_model_3d_to_xyz
,
write_object_model_3d
,
clear_object_model_3d
3D Metrology