| Operatoren |
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). 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.
Es ist zu beachten, dass wenn ein 3D-Objektmodell nicht mehr benötigt wird oder überschrieben werden soll, zuerst der Operator clear_object_model_3d aufgerufen werden muss, um den entsprechenden Speicher freizugeben.
Handle des 3D-Eingabeobjektmodells.
Name des generischen Parameters.
Parameteranzahl: GenParamName == GenParamValue
Werteliste: 'fitting_algorithm', 'max_radius', 'min_radius', 'output_point_coord', 'output_xyz_mapping', 'primitive_type'
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'
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
| Operatoren |