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 — Transform 3D points from a 3D object model to images.

Signature

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   (Windows only)

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   (Windows only)

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]

Description

The operator object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz transforms the 3D points of the 3D object model ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d into the three images XXXXxx, YYYYyy, and ZZZZzz.

Three transformation modes are possible. The parameter TypeTypeTypeTypetypetype is used to select one of them. Note that multiple 3D object models can be passed in ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d only for the mode 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces". All other modes expect a single 3D object model.

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

First, each point is transformed into the camera coordinate system using the given PosePosePosePoseposepose. Then, these coordinates are projected into the image coordinate system based on the internal camera parameters CamParamCamParamCamParamCamParamcamParamcam_param.

The internal camera parameters CamParamCamParamCamParamCamParamcamParamcam_param describe the projection characteristics of the camera (see Calibration). The PosePosePosePoseposepose is in the form , where ccs denotes camera coordinate system and mcs the model coordinate system (which is a 3D world coordinate system), see Transformations / Poses and “Solution Guide III-C - 3D Vision”. Hence, it describes the position and orientation of the model coordinate system relative to the camera coordinate system.

The X-, Y-, and Z-coordinates of the transformed point are written into the corresponding image at the position of the projection. If multiple points are projected to the same image coordinates, the point with the smallest Z-value is written (hidden-point removal). The dimensions of the returned images are defined by the camera parameters.

The returned images show the object as it would look like when seeing it with the specified camera under the specified pose.

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

In order to use this transformation, the input 3D object models need to contain faces (triangles or polygons), otherwise, the 3D object model without faces is disregarded. Note that if the 3D object models have polygon faces, those are converted internally to triangles. This conversion can be done beforehand to speed up this operator. For this, read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3dread_object_model_3d can be called with the GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 'convert_to_triangles'"convert_to_triangles""convert_to_triangles""convert_to_triangles""convert_to_triangles""convert_to_triangles" set to 'true'"true""true""true""true""true", to convert all faces to triangles. Alternatively, triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3dtriangulate_object_model_3d can be called prior to this operator.

First, each face of the 3D object models ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d is transformed into the camera coordinate system using the given PosePosePosePoseposepose. Then, these coordinates are projected into the image coordinate system based on the internal camera parameters CamParamCamParamCamParamCamParamcamParamcam_param, while keeping the 3D information (X-, Y-, and Z-coordinates) for each of those pixels. For a more detailed explanation of CamParamCamParamCamParamCamParamcamParamcam_param and PosePosePosePoseposepose please refer to the section 'cartesian'"cartesian""cartesian""cartesian""cartesian""cartesian". If multiple face are projected to the same image coordinates, the value with the smallest Z-value is written (hidden-point removal). The dimensions of the returned images are defined by the camera parameters.

The returned images show the objects as they would look like when seeing them with the specified camera under the specified pose.

In case that OpenGL 2.1, GLSL 1.2, and the OpenGL extensions GL_EXT_framebuffer_object and GL_EXT_framebuffer_blit are available, speed increases.

This TypeTypeTypeTypetypetype can be used to create 3D object models containing 2D mapping data, by creating a 3D object model from the returned images using xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d. Note that in many cases, it is recommended to use the 2D mapping data, if available, for speed and robustness reasons. This is beneficial for example when using sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3dsample_object_model_3d, surface_normals_object_model_3dsurface_normals_object_model_3dSurfaceNormalsObjectModel3dSurfaceNormalsObjectModel3dSurfaceNormalsObjectModel3dsurface_normals_object_model_3d, or when preparing a 3D object model for surface-based matching, e.g., smoothing, removing outliers, and reducing the domain.

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

This transformation mode works in the same way as the method 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces" but does not use OpenGL. In general, 'cartesian_faces'"cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces""cartesian_faces" automatically determines if OpenGL is available. Thus, it is usually not required to use 'cartesian_faces_no_opengl'"cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl""cartesian_faces_no_opengl" explicitly. It can make sense, however, to use it in cases where the automatic mode selection does not work due to, for example, driver issues with OpenGL.

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

This transformation mode works only if the 3D object model was created with the operator xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d. It writes each 3D point to the image coordinate where it originally came from, using the mapping attribute that is stored within the 3D object model.

The parameters CamParamCamParamCamParamCamParamcamParamcam_param and PosePosePosePoseposepose are ignored. The dimensions of the returned images are equal to the dimensions of the original images that were used with xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d to create the 3D object model and can be queried from get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParamsget_object_model_3d_params with 'mapping_size'"mapping_size""mapping_size""mapping_size""mapping_size""mapping_size".

This transformation mode is faster than 'cartesian'"cartesian""cartesian""cartesian""cartesian""cartesian". It is suitable, e.g., to visualize the results of a segmentation done with segment_object_model_3dsegment_object_model_3dSegmentObjectModel3dSegmentObjectModel3dSegmentObjectModel3dsegment_object_model_3d.

Attention

Cameras with hypercentric lenses are not supported. For displaying large faces with a non-zero distortion in CamParamCamParamCamParamCamParamcamParamcam_param, note that the distortion is only applied to the points of the model. In the projection, these points are subsequently connected by straight lines. For a good approximation of the distorted lines, please use a triangulation with sufficiently small triangles.

Execution Information

Parameters

XXXXxx (output_object)  singlechannelimage objectHImageHObjectHImageHobject * (real)

Image with the X-Coordinates of the 3D points.

YYYYyy (output_object)  singlechannelimage objectHImageHObjectHImageHobject * (real)

Image with the Y-Coordinates of the 3D points.

ZZZZzz (output_object)  singlechannelimage objectHImageHObjectHImageHobject * (real)

Image with the Z-Coordinates of the 3D points.

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

Handle of the 3D object model.

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

Type of the conversion.

Default value: 'cartesian' "cartesian" "cartesian" "cartesian" "cartesian" "cartesian"

List of values: '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*)

Camera parameters.

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

Pose of the 3D object model.

Number of elements: Pose == 0 || Pose == 7 || Pose == 12

Result

The operator object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz returns the value TRUE if the given parameters are correct. Otherwise, an exception will be raised.

Possible Predecessors

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

Alternatives

project_object_model_3dproject_object_model_3dProjectObjectModel3dProjectObjectModel3dProjectObjectModel3dproject_object_model_3d

See also

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

Module

3D Metrology