object_model_3d_to_xyzT_object_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz (Operator)

Name

object_model_3d_to_xyzT_object_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz — Transformieren eines 3D-Objektmodells in Bilder.

Signatur

object_model_3d_to_xyz( : X, Y, Z : ObjectModel3D, Type, CamParam, Pose : )

Herror T_object_model_3d_to_xyz(Hobject* X, Hobject* Y, Hobject* Z, const Htuple ObjectModel3D, const Htuple Type, const Htuple CamParam, const Htuple Pose)

void ObjectModel3dToXyz(HObject* X, HObject* Y, HObject* Z, const HTuple& ObjectModel3D, const HTuple& Type, const HTuple& CamParam, const HTuple& Pose)

static HImage HObjectModel3D::ObjectModel3dToXyz(HImage* Y, HImage* Z, const HObjectModel3DArray& ObjectModel3D, const HString& Type, const HCamPar& CamParam, const HPose& Pose)

HImage HObjectModel3D::ObjectModel3dToXyz(HImage* Y, HImage* Z, const HString& Type, const HCamPar& CamParam, const HPose& Pose) const

HImage HObjectModel3D::ObjectModel3dToXyz(HImage* Y, HImage* Z, const char* Type, const HCamPar& CamParam, const HPose& Pose) const

HImage HObjectModel3D::ObjectModel3dToXyz(HImage* Y, HImage* Z, const wchar_t* Type, const HCamPar& CamParam, const HPose& Pose) const   (Nur Windows)

HImage HCamPar::ObjectModel3dToXyz(HImage* Y, HImage* Z, const HObjectModel3DArray& ObjectModel3D, const HString& Type, const HPose& Pose) const

HImage HCamPar::ObjectModel3dToXyz(HImage* Y, HImage* Z, const HObjectModel3D& ObjectModel3D, const HString& Type, const HPose& Pose) const

HImage HCamPar::ObjectModel3dToXyz(HImage* Y, HImage* Z, const HObjectModel3D& ObjectModel3D, const char* Type, const HPose& Pose) const

HImage HCamPar::ObjectModel3dToXyz(HImage* Y, HImage* Z, const HObjectModel3D& ObjectModel3D, const wchar_t* Type, const HPose& Pose) const   (Nur Windows)

static void HOperatorSet.ObjectModel3dToXyz(out HObject x, out HObject y, out HObject z, HTuple objectModel3D, HTuple type, HTuple camParam, HTuple pose)

static HImage HObjectModel3D.ObjectModel3dToXyz(out HImage y, out HImage z, HObjectModel3D[] objectModel3D, string type, HCamPar camParam, HPose pose)

HImage HObjectModel3D.ObjectModel3dToXyz(out HImage y, out HImage z, string type, HCamPar camParam, HPose pose)

HImage HCamPar.ObjectModel3dToXyz(out HImage y, out HImage z, HObjectModel3D[] objectModel3D, string type, HPose pose)

HImage HCamPar.ObjectModel3dToXyz(out HImage y, out HImage z, HObjectModel3D objectModel3D, string type, HPose pose)

def object_model_3d_to_xyz(object_model_3d: MaybeSequence[HHandle], type: str, cam_param: Sequence[Union[float, int, str]], pose: Sequence[Union[int, float]]) -> Tuple[HObject, HObject, HObject]

Beschreibung

object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz transformiert die Punkte des 3D-Objektmodells ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d in die drei Bilder XXXXxx, YYYYyy und ZZZZzz.

Es gibt drei mögliche Transformationsmethoden, die über den Parameter TypeTypeTypeTypetypetype ausgewählt werden. Zu beachten ist, dass nur im Modus 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces" mehr als ein 3D-Objektmodell in ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d übergeben werden kann. Alle anderen Modi verlangen genau ein 3D-Objektmodell.

'cartesian'"cartesian""cartesian""cartesian""cartesian""cartesian":

Die 3D-Punkte des Modells werden zunächst mit der übergebenen PosePosePosePoseposepose transformiert. Anschließend werden sie mittels der in CamParamCamParamCamParamCamParamcamParamcam_param übergebenen Kameraparameter in ein Bild projiziert.

Die internen Kameraparameter CamParamCamParamCamParamCamParamcamParamcam_param beschreiben die Art der Projektion (siehe Kalibrierung). Die PosePosePosePoseposepose 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.

'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces":

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_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3dread_object_model_3d mit GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 'convert_to_triangles'"convert_to_triangles""convert_to_triangles""convert_to_triangles""convert_to_triangles""convert_to_triangles" auf 'true'"true""true""true""true""true" gesetzt verwendet werden, um alle Polygone in Dreiecke zu konvertieren. Alternativ kann triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3dtriangulate_object_model_3d zur Erstellung der Oberflächendreiecke aufgerufen werden.

