Skip to content

project_3d_pointProject3dPointProject3dPointproject_3d_pointT_project_3d_point🔗

Short description🔗

project_3d_pointProject3dPointProject3dPointproject_3d_pointT_project_3d_point — Project 3D points into (sub-)pixel image coordinates.

Signature🔗

project_3d_point( point3d.x X, point3d.y Y, point3d.z Z, campar CameraParam, out point.y Row, out point.x Column )void Project3dPoint( const HTuple& X, const HTuple& Y, const HTuple& Z, const HTuple& CameraParam, HTuple* Row, HTuple* Column )static void HOperatorSet.Project3dPoint( HTuple x, HTuple y, HTuple z, HTuple cameraParam, out HTuple row, out HTuple column )def project_3d_point( x: Sequence[float], y: Sequence[float], z: Sequence[float], camera_param: Sequence[Union[int, float, str]] ) -> Tuple[Sequence[float], Sequence[float]]

Herror T_project_3d_point( const Htuple X, const Htuple Y, const Htuple Z, const Htuple CameraParam, Htuple* Row, Htuple* Column )

void HCamPar::Project3dPoint( const HTuple& X, const HTuple& Y, const HTuple& Z, HTuple* Row, HTuple* Column ) const

void HCamPar.Project3dPoint( HTuple x, HTuple y, HTuple z, out HTuple row, out HTuple column )

Description🔗

project_3d_pointProject3dPoint projects one or more 3D points (with coordinates Xxx, Yyy, and Zzz) into the image plane (in pixels) and returns the result in Rowrowrow and Columncolumncolumn. The coordinates Xxx, Yyy, and Zzz are given in the camera coordinate system, i.e., they describe the position of the points relative to the camera.

The internal camera parameters CameraParamcameraParamcamera_param describe the projection characteristics of the camera (see Calibration for details).

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on internal data level.

Parameters🔗

Xxx (input_control) point3d.x-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

X coordinates of the 3D points to be projected in the camera coordinate system.

Yyy (input_control) point3d.y-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Y coordinates of the 3D points to be projected in the camera coordinate system.

Zzz (input_control) point3d.z-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Z coordinates of the 3D points to be projected in the camera coordinate system.

CameraParamcameraParamcamera_param (input_control) campar → (real / integer / string)HTuple (double / Hlong / HString)HCamPar, HTuple (double / int / long / string)Sequence[Union[int, float, str]]Htuple (double / Hlong / char*)

Internal camera parameters.

Rowrowrow (output_control) point.y-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Row coordinates of the projected points (in pixels).

Columncolumncolumn (output_control) point.x-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Column coordinates of the projected points (in pixels).

Example🔗

(HDevelop)

* Set internal camera parameters and pose of the world coordinate
* system in camera coordinates.
* Note that, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006, \
                                654, 519, 1280, 1024, CameraParam)
create_pose (0.1, 0.2, 0.3, 40, 50, 60, \
             'Rp+T', 'gba', 'point', WorldPose)
* Convert pose into transformation matrix.
pose_to_hom_mat3d(WorldPose, HomMat3D)
* Transform 3D points from world into the camera coordinate system.
affine_trans_point_3d(HomMat3D, [3.0, 3.2], [4.5, 4.5], [3.8, 4.2], X, Y, Z)
* Project 3D points into image.
project_3d_point(X, Y, Z, CameraParam, Row, Column)
(C++)
HTuple WorldPose, HomMat3D, X1, Y1, Z1, X2, Y2, Z2\;
HTuple CameraParam, Row, Column\;
// Set internal camera parameters and pose of the world coordinate
// system in camera coordinates.
// Note that, typically, these values are the result of a prior
// calibration.
gen_cam_par_area_scan_division (0.01, -731, 5.2e-006, 5.2e-006,
                                654, 519, 1280, 1024, &CameraParam)\;
create_pose (0.1, 0.2, 0.3, 40, 50, 60,
             'Rp+T', 'gba', 'point', &WorldPose)\;
// Convert pose into transformation matrix.
pose_to_hom_mat3d(WorldPose, &HomMat3D)\;
// Transform 3D points from source into destination coordinate system.
X1[1] = 3.2\;
X1[0] = 3.0\;
Y1[1] = 4.5\;
Y1[0] = 4.5\;
Z1[1] = 4.2\;
Z1[0] = 3.8\;
affine_trans_point_3d(HomMat3D, X1, Y1, Z1, &X2, &Y2, &Z2)\;
// Project 3D points into image.
project_3d_point(X2, Y2, Z2, CameraParam, &Row, &Column)\;

Result🔗

project_3d_pointProject3dPoint returns 2 (H_MSG_TRUE) if all parameter values are correct. If necessary, an exception is raised.

Combinations with other operators🔗

Combinations

Possible predecessors

read_cam_parReadCamPar, affine_trans_point_3dAffineTransPoint3d

Possible successors

gen_region_pointsGenRegionPoints, gen_region_polygonGenRegionPolygon, disp_polygonDispPolygon

See also

camera_calibrationCameraCalibration, disp_caltabDispCaltab, read_cam_parReadCamPar, get_line_of_sightGetLineOfSight, affine_trans_point_3dAffineTransPoint3d, image_points_to_world_planeImagePointsToWorldPlane

Module🔗

Calibration