object_model_3d_to_xyz
— Transformieren eines 3D-Objektmodells in Bilder.
object_model_3d_to_xyz
transformiert die Punkte des 3D-Objektmodells
ObjectModel3D
in die drei Bilder X
, Y
und
Z
.
Es gibt drei mögliche Transformationsmethoden, die über den Parameter
Type
ausgewählt werden. Zu beachten ist, dass nur im Modus
'cartesian_faces' mehr als ein 3D-Objektmodell in
ObjectModel3D
übergeben werden kann. Alle anderen Modi
verlangen genau ein 3D-Objektmodell.
Die 3D-Punkte des Modells werden zunächst mit der übergebenen
Pose
transformiert. Anschließend werden sie mittels der
in CamParam
übergebenen Kameraparameter in ein Bild
projiziert.
Die internen Kameraparameter CamParam
beschreiben die
Art der Projektion (siehe Kalibrierung).
Die Pose
wird in der Form
erwartet. Dabei steht
ccs für das Kamerakoordinatensystem und
mcs für das Modellkoordinatensystem (ein 3D
Weltkoordinatensystem), siehe auch Transformationen / Posen und
„Solution Guide III-C - 3D Vision“
.
Folglich beschreibt die Pose die Position und Orientierung des
Modellkoordinatensystems zum Kamerakoordinatensystem.
Die X-, Y- und Z-Koordinaten der transformierten Punkte werden jeweils in das entsprechende Ausgabebild an die projizierte Stelle geschrieben. Werden mehrere Punkte auf die selbe Bildkoordinate projiziert, so wird nur der Punkt mit dem kleinsten Z-Wert in die Bilder geschrieben. Die Größe der Bilder wird durch die Kameraparameter festgelegt.
Die zurückgegebenen Bilder zeigen das Objekt so wie es von der Kamera unter der entsprechenden Pose gesehen werden würde.
Diese Transformationsmethode ist nur verwendbar, wenn die 3D-Objektmodelle
Flächen (Dreiecke oder Polygone) enthalten. Andernfalls wird das
3D-Objektmodell ohne Flächen unberücksichtigt.
Wenn eines der 3D-Objektmodelle Polygone enthält, werden diese intern zunächst
in Dreiecke umgewandelt. Diese Umwandlung kann schon vorher durchgeführt
werden, um diesen Operator zu beschleunigen.
Dafür kann read_object_model_3d
mit
GenParamName
'convert_to_triangles' auf
'true' gesetzt verwendet werden, um alle Polygone in Dreiecke
zu konvertieren.
Alternativ kann triangulate_object_model_3d
zur Erstellung
der Oberflächendreiecke aufgerufen werden.
Die Flächen der Modelle werden zunächst mit der übergebenen
Pose
transformiert. Anschließend werden sie mittels der
in CamParam
übergebenen Kameraparameter in ein Bild
projiziert, wobei die 3D-Information (X-, Y- und Z-Koordinaten) in
den Pixeln weiterhin enthalten bleibt. Mehr Details zu
CamParam
und Pose
finden sich auch im
Abschnitt 'cartesian' .
Werden mehrere Flächen auf dieselbe Bildkoordinate projiziert, so wird
nur der Wert mit dem kleinsten Z-Wert in die Bilder geschrieben.
Die Größe der Bilder wird durch die Kameraparameter festgelegt.
Die zurückgegebenen Bilder zeigen die Objekte so, wie sie von der Kamera unter der entsprechenden Pose gesehen werden würden.
Sind OpenGL 2.1, GLSL 1.2 und die OpenGL Extensions GL_EXT_framebuffer_object und GL_EXT_framebuffer_blit verfügbar, ist die Verarbeitungsgeschwindigkeit höher.
Dieser Type
kann zur Erzeugung von Modellen mit 2D-Mapping
verwendet werden, indem mit xyz_to_object_model_3d
wieder
ein Modell aus den zurückgegebenen Bildern erstellt wird.
Die Verwendung eines 2D-Mappings ist oft vorteilhaft auf Grund
besserer Robustheit und höherer Verarbeitungsgeschwindigkeit, z. B.
für die Operatoren sample_object_model_3d
und
surface_normals_object_model_3d
,
sowie in der Vorbearbeitung eines 3D-Objektmodells für das
oberflächenbasierte 3D-Matching (Glättung, Entfernung der Ausreißer, und
Reduzieren der Domäne).
Diese Transformationsmethode ist nur möglich, wenn das 3D-Objektmodell
mit dem Operator xyz_to_object_model_3d
erstellt wurde.
Hier werden die 3D-Punkte an die Stelle der Bilder geschrieben von
der sie ursprünglich kamen. Dabei wird die in
xyz_to_object_model_3d
erstellte Abbildung der Punkte in
Bildkoordinaten verwendet.
Die Parameter CamParam
und Pose
werden ignoriert.
Die Größe der Bilder ist gleich der Bildgröße der ursprünglich an
xyz_to_object_model_3d
übergebenen Bilder und kann über
get_object_model_3d_params
mit 'mapping_size'
abgefragt werden.
Diese Transformationsmethode ist schneller als 'cartesian' .
Sie ist z.B. nützlich um das Ergebnis einer mit
segment_object_model_3d
durchgeführten Segmentierung
anzuzeigen.
Kameras mit hyperzentrischen Objektiven werden nicht unterstützt.
X
(output_object) singlechannelimage →
object (real)
Bild mit den X-Koordinaten der 3D-Punkte.
Y
(output_object) singlechannelimage →
object (real)
Bild mit den Y-Koordinaten der 3D-Punkte.
Z
(output_object) singlechannelimage →
object (real)
Bild mit den Z-Koordinaten der 3D-Punkte.
ObjectModel3D
(input_control) object_model_3d(-array) →
(handle)
Handle des zu transformierenden 3D-Objektmodells.
Type
(input_control) string →
(string)
Transformationsmethode.
Defaultwert: 'cartesian'
Werteliste: 'cartesian' , 'cartesian_faces' , 'from_xyz_map'
CamParam
(input_control) campar →
(real / integer / string)
Kameraparameter.
Pose
(input_control) pose →
(real / integer)
Pose des 3D-Objektmodells.
Parameteranzahl: Pose == 0 || Pose == 7 || Pose == 12
object_model_3d_to_xyz
liefert den Wert 2 (H_MSG_TRUE) wenn alle
Parameter korrekt sind.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
read_object_model_3d
,
xyz_to_object_model_3d
,
triangulate_object_model_3d
xyz_to_object_model_3d
,
get_object_model_3d_params
3D Metrology