Operator Reference

vector_to_proj_hom_mat2d_distortionT_vector_to_proj_hom_mat2d_distortionVectorToProjHomMat2dDistortionVectorToProjHomMat2dDistortionvector_to_proj_hom_mat2d_distortion (Operator)

vector_to_proj_hom_mat2d_distortionT_vector_to_proj_hom_mat2d_distortionVectorToProjHomMat2dDistortionVectorToProjHomMat2dDistortionvector_to_proj_hom_mat2d_distortion — Compute a projective transformation matrix and the radial distortion coefficient using given image point correspondences.

Signature

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)

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_distortionvector_to_proj_hom_mat2d_distortionVectorToProjHomMat2dDistortionVectorToProjHomMat2dDistortionvector_to_proj_hom_mat2d_distortion determines the projective transformation matrix HomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d and the radial distortion coefficient KappaKappaKappakappakappa from given point correspondences (Points1RowPoints1RowPoints1Rowpoints1Rowpoints_1row,Points1ColPoints1ColPoints1Colpoints1Colpoints_1col), (Points2RowPoints2RowPoints2Rowpoints2Rowpoints_2row,Points2ColPoints2ColPoints2Colpoints2Colpoints_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_distortionvector_to_proj_hom_mat2d_distortionVectorToProjHomMat2dDistortionVectorToProjHomMat2dDistortionvector_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 (Points1RowPoints1RowPoints1Rowpoints1Rowpoints_1row,Points1ColPoints1ColPoints1Colpoints1Colpoints_1col) and (Points2RowPoints2RowPoints2Rowpoints2Rowpoints_2row,Points2ColPoints2ColPoints2Colpoints2Colpoints_2col) are extracted have to be obtained with the same camera.

The returned KappaKappaKappakappakappa can be used to construct camera parameters that can be used to rectify images or points (see change_radial_distortion_cam_parchange_radial_distortion_cam_parChangeRadialDistortionCamParChangeRadialDistortionCamParchange_radial_distortion_cam_par, change_radial_distortion_imagechange_radial_distortion_imageChangeRadialDistortionImageChangeRadialDistortionImagechange_radial_distortion_image, and change_radial_distortion_pointschange_radial_distortion_pointsChangeRadialDistortionPointsChangeRadialDistortionPointschange_radial_distortion_points):

The minimum number of required point correspondences is five. vector_to_proj_hom_mat2d_distortionvector_to_proj_hom_mat2d_distortionVectorToProjHomMat2dDistortionVectorToProjHomMat2dDistortionvector_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 MethodMethodMethodmethodmethod. For MethodMethodMethodmethodmethod = '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 MethodMethodMethodmethodmethod = '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 MethodMethodMethodmethodmethod = '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 (CovRR1CovRR1CovRR1covRR1cov_rr1, CovRC1CovRC1CovRC1covRC1cov_rc1, CovCC1CovCC1CovCC1covCC1cov_cc1, CovRR2CovRR2CovRR2covRR2cov_rr2, CovRC2CovRC2CovRC2covRC2cov_rc2, CovCC2CovCC2CovCC2covCC2cov_cc2) can be incorporated into the computation. They can be provided, for example, by the operator points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerpoints_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 ErrorErrorErrorerrorerror 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_ransacproj_match_points_distortion_ransacProjMatchPointsDistortionRansacProjMatchPointsDistortionRansacproj_match_points_distortion_ransac or proj_match_points_distortion_ransac_guidedproj_match_points_distortion_ransac_guidedProjMatchPointsDistortionRansacGuidedProjMatchPointsDistortionRansacGuidedproj_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

Points1RowPoints1RowPoints1Rowpoints1Rowpoints_1row (input_control)  point.y-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Input points in image 1 (row coordinate).

Restriction: length(Points1Row) >= 5

Points1ColPoints1ColPoints1Colpoints1Colpoints_1col (input_control)  point.x-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Input points in image 1 (column coordinate).

Restriction: length(Points1Col) == length(Points1Row)

Points2RowPoints2RowPoints2Rowpoints2Rowpoints_2row (input_control)  point.y-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Input points in image 2 (row coordinate).

Restriction: length(Points2Row) == length(Points1Row)

Points2ColPoints2ColPoints2Colpoints2Colpoints_2col (input_control)  point.x-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Input points in image 2 (column coordinate).

Restriction: length(Points2Col) == length(Points1Row)

CovRR1CovRR1CovRR1covRR1cov_rr1 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Row coordinate variance of the points in image 1.

Default: []

CovRC1CovRC1CovRC1covRC1cov_rc1 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Covariance of the points in image 1.

Default: []

CovCC1CovCC1CovCC1covCC1cov_cc1 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Column coordinate variance of the points in image 1.

Default: []

CovRR2CovRR2CovRR2covRR2cov_rr2 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Row coordinate variance of the points in image 2.

Default: []

CovRC2CovRC2CovRC2covRC2cov_rc2 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Covariance of the points in image 2.

Default: []

CovCC2CovCC2CovCC2covCC2cov_cc2 (input_control)  number-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Column coordinate variance of the points in image 2.

Default: []

ImageWidthImageWidthImageWidthimageWidthimage_width (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Width of the images from which the points were extracted.

Restriction: ImageWidth > 0

ImageHeightImageHeightImageHeightimageHeightimage_height (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Height of the images from which the points were extracted.

Restriction: ImageHeight > 0

MethodMethodMethodmethodmethod (input_control)  string HTuplestrHTupleHtuple (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"

HomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (output_control)  hom_mat2d HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Homogeneous projective transformation matrix.

KappaKappaKappakappakappa (output_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Computed radial distortion coefficient.

ErrorErrorErrorerrorerror (output_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Root-Mean-Square transformation error.

Possible Predecessors

proj_match_points_distortion_ransacproj_match_points_distortion_ransacProjMatchPointsDistortionRansacProjMatchPointsDistortionRansacproj_match_points_distortion_ransac, proj_match_points_distortion_ransac_guidedproj_match_points_distortion_ransac_guidedProjMatchPointsDistortionRansacGuidedProjMatchPointsDistortionRansacGuidedproj_match_points_distortion_ransac_guided, points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerpoints_foerstner, points_harrispoints_harrisPointsHarrisPointsHarrispoints_harris

Possible Successors

change_radial_distortion_cam_parchange_radial_distortion_cam_parChangeRadialDistortionCamParChangeRadialDistortionCamParchange_radial_distortion_cam_par, change_radial_distortion_imagechange_radial_distortion_imageChangeRadialDistortionImageChangeRadialDistortionImagechange_radial_distortion_image, change_radial_distortion_pointschange_radial_distortion_pointsChangeRadialDistortionPointsChangeRadialDistortionPointschange_radial_distortion_points, projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageprojective_trans_image, projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeprojective_trans_image_size, projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionprojective_trans_region, projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldprojective_trans_contour_xld, projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dprojective_trans_point_2d, projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelprojective_trans_pixel

Alternatives

vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d, hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2d

See also

calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerascalibrate_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