fit_primitives_object_model_3dT_fit_primitives_object_model_3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3d (Operator)

Name

fit_primitives_object_model_3dT_fit_primitives_object_model_3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3d — Anpassen von 3D Primitiven an 3D Punkte.

Signatur

fit_primitives_object_model_3d( : : ObjectModel3D, GenParamName, GenParamValue : ObjectModel3DOut)

Herror T_fit_primitives_object_model_3d(const Htuple ObjectModel3D, const Htuple GenParamName, const Htuple GenParamValue, Htuple* ObjectModel3DOut)

void FitPrimitivesObjectModel3d(const HTuple& ObjectModel3D, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ObjectModel3DOut)

static HObjectModel3DArray HObjectModel3D::FitPrimitivesObjectModel3d(const HObjectModel3DArray& ObjectModel3D, const HTuple& GenParamName, const HTuple& GenParamValue)

HObjectModel3D HObjectModel3D::FitPrimitivesObjectModel3d(const HTuple& GenParamName, const HTuple& GenParamValue) const

static void HOperatorSet.FitPrimitivesObjectModel3d(HTuple objectModel3D, HTuple genParamName, HTuple genParamValue, out HTuple objectModel3DOut)

static HObjectModel3D[] HObjectModel3D.FitPrimitivesObjectModel3d(HObjectModel3D[] objectModel3D, HTuple genParamName, HTuple genParamValue)

HObjectModel3D HObjectModel3D.FitPrimitivesObjectModel3d(HTuple genParamName, HTuple genParamValue)

Beschreibung

Der Operator fit_primitives_object_model_3dfit_primitives_object_model_3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3d passt ein 3D Primitiv an eine Menge von 3D Punkten an. Die 3D Punkte sind durch ein 3D-Objektmodellhandle ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D 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_3dsegment_object_model_3dSegmentObjectModel3dSegmentObjectModel3dSegmentObjectModel3d durchgeführt werden.

Das Ergebnis von fit_primitives_object_model_3dfit_primitives_object_model_3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3d ist ein Handle ObjectModel3DOutObjectModel3DOutObjectModel3DOutObjectModel3DOutobjectModel3DOut 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_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParams 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_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParams 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_3dgen_cylinder_object_model_3dGenCylinderObjectModel3dGenCylinderObjectModel3dGenCylinderObjectModel3d). 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'"output_point_coord""output_point_coord""output_point_coord""output_point_coord" und 'output_xyz_mapping'"output_xyz_mapping""output_xyz_mapping""output_xyz_mapping""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 ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D.

Um das Fitting zu steuern, können in GenParamNameGenParamNameGenParamNameGenParamNamegenParamName und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue 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:

'primitive_type'"primitive_type""primitive_type""primitive_type""primitive_type":

Der Parameter legt fest, welches 3D Primitiv an die 3D Punktmenge angepasst werden soll. Ein bestimmtes 3D Primitiv wird ausgewählt, indem 'primitive_type'"primitive_type""primitive_type""primitive_type""primitive_type" auf 'cylinder'"cylinder""cylinder""cylinder""cylinder" (Zylinder), 'sphere'"sphere""sphere""sphere""sphere" (Kugel) oder 'plane'"plane""plane""plane""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'"primitive_type""primitive_type""primitive_type""primitive_type" auf 'all'"all""all""all""all" gesetzt werden.

Werteliste: 'cylinder'"cylinder""cylinder""cylinder""cylinder", 'sphere'"sphere""sphere""sphere""sphere", 'plane'"plane""plane""plane""plane", 'all'"all""all""all""all"

Defaultwert: 'cylinder'"cylinder""cylinder""cylinder""cylinder"

'fitting_algorithm'"fitting_algorithm""fitting_algorithm""fitting_algorithm""fitting_algorithm":

Der Parameter legt den benutzten Algorithmus für das Fitting fest. Ist 'fitting_algorithm'"fitting_algorithm""fitting_algorithm""fitting_algorithm""fitting_algorithm" auf 'least_squares'"least_squares""least_squares""least_squares""least_squares" gesetzt, werden die quadratischen Distanzen zwischen den Punkten und dem resultierenden Primitiv minimiert. Ist 'fitting_algorithm'"fitting_algorithm""fitting_algorithm""fitting_algorithm""fitting_algorithm" auf 'least_squares_huber'"least_squares_huber""least_squares_huber""least_squares_huber""least_squares_huber" gesetzt, ist der Ansatz ähnlich zu dem mit 'least_squares'"least_squares""least_squares""least_squares""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'"fitting_algorithm""fitting_algorithm""fitting_algorithm""fitting_algorithm" auf 'least_squares_tukey'"least_squares_tukey""least_squares_tukey""least_squares_tukey""least_squares_tukey" gesetzt, ist der Ansatz ähnlich zu dem mit 'least_squares'"least_squares""least_squares""least_squares""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'"least_squares_huber""least_squares_huber""least_squares_huber""least_squares_huber" und 'least_squares_tukey'"least_squares_tukey""least_squares_tukey""least_squares_tukey""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""least_squares""least_squares""least_squares", 'least_squares_huber'"least_squares_huber""least_squares_huber""least_squares_huber""least_squares_huber", 'least_squares_tukey'"least_squares_tukey""least_squares_tukey""least_squares_tukey""least_squares_tukey"

