project_object_model_3dT_project_object_model_3dProjectObjectModel3dProjectObjectModel3dproject_object_model_3d — Projizieren eines 3D-Objektmodells in Bildkoordinaten.
Der Operator project_object_model_3dproject_object_model_3dProjectObjectModel3dProjectObjectModel3dProjectObjectModel3dproject_object_model_3d projiziert ein
3D-Objektmodell in das Bildkoordinatensystem und liefert die
projizierten Konturen in ModelContoursModelContoursModelContoursModelContoursmodelContoursmodel_contours 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 PosePosePosePoseposepose in
Kamerakoordinaten (ccs) transformiert und dann basierend auf den
internen Kameraparametern CamParamCamParamCamParamCamParamcamParamcam_param 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 PosePosePosePoseposepose beschreibt die Position und Lage des
Weltkoordinatensystems im Kamerakoordinatensystem.
Die internen Kameraparameter CamParamCamParamCamParamCamParamcamParamcam_param 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""data"'faces'"faces""faces""faces""faces""faces" gewählt wird, werden die
Flächen des 3D-Objektmodells projiziert. Die Flächen werden dabei
in ModelContoursModelContoursModelContoursModelContoursmodelContoursmodel_contours durch ihre Randlinien repräsentiert.
Wird für 'data'"data""data""data""data""data"'lines'"lines""lines""lines""lines""lines" gewählt, werden die
3D-Linien des 3D-Objektmodells projiziert.
Wenn für 'data'"data""data""data""data""data"'points'"points""points""points""points""points" gewählt wird, werden die
Punkte des 3D-Objektmodells projiziert. Die projizierten Punkte
können auf unterschiedliche Arten in ModelContoursModelContoursModelContoursModelContoursmodelContoursmodel_contours
repräsentiert werden. Die Art der Punktrepräsentation kann mit dem
generischen Parameter 'point_shape'"point_shape""point_shape""point_shape""point_shape""point_shape" gewählt werden
(siehe unten). Wird für 'data'"data""data""data""data""data" der Wert 'auto'"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 ModelContoursModelContoursModelContoursModelContoursmodelContoursmodel_contours
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""point_shape" auf
'circle'"circle""circle""circle""circle""circle" gesetzt, dann werden Punkte durch Kreise
repräsentiert, wird 'point_shape'"point_shape""point_shape""point_shape""point_shape""point_shape" auf
'cross'"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""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""point_orientation" festgelegt werden (siehe unten).
Mit diesem Parameter kann
die Größe der Punktrepräsentation in der Ausgabekontur
ModelContoursModelContoursModelContoursModelContoursmodelContoursmodel_contours 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""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""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""point_shape"
der Wert 'cross'"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""hidden_surface_removal" auf 'true'"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""hidden_surface_removal" auf 'false'"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""hidden_surface_removal" auf
'true'"true""true""true""true""true" gesetzt ist.
Ist die Systemvariable (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system)
'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""opengl_hidden_surface_removal_enable" auf 'true'"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""hidden_surface_removal" auf 'true'"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
(CamParamCamParamCamParamCamParamcamParamcam_param) 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""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""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.
Standardwert:0.52.
Achtung
Kameras mit hyperzentrischen Objektiven werden nicht unterstützt.
Falls CamParamCamParamCamParamCamParamcamParamcam_param Verzeichnungskoeffizienten ungleich null
enthält ist bei der Projektion großer Dreiecke oder Polygone
darauf zu achten, dass die Verzeichnung nur auf die Punkte des
Objektmodells angewandt werden. In der Projektion werden diese
wiederum mit geraden Linien verbunden. Für eine gute
Approximation der verzeichneten Linien sollte eine Triangulierung
mit ausreichend kleinen Dreiecken verwendet werden.
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_3dProjectObjectModel3dProjectObjectModel3dProjectObjectModel3dproject_object_model_3d liefert den Wert 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.