ClassesClassesClassesClasses | | | | Operators

vector_to_poseT_vector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose (Operator)

Name

vector_to_poseT_vector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose — Compute an absolute pose out of point correspondences between world and image coordinates.

Signature

vector_to_pose( : : WorldX, WorldY, WorldZ, ImageRow, ImageColumn, CameraParam, Method, QualityType : Pose, Quality)

Herror T_vector_to_pose(const Htuple WorldX, const Htuple WorldY, const Htuple WorldZ, const Htuple ImageRow, const Htuple ImageColumn, const Htuple CameraParam, const Htuple Method, const Htuple QualityType, Htuple* Pose, Htuple* Quality)

Herror vector_to_pose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HTuple& CameraParam, const HTuple& Method, const HTuple& QualityType, HTuple* Pose, HTuple* Quality)

void VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HTuple& CameraParam, const HTuple& Method, const HTuple& QualityType, HTuple* Pose, HTuple* Quality)

static HPose HImage::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HTuple& QualityType, HTuple* Quality)

static HPose HImage::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HString& QualityType, double* Quality)

static HPose HImage::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const char* Method, const char* QualityType, double* Quality)

HPose HCamPar::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HString& Method, const HTuple& QualityType, HTuple* Quality) const

HPose HCamPar::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HString& Method, const HString& QualityType, double* Quality) const

HPose HCamPar::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const char* Method, const char* QualityType, double* Quality) const

HTuple HPose::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HTuple& QualityType)

double HPose::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HString& QualityType)

double HPose::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const char* Method, const char* QualityType)

void HOperatorSetX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] VARIANT Method, [in] VARIANT QualityType, [out] VARIANT* Pose, [out] VARIANT* Quality)

VARIANT HImageX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] BSTR Method, [in] VARIANT QualityType, [out] VARIANT* Quality)

VARIANT HCamParX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] BSTR Method, [in] VARIANT QualityType, [out] VARIANT* Quality)

VARIANT HPoseX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] BSTR Method, [in] VARIANT QualityType, [out] VARIANT* Quality)

static void HOperatorSet.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HTuple cameraParam, HTuple method, HTuple qualityType, out HTuple pose, out HTuple quality)

static HPose HImage.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, HTuple qualityType, out HTuple quality)

static HPose HImage.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, string qualityType, out double quality)

HPose HCamPar.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, string method, HTuple qualityType, out HTuple quality)

HPose HCamPar.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, string method, string qualityType, out double quality)

HTuple HPose.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, HTuple qualityType)

double HPose.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, string qualityType)

Description

The operator vector_to_posevector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose computes a pose out of at least three or four (depending on MethodMethodMethodMethodMethodmethod) point correspondences of 3D world coordinates (WorldXWorldXWorldXWorldXWorldXworldX, WorldYWorldYWorldYWorldYWorldYworldY, WorldZWorldZWorldZWorldZWorldZworldZ), given in meters, and 2D image coordinates (ImageRowImageRowImageRowImageRowImageRowimageRow, ImageColumnImageColumnImageColumnImageColumnImageColumnimageColumn), given in pixels.

Parameter Method

By setting the parameter MethodMethodMethodMethodMethodmethod, it is possible to choose what kind of algorithm is used for the pose computation.

Methods supported for perspective cameras:

MethodMethodMethodMethodMethodmethod When to use Minimum number of point correspondences
'analytic'"analytic""analytic""analytic""analytic""analytic" [1] Default method for general cases 4
'iterative'"iterative""iterative""iterative""iterative""iterative" [2] If only three or four point correspondences are used or if the world points are close to being planar 3
'planar_analytic'"planar_analytic""planar_analytic""planar_analytic""planar_analytic""planar_analytic" [4] If the world points lie in a horizontal plane ( ) 4
The numbers in square brackets in the table above refer to the publications the implementations of the corresponding methods are based on.

Methods supported for telecentric cameras:

MethodMethodMethodMethodMethodmethod When to use Minimum number of point correspondences
'telecentric'"telecentric""telecentric""telecentric""telecentric""telecentric" [3] Default method for general cases 4
'telecentric_robust'"telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust" [3] For very ill-posed point configurations where QualityQualityQualityQualityQualityquality has an unlikely large value 4
'telecentric_planar'"telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar" [3] If the world points lie in a horizontal plane ( ) 3
'telecentric_planar_robust'"telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust" [3] For very ill-posed point configurations where the world points lie in a horizontal plane ( ) and QualityQualityQualityQualityQualityquality has an unlikely large value 3
The numbers in square brackets in the table above refer to the publications the implementations of the corresponding methods are based on.