Defaultwert: 'least_squares'"least_squares""least_squares""least_squares""least_squares"

'min_radius'"min_radius""min_radius""min_radius""min_radius":

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

'max_radius'"max_radius""max_radius""max_radius""max_radius":

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

'output_point_coord'"output_point_coord""output_point_coord""output_point_coord""output_point_coord":

Der Parameter legt fest, ob die für das Fitting genutzten 3D Punkte in das 3D-Ausgabeobjektmodell kopiert werden sollen. Wird 'copy_point_coord'"copy_point_coord""copy_point_coord""copy_point_coord""copy_point_coord" auf 'true'"true""true""true""true" gesetzt, werden die 3D Punkte kopiert. Wird 'copy_point_coord'"copy_point_coord""copy_point_coord""copy_point_coord""copy_point_coord" auf 'false'"false""false""false""false" gesetzt, werden keine 3D Punkte kopiert.

Werteliste: 'true'"true""true""true""true", 'false'"false""false""false""false"

Defaultwert: 'true'"true""true""true""true"

'output_xyz_mapping'"output_xyz_mapping""output_xyz_mapping""output_xyz_mapping""output_xyz_mapping":

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_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyz verwendet werden soll (z.B. für die Visualisierung). Ist 'output_xyz_mapping'"output_xyz_mapping""output_xyz_mapping""output_xyz_mapping""output_xyz_mapping" auf 'true'"true""true""true""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_3dcopy_object_model_3dCopyObjectModel3dCopyObjectModel3dCopyObjectModel3d abgeleitet wird, ist bereits beim Kopieren mit copy_object_model_3dcopy_object_model_3dCopyObjectModel3dCopyObjectModel3dCopyObjectModel3d 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'"output_point_coord""output_point_coord""output_point_coord""output_point_coord" auf 'true'"true""true""true""true" gesetzt ist. Ist 'output_xyz_mapping'"output_xyz_mapping""output_xyz_mapping""output_xyz_mapping""output_xyz_mapping" auf 'false'"false""false""false""false" gesetzt, wird die Zuordnung der 3D Punkte zu den Bildkoordinaten nicht kopiert.

Werteliste: 'true'"true""true""true""true", 'false'"false""false""false""false"

Defaultwert: 'false'"false""false""false""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.

Ausführungsinformationen

Parameter

ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D (input_control)  object_model_3d(-array) HObjectModel3D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des 3D-Eingabeobjektmodells.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  attribute.name-array HTupleHTupleHtuple (string) (string) (HString) (char*)

Name des generischen Parameters.

Parameteranzahl: GenParamName == GenParamValue

Werteliste: 'fitting_algorithm'"fitting_algorithm""fitting_algorithm""fitting_algorithm""fitting_algorithm", 'max_radius'"max_radius""max_radius""max_radius""max_radius", 'min_radius'"min_radius""min_radius""min_radius""min_radius", 'output_point_coord'"output_point_coord""output_point_coord""output_point_coord""output_point_coord", 'output_xyz_mapping'"output_xyz_mapping""output_xyz_mapping""output_xyz_mapping""output_xyz_mapping", 'primitive_type'"primitive_type""primitive_type""primitive_type""primitive_type"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  attribute.name-array HTupleHTupleHtuple (string / real / integer) (string / double / int / long) (HString / double / Hlong) (char* / double / Hlong)

Wert des generischen Parameters.

Parameteranzahl: GenParamValue == GenParamName

Wertevorschläge: 'cylinder'"cylinder""cylinder""cylinder""cylinder", 'sphere'"sphere""sphere""sphere""sphere", 'plane'"plane""plane""plane""plane", 'all'"all""all""all""all", 'least_squares'"least_squares""least_squares""least_squares""least_squares", 'least_squares_huber'"least_squares_huber""least_squares_huber""least_squares_huber""least_squares_huber", 'least_squares_tukey'"least_squares_tukey""least_squares_tukey""least_squares_tukey""least_squares_tukey", 0.01, 0.05, 0.1, 0.2, 'true'"true""true""true""true", 'false'"false""false""false""false"

ObjectModel3DOutObjectModel3DOutObjectModel3DOutObjectModel3DOutobjectModel3DOut (output_control)  object_model_3d(-array) HObjectModel3D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des 3D-Ausgabeobjektmodells.

Ergebnis

fit_primitives_object_model_3dfit_primitives_object_model_3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3dFitPrimitivesObjectModel3d liefert den Wert 2 (H_MSG_TRUE), falls die Parameter korrekt sind. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3d, read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3d

Nachfolger

get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParams, object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyz, write_object_model_3dwrite_object_model_3dWriteObjectModel3dWriteObjectModel3dWriteObjectModel3d, clear_object_model_3dclear_object_model_3dClearObjectModel3dClearObjectModel3dClearObjectModel3d

Alternativen

segment_object_model_3dsegment_object_model_3dSegmentObjectModel3dSegmentObjectModel3dSegmentObjectModel3d

Modul

3D Metrology