Der Operator project_object_model_3dproject_object_model_3dProjectObjectModel3dProjectObjectModel3dProjectObjectModel3d projiziert ein
3D-Objektmodell in das Bildkoordinatensystem und liefert die
projizierten Konturen in ModelContoursModelContoursModelContoursModelContoursmodelContours zurück. Dieser
Operator ist vor allem für die Visualisierung von 3D-Objektmodellen
hilfreich. Primitive werden nicht projiziert, sondern bei der
Visualisierung ignoriert.
Die Koordinaten des 3D-Objektmodells sind im Modellkoordinatensystem gegeben
(mcs), einem 3D-Weltkoordinatensystem.
Sie werden zuerst mittels der gegebenen PosePosePosePosepose in
Kamerakoordinaten (ccs) transformiert und dann basierend auf den
internen Kameraparametern CamParamCamParamCamParamCamParamcamParam in das Bildkoordinatensystem
projiziert.
Dabei wird die Pose in der Form
erwartet, siehe auch Transformationen / Posen und
„Solution Guide III-C - 3D Vision“.
Das heißt, die PosePosePosePosepose beschreibt die Position und Lage des
Weltkoordinatensystems im Kamerakoordinatensystem.
Die internen Kameraparameter CamParamCamParamCamParamCamParamcamParam beschreiben dabei die
Abbildungseigenschaften der Kamera (siehe Kalibrierung).
Dieser Parameter gibt an, welche
geometrischen
Daten des 3D-Objektmodells projiziert werden sollen. Wenn für
'data'"data""data""data""data"'faces'"faces""faces""faces""faces" gewählt wird, werden die
Flächen des 3D-Objekmodells projiziert. Die Flächen werden dabei
in ModelContoursModelContoursModelContoursModelContoursmodelContours durch ihre Randlinien repräsentiert.
Wird für 'data'"data""data""data""data"'lines'"lines""lines""lines""lines" gewählt, werden die
3D-Linien des 3D-Objekmodells projiziert.
Wenn für 'data'"data""data""data""data"'points'"points""points""points""points" gewählt wird, werden die
Punkte des 3D-Objektmodells projiziert. Die projizierten Punkte
können auf unterschiedliche Arten in ModelContoursModelContoursModelContoursModelContoursmodelContours
repräsentiert werden. Die Art der Punktrepräsentation kann mit dem
generischen Parameter 'point_shape'"point_shape""point_shape""point_shape""point_shape" gewählt werden
(siehe unten). Wird für 'data'"data""data""data""data" der Wert 'auto'"auto""auto""auto""auto"
übergeben, wählt HALCON automatisch die für eine Visualisierung am
besten geeigneten Geometriedaten aus.
Mit diesem Parameter kann gewählt
werden, wie Punkte in der Ausgabekontur ModelContoursModelContoursModelContoursModelContoursmodelContours
repräsentiert werden. Daher wirkt sich dieser Parameter nur dann
aus, wenn Punkte als zu projizierende Geometriedaten
ausgewählt wurden (siehe oben). Wird 'point_shape'"point_shape""point_shape""point_shape""point_shape" auf
'circle'"circle""circle""circle""circle" gesetzt, dann werden Punkte durch Kreise
repräsentiert, wird 'point_shape'"point_shape""point_shape""point_shape""point_shape" auf
'cross'"cross""cross""cross""cross" gesetzt, dann werden Punkte durch Kreuze
repräsentiert. In beiden Fällen kann die Größe der Punkte
(d.h. die Größe der Kreise bzw. der Kreuze) mit dem generischen
Parameter 'point_size'"point_size""point_size""point_size""point_size" gewählt werden (siehe unten).
Die Orientierung der Kreuze kann mit dem generischen Parameter
'point_orientation'"point_orientation""point_orientation""point_orientation""point_orientation" festgelegt werden (siehe unten).
Mit diesem Parameter kann
die Größe der Punktrepräsentation in der Ausgabekontur
ModelContoursModelContoursModelContoursModelContoursmodelContours gewählt werden, d.h. die Größe der Kreise
bzw. der Kreuze, je nach Wahl von 'point_shape'"point_shape""point_shape""point_shape""point_shape".
Dieser Parameter wirkt sich natürlich nur dann
aus, wenn Punkte als zu projizierende Geometriedaten
ausgewählt wurden (siehe oben). Die Größe muss in Pixeleinheiten
angegeben werden. Wird für 'point_size'"point_size""point_size""point_size""point_size" der Wert
0 übergeben, dann wird jeder Punkt durch eine Kontur
repräsentiert, die nur einen Punkt enthält.
Dieser Parameter legt die
Orientierung der Kreuze im Bogenmaß fest. Der Parameter wirkt sich
natürlich nur dann aus, wenn Punkte als zu projizierende
Geometriedaten ausgewählt wurden und für 'point_shape'"point_shape""point_shape""point_shape""point_shape"
der Wert 'cross'"cross""cross""cross""cross" ausgewählt wurde (siehe oben).
Mit diesem Parameter kann
die Verdeckungsberechnung ein- bzw. ausgeschaltet werden. Wenn der
Parameter 'hidden_surface_removal'"hidden_surface_removal""hidden_surface_removal""hidden_surface_removal""hidden_surface_removal" auf 'true'"true""true""true""true" gesetzt
ist, werden nur die projizierten Kanten zurückgegeben, die nicht
durch Flächen des 3D-Objektmodells verdeckt sind. Ist
'hidden_surface_removal'"hidden_surface_removal""hidden_surface_removal""hidden_surface_removal""hidden_surface_removal" auf 'false'"false""false""false""false" gesetzt, werden
alle projizierten Kanten des 3D-Objektmodells zurückgegeben. Dieser
Modus ist schneller als wenn 'hidden_surface_removal'"hidden_surface_removal""hidden_surface_removal""hidden_surface_removal""hidden_surface_removal" auf
'true'"true""true""true""true" gesetzt ist.
Ist die Systemvariable (siehe set_systemset_systemSetSystemSetSystemSetSystem)
'opengl_hidden_surface_removal_enable'"opengl_hidden_surface_removal_enable""opengl_hidden_surface_removal_enable""opengl_hidden_surface_removal_enable""opengl_hidden_surface_removal_enable" auf 'true'"true""true""true""true"
gesetzt (Standard, sofern es verfügbar ist) und
'hidden_surface_removal'"hidden_surface_removal""hidden_surface_removal""hidden_surface_removal""hidden_surface_removal" auf 'true'"true""true""true""true" gesetzt, wird
die Modellprojektion auf der Grafikkarte durchgeführt.
Abhängig von der verwendeten Grafikkarte ist dies signifikant
schneller als die analytische Projektion.
Es ist zu beachten, dass die Ergebnisse der OpenGL Projektion
leicht verschieden zu denen der analytischen Projektion sind. Insbesondere
werden in diesem Modus nur die Kanten projiziert die im Bild der Kamera
(CamParamCamParamCamParamCamParamcamParam) sichtbar sind.
Mit diesem Parameter wird der
minimale Winkel angegeben, den zwei benachbarte Flächen
einschließen müssen, damit die Kante zwischen ihnen projiziert
wird. Wird 'min_face_angle'"min_face_angle""min_face_angle""min_face_angle""min_face_angle" auf 0.0 gesetzt,
werden alle Kanten projiziert. Wird 'min_face_angle'"min_face_angle""min_face_angle""min_face_angle""min_face_angle" auf
(entspricht 180 Grad) gesetzt, wird nur die Silhouette
des 3D-Objektmodells zurückgegeben. Dieser Parameter kann
insbesondere dafür verwendet werden, um Kanten in gekrümmten Flächen,
z.B. einer Zylinder- oder Kegeloberfläche, zu unterdrücken.
Wertevorschläge:0.17, 0.26,
0.35, 0.52
Defaultwert:0.52
Achtung
Kameras mit hyperzentrischen Objektiven werden nicht unterstützt.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
project_object_model_3dproject_object_model_3dProjectObjectModel3dProjectObjectModel3dProjectObjectModel3d liefert den Wert 2 (H_MSG_TRUE) wenn alle
Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung
durchgeführt. Wenn die gewählten zu projizierenden Geometriedaten
nicht im 3D-Objektmodell vorhanden sind, wird die
Fehlermeldung 9514 zurückgegeben.