vector_to_proj_hom_mat2d_distortion T_vector_to_proj_hom_mat2d_distortion VectorToProjHomMat2dDistortion VectorToProjHomMat2dDistortion vector_to_proj_hom_mat2d_distortion (Operator)
vector_to_proj_hom_mat2d_distortion T_vector_to_proj_hom_mat2d_distortion VectorToProjHomMat2dDistortion VectorToProjHomMat2dDistortion vector_to_proj_hom_mat2d_distortion
— Compute a projective transformation matrix and the radial distortion
coefficient using given image point correspondences.
Signature
vector_to_proj_hom_mat2d_distortion ( : : Points1Row , Points1Col , Points2Row , Points2Col , CovRR1 , CovRC1 , CovCC1 , CovRR2 , CovRC2 , CovCC2 , ImageWidth , ImageHeight , Method : HomMat2D , Kappa , Error )
Herror T_vector_to_proj_hom_mat2d_distortion (const Htuple Points1Row , const Htuple Points1Col , const Htuple Points2Row , const Htuple Points2Col , const Htuple CovRR1 , const Htuple CovRC1 , const Htuple CovCC1 , const Htuple CovRR2 , const Htuple CovRC2 , const Htuple CovCC2 , const Htuple ImageWidth , const Htuple ImageHeight , const Htuple Method , Htuple* HomMat2D , Htuple* Kappa , Htuple* Error )
void VectorToProjHomMat2dDistortion (const HTuple& Points1Row , const HTuple& Points1Col , const HTuple& Points2Row , const HTuple& Points2Col , const HTuple& CovRR1 , const HTuple& CovRC1 , const HTuple& CovCC1 , const HTuple& CovRR2 , const HTuple& CovRC2 , const HTuple& CovCC2 , const HTuple& ImageWidth , const HTuple& ImageHeight , const HTuple& Method , HTuple* HomMat2D , HTuple* Kappa , HTuple* Error )
double HHomMat2D ::VectorToProjHomMat2dDistortion (const HTuple& Points1Row , const HTuple& Points1Col , const HTuple& Points2Row , const HTuple& Points2Col , const HTuple& CovRR1 , const HTuple& CovRC1 , const HTuple& CovCC1 , const HTuple& CovRR2 , const HTuple& CovRC2 , const HTuple& CovCC2 , Hlong ImageWidth , Hlong ImageHeight , const HString& Method , double* Error )
double HHomMat2D ::VectorToProjHomMat2dDistortion (const HTuple& Points1Row , const HTuple& Points1Col , const HTuple& Points2Row , const HTuple& Points2Col , const HTuple& CovRR1 , const HTuple& CovRC1 , const HTuple& CovCC1 , const HTuple& CovRR2 , const HTuple& CovRC2 , const HTuple& CovCC2 , Hlong ImageWidth , Hlong ImageHeight , const char* Method , double* Error )
double HHomMat2D ::VectorToProjHomMat2dDistortion (const HTuple& Points1Row , const HTuple& Points1Col , const HTuple& Points2Row , const HTuple& Points2Col , const HTuple& CovRR1 , const HTuple& CovRC1 , const HTuple& CovCC1 , const HTuple& CovRR2 , const HTuple& CovRC2 , const HTuple& CovCC2 , Hlong ImageWidth , Hlong ImageHeight , const wchar_t* Method , double* Error )
(
Windows only)
static void HOperatorSet .VectorToProjHomMat2dDistortion (HTuple points1Row , HTuple points1Col , HTuple points2Row , HTuple points2Col , HTuple covRR1 , HTuple covRC1 , HTuple covCC1 , HTuple covRR2 , HTuple covRC2 , HTuple covCC2 , HTuple imageWidth , HTuple imageHeight , HTuple method , out HTuple homMat2D , out HTuple kappa , out HTuple error )
double HHomMat2D .VectorToProjHomMat2dDistortion (HTuple points1Row , HTuple points1Col , HTuple points2Row , HTuple points2Col , HTuple covRR1 , HTuple covRC1 , HTuple covCC1 , HTuple covRR2 , HTuple covRC2 , HTuple covCC2 , int imageWidth , int imageHeight , string method , out double error )
def vector_to_proj_hom_mat2d_distortion (points_1row : Sequence[Union[float, int]], points_1col : Sequence[Union[float, int]], points_2row : Sequence[Union[float, int]], points_2col : Sequence[Union[float, int]], cov_rr1 : Sequence[Union[float, int]], cov_rc1 : Sequence[Union[float, int]], cov_cc1 : Sequence[Union[float, int]], cov_rr2 : Sequence[Union[float, int]], cov_rc2 : Sequence[Union[float, int]], cov_cc2 : Sequence[Union[float, int]], image_width : int, image_height : int, method : str) -> Tuple[Sequence[float], float, float]
Description
vector_to_proj_hom_mat2d_distortion vector_to_proj_hom_mat2d_distortion VectorToProjHomMat2dDistortion VectorToProjHomMat2dDistortion vector_to_proj_hom_mat2d_distortion
determines the
projective transformation matrix HomMat2D HomMat2D HomMat2D homMat2D hom_mat_2d
and the radial
distortion coefficient Kappa Kappa Kappa kappa kappa
from given
point correspondences (Points1Row Points1Row Points1Row points1Row points_1row
,Points1Col Points1Col Points1Col points1Col points_1col
),
(Points2Row Points2Row Points2Row points2Row points_2row
,Points2Col Points2Col Points2Col points2Col points_2col
) that optimally fulfill the
following equation:
Here,
and
denote image points that are obtained by undistorting the input
image points with the division model (see
Calibration ):
Here,
and
denote the distorted image points, specified relative to the image center.
Thus, vector_to_proj_hom_mat2d_distortion vector_to_proj_hom_mat2d_distortion VectorToProjHomMat2dDistortion VectorToProjHomMat2dDistortion vector_to_proj_hom_mat2d_distortion
assumes that the
principal point of the camera, i.e., the center of the radial
distortions, lies at the center of the image. Note that the images
from which the points (Points1Row Points1Row Points1Row points1Row points_1row
,Points1Col Points1Col Points1Col points1Col points_1col
) and
(Points2Row Points2Row Points2Row points2Row points_2row
,Points2Col Points2Col Points2Col points2Col points_2col
) are extracted have to be
obtained with the same camera.
The returned Kappa Kappa Kappa kappa kappa
can be used to construct camera
parameters that can be used to rectify images or points (see
change_radial_distortion_cam_par change_radial_distortion_cam_par ChangeRadialDistortionCamPar ChangeRadialDistortionCamPar change_radial_distortion_cam_par
,
change_radial_distortion_image change_radial_distortion_image ChangeRadialDistortionImage ChangeRadialDistortionImage change_radial_distortion_image
, and
change_radial_distortion_points change_radial_distortion_points ChangeRadialDistortionPoints ChangeRadialDistortionPoints change_radial_distortion_points
):
The minimum number of required point correspondences is five.
vector_to_proj_hom_mat2d_distortion vector_to_proj_hom_mat2d_distortion VectorToProjHomMat2dDistortion VectorToProjHomMat2dDistortion vector_to_proj_hom_mat2d_distortion
seeks to minimize the
transformation error between the point correspondences based on the
above equations. To achieve such a minimization, two different
algorithms are available. The algorithm to use can be chosen using
the parameter Method Method Method method method
. For Method Method Method method method
=
'linear' "linear" "linear" "linear" "linear" , a linear algorithm that minimizes an algebraic
error based on the above equations is used. This algorithm is very
fast and returns accurate results for small to moderate noise of the
point coordinates and for most distortions (except for small
distortions). For Method Method Method method method
= 'gold_standard' "gold_standard" "gold_standard" "gold_standard" "gold_standard" , a
mathematically optimal but slower optimization is used, which
minimizes the geometric reprojection error. In general, it is
preferable to use Method Method Method method method
= 'gold_standard' "gold_standard" "gold_standard" "gold_standard" "gold_standard" .
If 'gold_standard' "gold_standard" "gold_standard" "gold_standard" "gold_standard" is used, the covariances of the image
points (CovRR1 CovRR1 CovRR1 covRR1 cov_rr1
, CovRC1 CovRC1 CovRC1 covRC1 cov_rc1
, CovCC1 CovCC1 CovCC1 covCC1 cov_cc1
,
CovRR2 CovRR2 CovRR2 covRR2 cov_rr2
, CovRC2 CovRC2 CovRC2 covRC2 cov_rc2
, CovCC2 CovCC2 CovCC2 covCC2 cov_cc2
) can be
incorporated into the computation. They can be provided, for
example, by the operator points_foerstner points_foerstner PointsFoerstner PointsFoerstner points_foerstner
. If the point
covariances are unknown, which is the default, empty tuples are
passed. In this case, the optimization algorithm internally assumes
uniform and equal covariances for all points. If 'linear' "linear" "linear" "linear" "linear"
is used, the covariances are ignored and the covariance parameters
can be left empty.
The value Error Error Error error error
indicates the overall quality of the
optimization procedure and is the mean symmetric euclidean distance
in pixels between the points and their corresponding transformed
points.
If the correspondence between the points has not been determined,
proj_match_points_distortion_ransac proj_match_points_distortion_ransac ProjMatchPointsDistortionRansac ProjMatchPointsDistortionRansac proj_match_points_distortion_ransac
or
proj_match_points_distortion_ransac_guided proj_match_points_distortion_ransac_guided ProjMatchPointsDistortionRansacGuided ProjMatchPointsDistortionRansacGuided proj_match_points_distortion_ransac_guided
should be used to
determine the correspondence as well as the transformation.
Attention
It should be noted that if a homogeneous transformation matrix is
used to transform images, regions, XLD contours, or any other data
that has been extracted from images, it is assumed that the origin
of the coordinate system of the homogeneous transformation matrix
lies in the upper left corner of a pixel. The image processing
operators that return point coordinates, however, assume a
coordinate system in which the origin lies in the center of a pixel.
Therefore, to obtain a consistent homogeneous transformation matrix,
0.5 must be added to the point coordinates before computing the
transformation.
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
Points1Row Points1Row Points1Row points1Row points_1row
(input_control) point.y-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Input points in image 1 (row coordinate).
Restriction:
length(Points1Row) >= 5
Points1Col Points1Col Points1Col points1Col points_1col
(input_control) point.x-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Input points in image 1 (column coordinate).
Restriction:
length(Points1Col) == length(Points1Row)
Points2Row Points2Row Points2Row points2Row points_2row
(input_control) point.y-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Input points in image 2 (row coordinate).
Restriction:
length(Points2Row) == length(Points1Row)
Points2Col Points2Col Points2Col points2Col points_2col
(input_control) point.x-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Input points in image 2 (column coordinate).
Restriction:
length(Points2Col) == length(Points1Row)
CovRR1 CovRR1 CovRR1 covRR1 cov_rr1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Row coordinate variance of the points in image 1.
Default:
[]
CovRC1 CovRC1 CovRC1 covRC1 cov_rc1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Covariance of the points in image 1.
Default:
[]
CovCC1 CovCC1 CovCC1 covCC1 cov_cc1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Column coordinate variance of the points in image 1.
Default:
[]
CovRR2 CovRR2 CovRR2 covRR2 cov_rr2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Row coordinate variance of the points in image 2.
Default:
[]
CovRC2 CovRC2 CovRC2 covRC2 cov_rc2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Covariance of the points in image 2.
Default:
[]
CovCC2 CovCC2 CovCC2 covCC2 cov_cc2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Column coordinate variance of the points in image 2.
Default:
[]
ImageWidth ImageWidth ImageWidth imageWidth image_width
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Width of the images from which the points were
extracted.
Restriction:
ImageWidth > 0
ImageHeight ImageHeight ImageHeight imageHeight image_height
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Height of the images from which the points were
extracted.
Restriction:
ImageHeight > 0
Method Method Method method method
(input_control) string →
HTuple str HTuple Htuple (string) (string ) (HString ) (char* )
Estimation algorithm.
Default:
'gold_standard'
"gold_standard"
"gold_standard"
"gold_standard"
"gold_standard"
List of values:
'gold_standard' "gold_standard" "gold_standard" "gold_standard" "gold_standard" , 'linear' "linear" "linear" "linear" "linear"
HomMat2D HomMat2D HomMat2D homMat2D hom_mat_2d
(output_control) hom_mat2d →
HHomMat2D , HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
Homogeneous projective transformation matrix.
Kappa Kappa Kappa kappa kappa
(output_control) real →
HTuple float HTuple Htuple (real) (double ) (double ) (double )
Computed radial distortion coefficient.
Error Error Error error error
(output_control) real →
HTuple float HTuple Htuple (real) (double ) (double ) (double )
Root-Mean-Square transformation error.
Possible Predecessors
proj_match_points_distortion_ransac proj_match_points_distortion_ransac ProjMatchPointsDistortionRansac ProjMatchPointsDistortionRansac proj_match_points_distortion_ransac
,
proj_match_points_distortion_ransac_guided proj_match_points_distortion_ransac_guided ProjMatchPointsDistortionRansacGuided ProjMatchPointsDistortionRansacGuided proj_match_points_distortion_ransac_guided
,
points_foerstner points_foerstner PointsFoerstner PointsFoerstner points_foerstner
,
points_harris points_harris PointsHarris PointsHarris points_harris
Possible Successors
change_radial_distortion_cam_par change_radial_distortion_cam_par ChangeRadialDistortionCamPar ChangeRadialDistortionCamPar change_radial_distortion_cam_par
,
change_radial_distortion_image change_radial_distortion_image ChangeRadialDistortionImage ChangeRadialDistortionImage change_radial_distortion_image
,
change_radial_distortion_points change_radial_distortion_points ChangeRadialDistortionPoints ChangeRadialDistortionPoints change_radial_distortion_points
,
projective_trans_image projective_trans_image ProjectiveTransImage ProjectiveTransImage projective_trans_image
,
projective_trans_image_size projective_trans_image_size ProjectiveTransImageSize ProjectiveTransImageSize projective_trans_image_size
,
projective_trans_region projective_trans_region ProjectiveTransRegion ProjectiveTransRegion projective_trans_region
,
projective_trans_contour_xld projective_trans_contour_xld ProjectiveTransContourXld ProjectiveTransContourXld projective_trans_contour_xld
,
projective_trans_point_2d projective_trans_point_2d ProjectiveTransPoint2d ProjectiveTransPoint2d projective_trans_point_2d
,
projective_trans_pixel projective_trans_pixel ProjectiveTransPixel ProjectiveTransPixel projective_trans_pixel
Alternatives
vector_to_proj_hom_mat2d vector_to_proj_hom_mat2d VectorToProjHomMat2d VectorToProjHomMat2d vector_to_proj_hom_mat2d
,
hom_vector_to_proj_hom_mat2d hom_vector_to_proj_hom_mat2d HomVectorToProjHomMat2d HomVectorToProjHomMat2d hom_vector_to_proj_hom_mat2d
See also
calibrate_cameras calibrate_cameras CalibrateCameras CalibrateCameras calibrate_cameras
References
Richard Hartley, Andrew Zisserman: “Multiple View Geometry in
Computer Vision”; Cambridge University Press, Cambridge; 2003.
Olivier Faugeras, Quang-Tuan Luong: “The Geometry of Multiple
Images: The Laws That Govern the Formation of Multiple Images of a
Scene and Some of Their Applications”; MIT Press, Cambridge, MA;
2001.
Module
Calibration