Parameters CameraParam and Quality

All methods need the inner camera parameters obtained from camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration to solve the pose estimation problem. They must be passed in CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam.

The user can specify in QualityTypeQualityTypeQualityTypeQualityTypeQualityTypequalityType one or more quality measures of the pose to be evaluated. The resulting quality evaluations are returned concatenated in QualityQualityQualityQualityQualityquality. Currently, only 'error'"error""error""error""error""error" is supported. It corresponds to the root-mean-square error in pixels of the projected 3D world coordinates.

General Remarks

If a method for planar world points is chosen, all world points are assumed to lie in the plane . Therefore, the z-component of the world coordinates can be left empty (WorldZWorldZWorldZWorldZWorldZworldZ = []) since only 2D correspondences are used in this case.

For telecentric cameras, the translation in z obviously cannot be determined. It is set to 0 in PosePosePosePosePosepose.

For planar world points and telecentric cameras, there are always two possible equivalent poses. This ambiguity can only be resolved by some additional knowledge. vector_to_posevector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose returns an arbitrary solution of the two possible solutions in this case. The other solution can be calculated easily by replacing the values of and in PosePosePosePosePosepose by and .

Attention

The method 'analytic'"analytic""analytic""analytic""analytic""analytic" only allows a maximum number of 32767 point correspondences.

Parallelization

Parameters

WorldXWorldXWorldXWorldXWorldXworldX (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

X-Component of world coordinates.

Number of elements: WorldX >= 4

WorldYWorldYWorldYWorldYWorldYworldY (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Y-Component of world coordinates.

Number of elements: WorldY == WorldX

WorldZWorldZWorldZWorldZWorldZworldZ (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Z-Component of world coordinates.

Number of elements: WorldZ == WorldX || WorldZ == 0

ImageRowImageRowImageRowImageRowImageRowimageRow (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Row-Component of image coordinates.

Number of elements: ImageRow == WorldX

ImageColumnImageColumnImageColumnImageColumnImageColumnimageColumn (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Column-Component of image coordinates.

Number of elements: ImageColumn == WorldX

CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam (input_control)  campar HCamPar, HTupleHTupleHTupleHCamParX, VARIANTHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*) (double / Hlong / BSTR) (double / Hlong / char*)

The inner camera parameters from camera calibration.

MethodMethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Kind of algorithm

Default value: 'iterative' "iterative" "iterative" "iterative" "iterative" "iterative"

List of values: 'analytic'"analytic""analytic""analytic""analytic""analytic", 'iterative'"iterative""iterative""iterative""iterative""iterative", 'planar_analytic'"planar_analytic""planar_analytic""planar_analytic""planar_analytic""planar_analytic", 'telecentric'"telecentric""telecentric""telecentric""telecentric""telecentric", 'telecentric_planar'"telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar", 'telecentric_planar_robust'"telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust", 'telecentric_robust'"telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust"

QualityTypeQualityTypeQualityTypeQualityTypeQualityTypequalityType (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Type of pose quality to be returned in Quality.

Default value: 'error' "error" "error" "error" "error" "error"

List of values: 'error'"error""error""error""error""error"

PosePosePosePosePosepose (output_control)  pose HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Pose.

QualityQualityQualityQualityQualityquality (output_control)  number(-array) HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Pose quality.

Result

vector_to_posevector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose returns 2 (H_MSG_TRUE) if all parameter values are correct.

See also

proj_hom_mat2d_to_poseproj_hom_mat2d_to_poseProjHomMat2dToPoseproj_hom_mat2d_to_poseProjHomMat2dToPoseProjHomMat2dToPose, vector_to_rel_posevector_to_rel_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose, camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration

References

[1] Francesc Moreno-Noguer, Vincent Lepetit, and Pascal Fua: “Accurate Non-Iterative O(n) Solution to the PnP Problem”; Eleventh IEEE International Conference on Computer Vision, 2007.
[2] Gerald Schweighofer, and Axel Pinz: “Robust Pose Estimation from a Planar Target”; Transactions on Pattern Analysis and Machine Intelligence (PAMI), 28(12):2024-2030, 2006.
[3] Carsten Steger: “Algorithms for the Orthographic-n-Point Problem”; Journal of Mathematical Imaging and Vision, vol. 60, no. 2, pp. 246-266, 2018.
[4] Zhengyou Zhang: “A flexible new technique for camera calibration.”; Transactions on Pattern Analysis and Machine Intelligence (PAMI), 22(11):1330-1334, 2000.

Module

Calibration


ClassesClassesClassesClasses | | | | Operators