vector_to_pose T_vector_to_pose VectorToPose VectorToPose (Operator)
Name
vector_to_pose T_vector_to_pose VectorToPose VectorToPose
— Compute an absolute pose out of point correspondences between
world and image coordinates.
Signature
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 )
static HPose HImage ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const wchar_t* Method , const wchar_t* QualityType , double* Quality )
(Windows only)
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
HPose HCamPar ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const wchar_t* Method , const wchar_t* QualityType , double* Quality ) const
(Windows only)
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 )
double HPose ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const wchar_t* Method , const wchar_t* QualityType )
(Windows only)
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_pose vector_to_pose VectorToPose VectorToPose VectorToPose
computes a pose out of at least
three or four (depending on Method Method Method Method method
) point correspondences
of 3D world coordinates (WorldX WorldX WorldX WorldX worldX
, WorldY WorldY WorldY WorldY worldY
,
WorldZ WorldZ WorldZ WorldZ worldZ
), given in meters, and 2D image coordinates
(ImageRow ImageRow ImageRow ImageRow imageRow
, ImageColumn ImageColumn ImageColumn ImageColumn imageColumn
), given in pixels, as well as
the internal camera parameters (CameraParam CameraParam CameraParam CameraParam cameraParam
).
Thereby the pose (the external camera parameters) is in the form
, where
ccs denotes the camera coordinate system and
wcs the world coordinate system
(see Transformations / Poses
and “Solution Guide III-C - 3D Vision”
).
Parameter Method
By setting the parameter Method Method Method Method method
, it is possible to choose
what kind of algorithm is used for the pose computation.
Methods supported for perspective cameras :
Method Method Method Method method
When to use
Minimum number of point correspondences
'analytic' "analytic" "analytic" "analytic" "analytic" [1]
Default method for general cases
4
'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" [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 :
Method Method Method Method method
When to use
Minimum number of point correspondences
'telecentric' "telecentric" "telecentric" "telecentric" "telecentric" [3]
Default method for general cases
4
'telecentric_robust' "telecentric_robust" "telecentric_robust" "telecentric_robust" "telecentric_robust" [3]
For very ill-posed point
configurations where Quality Quality Quality Quality quality
has an unlikely large value
4
'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" [3]
For very ill-posed point
configurations where the world points lie in a horizontal plane
(
) and
Quality Quality Quality Quality quality
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_calibration camera_calibration CameraCalibration CameraCalibration CameraCalibration
to solve the pose estimation problem.
They must be passed in CameraParam CameraParam CameraParam CameraParam cameraParam
.
The user can specify in QualityType QualityType QualityType QualityType qualityType
one or more quality
measures of the pose to be evaluated. The resulting quality
evaluations are returned concatenated in Quality Quality Quality Quality quality
.
Currently, only '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 (WorldZ WorldZ WorldZ WorldZ worldZ
= [] ) 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 Pose Pose Pose Pose pose
.
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_pose vector_to_pose VectorToPose VectorToPose VectorToPose
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 Pose Pose Pose Pose pose
by
and
.
Attention
The method 'analytic' "analytic" "analytic" "analytic" "analytic" only allows a maximum number of 32767
point correspondences.
Execution Information
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
Multithreading scope: global (may be called from any thread).
Processed without parallelization.
Parameters
WorldX WorldX WorldX WorldX worldX
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
X-Component of world coordinates.
Number of elements: WorldX >= 4
WorldY WorldY WorldY WorldY worldY
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Y-Component of world coordinates.
Number of elements: WorldY == WorldX
WorldZ WorldZ WorldZ WorldZ worldZ
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Z-Component of world coordinates.
Number of elements: WorldZ == WorldX || WorldZ == 0
ImageRow ImageRow ImageRow ImageRow imageRow
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Row-Component of image coordinates.
Number of elements: ImageRow == WorldX
ImageColumn ImageColumn ImageColumn ImageColumn imageColumn
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Column-Component of image coordinates.
Number of elements: ImageColumn == WorldX
CameraParam CameraParam CameraParam CameraParam cameraParam
(input_control) campar →
HCamPar , HTuple HTuple Htuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
The inner camera parameters from camera calibration.
Method Method Method Method method
(input_control) string →
HTuple HTuple Htuple (string) (string ) (HString ) (char* )
Kind of algorithm
Default value:
'iterative'
"iterative"
"iterative"
"iterative"
"iterative"
List of values: 'analytic' "analytic" "analytic" "analytic" "analytic" , 'iterative' "iterative" "iterative" "iterative" "iterative" , 'planar_analytic' "planar_analytic" "planar_analytic" "planar_analytic" "planar_analytic" , 'telecentric' "telecentric" "telecentric" "telecentric" "telecentric" , '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_robust' "telecentric_robust" "telecentric_robust" "telecentric_robust" "telecentric_robust"
QualityType QualityType QualityType QualityType qualityType
(input_control) string(-array) →
HTuple HTuple Htuple (string) (string ) (HString ) (char* )
Type of pose quality to be returned in Quality.
Default value:
'error'
"error"
"error"
"error"
"error"
List of values: 'error' "error" "error" "error" "error"
Pose Pose Pose Pose pose
(output_control) pose →
HPose , HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Pose.
Quality Quality Quality Quality quality
(output_control) number(-array) →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Pose quality.
Result
vector_to_pose vector_to_pose VectorToPose VectorToPose VectorToPose
returns 2 (H_MSG_TRUE) if all parameter values are
correct.
See also
proj_hom_mat2d_to_pose proj_hom_mat2d_to_pose ProjHomMat2dToPose ProjHomMat2dToPose ProjHomMat2dToPose
,
vector_to_rel_pose vector_to_rel_pose VectorToRelPose VectorToRelPose VectorToRelPose
,
camera_calibration camera_calibration CameraCalibration CameraCalibration CameraCalibration
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