Die Flächen der Modelle werden zunächst mit der übergebenen PosePosePosePoseposepose transformiert. Anschließend werden sie mittels der in CamParamCamParamCamParamCamParamcamParamcam_param übergebenen Kameraparameter in ein Bild projiziert, wobei die 3D-Information (X-, Y- und Z-Koordinaten) in den Pixeln weiterhin enthalten bleibt. Mehr Details zu CamParamCamParamCamParamCamParamcamParamcam_param und PosePosePosePoseposepose finden sich auch im Abschnitt 'cartesian'"cartesian""cartesian""cartesian""cartesian""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 TypeTypeTypeTypetypetype kann zur Erzeugung von Modellen mit 2D-Mapping verwendet werden, indem mit xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_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_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3dsample_object_model_3d und surface_normals_object_model_3dsurface_normals_object_model_3dSurfaceNormalsObjectModel3dSurfaceNormalsObjectModel3dSurfaceNormalsObjectModel3dsurface_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).

'cartesian_faces_no_opengl'"cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl":

Diese Transformationsmethode arbeitet genauso wie die Methode 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces", verwendet aber kein OpenGL. In der Regel ermittelt 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces" automatisch, ob OpenGL verwendet werden kann. 'cartesian_faces_no_opengl'"cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl" muss daher normalerweise nicht explizit verwendet werden, kann aber in Fällen, in denen die OpenGL- Variante (z.B. aufgrund von Treiberproblemen) zu Fehlern führt, nützlich sein.

'from_xyz_map'"from_xyz_map""from_xyz_map""from_xyz_map""from_xyz_map""from_xyz_map":

Diese Transformationsmethode ist nur möglich, wenn das 3D-Objektmodell mit dem Operator xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_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_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d erstellte Abbildung der Punkte in Bildkoordinaten verwendet.

Die Parameter CamParamCamParamCamParamCamParamcamParamcam_param und PosePosePosePoseposepose werden ignoriert. Die Größe der Bilder ist gleich der Bildgröße der ursprünglich an xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d übergebenen Bilder und kann über get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParamsget_object_model_3d_params mit 'mapping_size'"mapping_size""mapping_size""mapping_size""mapping_size""mapping_size" abgefragt werden.

Diese Transformationsmethode ist schneller als 'cartesian'"cartesian""cartesian""cartesian""cartesian""cartesian". Sie ist z.B. nützlich um das Ergebnis einer mit segment_object_model_3dsegment_object_model_3dSegmentObjectModel3dSegmentObjectModel3dSegmentObjectModel3dsegment_object_model_3d durchgeführten Segmentierung anzuzeigen.

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

Parameter

XXXXxx (output_object)  singlechannelimage objectHImageHObjectHImageHobject * (real)

Bild mit den X-Koordinaten der 3D-Punkte.

YYYYyy (output_object)  singlechannelimage objectHImageHObjectHImageHobject * (real)

Bild mit den Y-Koordinaten der 3D-Punkte.

ZZZZzz (output_object)  singlechannelimage objectHImageHObjectHImageHobject * (real)

Bild mit den Z-Koordinaten der 3D-Punkte.

ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d (input_control)  object_model_3d(-array) HObjectModel3D, HTupleMaybeSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des zu transformierenden 3D-Objektmodells.

TypeTypeTypeTypetypetype (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Transformationsmethode.

Defaultwert: 'cartesian' "cartesian" "cartesian" "cartesian" "cartesian" "cartesian"

Werteliste: 'cartesian'"cartesian""cartesian""cartesian""cartesian""cartesian", 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces", 'cartesian_faces_no_opengl'"cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl", 'from_xyz_map'"from_xyz_map""from_xyz_map""from_xyz_map""from_xyz_map""from_xyz_map"

CamParamCamParamCamParamCamParamcamParamcam_param (input_control)  campar HCamPar, HTupleSequence[Union[float, int, str]]HTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Kameraparameter.

PosePosePosePoseposepose (input_control)  pose HPose, HTupleSequence[Union[int, float]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Pose des 3D-Objektmodells.

Parameteranzahl: Pose == 0 || Pose == 7 || Pose == 12

Ergebnis

object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz liefert den Wert TRUE wenn alle Parameter korrekt sind. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3dread_object_model_3d, xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d, triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3dtriangulate_object_model_3d

Alternativen

project_object_model_3dproject_object_model_3dProjectObjectModel3dProjectObjectModel3dProjectObjectModel3dproject_object_model_3d

Siehe auch

xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d, get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParamsget_object_model_3d_params

Modul

3D Metrology