OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项

详细描述

定义:设 P 是 3D 空间中的一个点,其在世界参考坐标系中的坐标为 X(存储在矩阵 X 中)。P 在相机参考坐标系中的坐标向量为

\[Xc = R X + T\]

其中 R 是与旋转向量 om 对应的旋转矩阵:R = rodrigues(om);将 Xc 的 3 个坐标称为 x, y 和 z

\[\begin{array}{l} x = Xc_1 \\ y = Xc_2 \\ z = Xc_3 \end{array} \]

P 的针孔投影坐标为 [a; b],其中

\[\begin{array}{l} a = x / z \ and \ b = y / z \\ r^2 = a^2 + b^2 \\ \theta = atan(r) \end{array} \]

鱼眼畸变

\[\theta_d = \theta (1 + k_1 \theta^2 + k_2 \theta^4 + k_3 \theta^6 + k_4 \theta^8)\]

畸变点坐标为 [x'; y'],其中

\[\begin{array}{l} x' = (\theta_d / r) a \\ y' = (\theta_d / r) b \end{array} \]

最后,转换为像素坐标:最终像素坐标向量 [u; v],其中

\[\begin{array}{l} u = f_x (x' + \alpha y') + c_x \\ v = f_y y' + c_y \end{array} \]

总结:通用相机模型 [145],带透视投影且无畸变校正

命名空间

命名空间  cv::fisheye
 此命名空间中的方法使用所谓的鱼眼相机模型。
 

枚举

枚举  {
  cv::fisheye::CALIB_USE_INTRINSIC_GUESS = 1 << 0 ,
  cv::fisheye::CALIB_RECOMPUTE_EXTRINSIC = 1 << 1 ,
  cv::fisheye::CALIB_CHECK_COND = 1 << 2 ,
  cv::fisheye::CALIB_FIX_SKEW = 1 << 3 ,
  cv::fisheye::CALIB_FIX_K1 = 1 << 4 ,
  cv::fisheye::CALIB_FIX_K2 = 1 << 5 ,
  cv::fisheye::CALIB_FIX_K3 = 1 << 6 ,
  cv::fisheye::CALIB_FIX_K4 = 1 << 7 ,
  cv::fisheye::CALIB_FIX_INTRINSIC = 1 << 8 ,
  cv::fisheye::CALIB_FIX_PRINCIPAL_POINT = 1 << 9 ,
  cv::fisheye::CALIB_ZERO_DISPARITY = 1 << 10 ,
  cv::fisheye::CALIB_FIX_FOCAL_LENGTH = 1 << 11
}
 

函数

double cv::fisheye::calibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, const Size &image_size, InputOutputArray K, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 执行相机标定。
 
void cv::fisheye::distortPoints (InputArray undistorted, OutputArray distorted, InputArray K, InputArray D, double alpha=0)
 使用鱼眼模型扭曲 2D 点。
 
void cv::fisheye::distortPoints (InputArray undistorted, OutputArray distorted, InputArray Kundistorted, InputArray K, InputArray D, double alpha=0)
 
void cv::fisheye::estimateNewCameraMatrixForUndistortRectify (InputArray K, InputArray D, const Size &image_size, InputArray R, OutputArray P, double balance=0.0, const Size &new_size=Size(), double fov_scale=1.0)
 估计用于去畸变或校正的新相机内参矩阵。
 
void cv::fisheye::initUndistortRectifyMap (InputArray K, InputArray D, InputArray R, InputArray P, const cv::Size &size, int m1type, OutputArray map1, OutputArray map2)
 计算用于通过 remap 进行图像变换的去畸变和校正映射。如果 D 为空,则使用零畸变;如果 R 或 P 为空,则使用单位矩阵。
 
void cv::fisheye::projectPoints (InputArray objectPoints, OutputArray imagePoints, const Affine3d &affine, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
 使用鱼眼模型投影点。
 
void cv::fisheye::projectPoints (InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
 
bool cv::fisheye::solvePnP (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags=SOLVEPNP_ITERATIVE, TermCriteria criteria=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8))
 针对鱼眼相机模型,从 3D-2D 点对应中查找对象姿态。
 
bool cv::fisheye::solvePnPRansac (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int iterationsCount=100, float reprojectionError=8.0, double confidence=0.99, OutputArray inliers=noArray(), int flags=SOLVEPNP_ITERATIVE, TermCriteria criteria=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8))
 使用 RANSAC 方案为鱼眼相机模型从 3D-2D 点对应中查找对象姿态。
 
double cv::fisheye::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize, OutputArray R, OutputArray T, int flags=fisheye::CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
 
double cv::fisheye::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize, OutputArray R, OutputArray T, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=fisheye::CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 执行立体标定。
 
void cv::fisheye::stereoRectify (InputArray K1, InputArray D1, InputArray K2, InputArray D2, const Size &imageSize, InputArray R, InputArray tvec, OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q, int flags, const Size &newImageSize=Size(), double balance=0.0, double fov_scale=1.0)
 鱼眼相机模型的立体校正。
 
void cv::fisheye::undistortImage (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray Knew=cv::noArray(), const Size &new_size=Size())
 转换图像以补偿鱼眼镜头畸变。
 
void cv::fisheye::undistortPoints (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray R=noArray(), InputArray P=noArray(), TermCriteria criteria=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8))
 使用鱼眼模型对 2D 点进行去畸变。
 

枚举类型文档

◆ 匿名枚举

匿名枚举

#include <opencv2/calib3d.hpp>

枚举器
CALIB_USE_INTRINSIC_GUESS 
Python: cv.fisheye.CALIB_USE_INTRINSIC_GUESS
CALIB_RECOMPUTE_EXTRINSIC 
Python: cv.fisheye.CALIB_RECOMPUTE_EXTRINSIC
CALIB_CHECK_COND 
Python: cv.fisheye.CALIB_CHECK_COND
CALIB_FIX_SKEW 
Python: cv.fisheye.CALIB_FIX_SKEW
CALIB_FIX_K1 
Python: cv.fisheye.CALIB_FIX_K1
CALIB_FIX_K2 
Python: cv.fisheye.CALIB_FIX_K2
CALIB_FIX_K3 
Python: cv.fisheye.CALIB_FIX_K3
CALIB_FIX_K4 
Python: cv.fisheye.CALIB_FIX_K4
CALIB_FIX_INTRINSIC 
Python: cv.fisheye.CALIB_FIX_INTRINSIC
CALIB_FIX_PRINCIPAL_POINT 
Python: cv.fisheye.CALIB_FIX_PRINCIPAL_POINT
CALIB_ZERO_DISPARITY 
Python: cv.fisheye.CALIB_ZERO_DISPARITY
CALIB_FIX_FOCAL_LENGTH 
Python: cv.fisheye.CALIB_FIX_FOCAL_LENGTH

函数文档

◆ calibrate()

double cv::fisheye::calibrate ( InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints,
const Size & image_size,
InputOutputArray 输入的相机内参矩阵。,
InputOutputArray D,
OutputArrayOfArrays rvecs,
OutputArrayOfArrays tvecs,
int flags = 0,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON) )
Python
cv.fisheye.calibrate(objectPoints, imagePoints, image_size, K, D[, rvecs[, tvecs[, flags[, criteria]]]]) -> retval, K, D, rvecs, tvecs

#include <opencv2/calib3d.hpp>

执行相机标定。

参数
objectPoints校准模式点在校准模式坐标空间中的向量的向量。
imagePoints校准模式点投影的向量的向量。imagePoints.size() 和 objectPoints.size() 以及 imagePoints[i].size() 必须等于 objectPoints[i].size()(对于每个 i)。
image_size仅用于初始化相机内参矩阵的图像尺寸。
输入的相机内参矩阵。输出 3x3 浮点相机内参矩阵 \(\cameramatrix{A}\)。如果指定了 fisheye::CALIB_USE_INTRINSIC_GUESS,则在调用函数之前必须初始化 fx、fy、cx、cy 中的部分或全部。
D畸变系数输出向量 \(\distcoeffsfisheye\)。
rvecs为每个模式视图估计的旋转向量(参见 Rodrigues)的输出向量。也就是说,每个第 k 个旋转向量与对应的第 k 个平移向量(参见下一个输出参数描述)将校准模式从模型坐标空间(其中指定了对象点)带到世界坐标空间,即第 k 个模式视图(k=0.. M-1)中校准模式的真实位置。
tvecs为每个模式视图估计的平移向量输出向量。
flags可能为零或以下值的组合的不同标志
criteria迭代优化算法的终止条件。
此函数的调用图如下

◆ distortPoints() [1/2]

void cv::fisheye::distortPoints ( InputArray undistorted,
OutputArray distorted,
InputArray 输入的相机内参矩阵。,
InputArray D,
double alpha = 0 )
Python
cv.fisheye.distortPoints(undistorted, K, D[, distorted[, alpha]]) -> distorted
cv.fisheye.distortPoints(undistorted, Kundistorted, K, D[, distorted[, alpha]]) -> distorted

#include <opencv2/calib3d.hpp>

使用鱼眼模型扭曲 2D 点。

参数
undistorted对象点数组,1xN/Nx1 2 通道(或 vector<Point2f>),其中 N 是视图中的点数。
输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
D畸变系数输入向量 \(\distcoeffsfisheye\)。
alpha倾斜系数。
distorted图像点输出数组,1xN/Nx1 2 通道,或 vector<Point2f>。

请注意,该函数假定未畸变点的相机内参矩阵是单位矩阵。这意味着如果您想畸变图像点,您必须将它们与 \(K^{-1}\) 相乘或使用另一个函数重载。

此函数的调用图如下

◆ distortPoints() [2/2]

void cv::fisheye::distortPoints ( InputArray undistorted,
OutputArray distorted,
InputArray Kundistorted,
InputArray 输入的相机内参矩阵。,
InputArray D,
double alpha = 0 )
Python
cv.fisheye.distortPoints(undistorted, K, D[, distorted[, alpha]]) -> distorted
cv.fisheye.distortPoints(undistorted, Kundistorted, K, D[, distorted[, alpha]]) -> distorted

#include <opencv2/calib3d.hpp>

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。distortPoints 函数的重载,用于处理未畸变点是通过非单位相机矩阵(例如 estimateNewCameraMatrixForUndistortRectify 的输出)获得的。

参数
undistorted对象点数组,1xN/Nx1 2 通道(或 vector<Point2f>),其中 N 是视图中的点数。
Kundistorted用作去畸变新相机矩阵的相机内参矩阵。
输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
D畸变系数输入向量 \(\distcoeffsfisheye\)。
alpha倾斜系数。
distorted图像点输出数组,1xN/Nx1 2 通道,或 vector<Point2f>。
另请参见
estimateNewCameraMatrixForUndistortRectify
此函数的调用图如下

◆ estimateNewCameraMatrixForUndistortRectify()

void cv::fisheye::estimateNewCameraMatrixForUndistortRectify ( InputArray 输入的相机内参矩阵。,
InputArray D,
const Size & image_size,
InputArray R,
OutputArray P,
double balance = 0.0,
const Size & new_size = Size(),
double fov_scale = 1.0 )
Python
cv.fisheye.estimateNewCameraMatrixForUndistortRectify(K, D, image_size, R[, P[, balance[, new_size[, fov_scale]]]]) -> P

#include <opencv2/calib3d.hpp>

估计用于去畸变或校正的新相机内参矩阵。

参数
输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
image_size图像尺寸
D畸变系数输入向量 \(\distcoeffsfisheye\)。
R对象空间中的校正变换:3x3 1 通道,或向量:3x1/1x3 1 通道或 1x1 3 通道
P新相机内参矩阵 (3x3) 或新投影矩阵 (3x4)
平衡将新焦距设置在最小焦距和最大焦距之间。平衡范围在 [0, 1]。
new_size新尺寸
fov_scale新焦距的除数。
此函数的调用图如下

◆ initUndistortRectifyMap()

void cv::fisheye::initUndistortRectifyMap ( InputArray 输入的相机内参矩阵。,
InputArray D,
InputArray R,
InputArray P,
const cv::Size & size,
int m1type,
OutputArray map1,
OutputArray map2 )
Python
cv.fisheye.initUndistortRectifyMap(K, D, R, P, size, m1type[, map1[, map2]]) -> map1, map2

#include <opencv2/calib3d.hpp>

计算用于通过 remap 进行图像变换的去畸变和校正映射。如果 D 为空,则使用零畸变;如果 R 或 P 为空,则使用单位矩阵。

参数
输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
D畸变系数输入向量 \(\distcoeffsfisheye\)。
R对象空间中的校正变换:3x3 1 通道,或向量:3x1/1x3 1 通道或 1x1 3 通道
P新相机内参矩阵 (3x3) 或新投影矩阵 (3x4)
size去畸变图像尺寸。
m1type第一个输出映射的类型,可以是 CV_32FC1 或 CV_16SC2。有关详细信息,请参见 convertMaps
map1第一个输出映射。
map2第二个输出映射。

◆ projectPoints() [1/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
const Affine3d & affine,
InputArray 输入的相机内参矩阵。,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray() )
Python
cv.fisheye.projectPoints(objectPoints, rvec, tvec, K, D[, imagePoints[, alpha[, jacobian]]]) -> imagePoints, jacobian

#include <opencv2/calib3d.hpp>

使用鱼眼模型投影点。

参数
objectPoints对象点数组,1xN/Nx1 3 通道(或 vector<Point3f>),其中 N 是视图中的点数。
imagePoints图像点输出数组,2xN/Nx2 1 通道或 1xN/Nx1 2 通道,或 vector<Point2f>。
affine
输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
D畸变系数输入向量 \(\distcoeffsfisheye\)。
alpha倾斜系数。
jacobian可选输出 2Nx15 雅可比矩阵,包含图像点相对于焦距分量、主点坐标、畸变系数、旋转向量、平移向量和倾斜的导数。在旧接口中,雅可比矩阵的不同分量通过不同的输出参数返回。

该函数根据相机的内参和外参,计算 3D 点在图像平面上的投影。可选地,该函数计算雅可比矩阵——图像点坐标(作为所有输入参数的函数)相对于特定参数(内参和/或外参)的偏导数矩阵。

◆ projectPoints() [2/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray 输入的相机内参矩阵。,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray() )
Python
cv.fisheye.projectPoints(objectPoints, rvec, tvec, K, D[, imagePoints[, alpha[, jacobian]]]) -> imagePoints, jacobian

#include <opencv2/calib3d.hpp>

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。

◆ solvePnP()

bool cv::fisheye::solvePnP ( InputArray objectPoints,
InputArray imagePoints,
InputArray cameraMatrix,
InputArray distCoeffs,
OutputArray rvec,
OutputArray tvec,
bool useExtrinsicGuess = false,
int flags = SOLVEPNP_ITERATIVE,
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8) )
Python
cv.fisheye.solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, flags[, criteria]]]]]) -> retval, rvec, tvec

#include <opencv2/calib3d.hpp>

针对鱼眼相机模型,从 3D-2D 点对应中查找对象姿态。

参数
objectPoints对象坐标空间中的对象点数组,Nx3 1 通道或 1xN/Nx1 3 通道,其中 N 是点数。这里也可以传入 vector<Point3d>。
imagePoints对应的图像点数组,Nx2 1 通道或 1xN/Nx1 2 通道,其中 N 是点数。这里也可以传入 vector<Point2d>。
cameraMatrixInput camera intrinsic matrix \(\cameramatrix{A}\) .
distCoeffs畸变系数输入向量 (4x1/1x4)。
rvec输出旋转向量(参见 Rodrigues),与 tvec 一起将点从模型坐标系转换为相机坐标系。
tvecOutput translation vector.
useExtrinsicGuess用于 SOLVEPNP_ITERATIVE 的参数。如果为 true (1),函数将提供的 rvec 和 tvec 值用作旋转和平移向量的初始近似值,并进一步优化它们。
flags解决 PnP 问题的方法:参见 calib3d_solvePnP_flags
criteria内部 undistortPoints 调用的终止准则。该函数内部通过 undistortPoints 对点进行去畸变,并调用 cv::solvePnP,因此输入非常相似。有关 Perspective-n-Points 的更多信息在 Perspective-n-Point (PnP) 位姿计算 中描述。

◆ solvePnPRansac()

bool cv::fisheye::solvePnPRansac ( InputArray objectPoints,
InputArray imagePoints,
InputArray cameraMatrix,
InputArray distCoeffs,
OutputArray rvec,
OutputArray tvec,
bool useExtrinsicGuess = false,
int iterationsCount = 100,
float reprojectionError = 8.0,
double confidence = 0.99,
OutputArray inliers = noArray(),
int flags = SOLVEPNP_ITERATIVE,
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8) )
Python
cv.fisheye.solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, confidence[, inliers[, flags[, criteria]]]]]]]]]) -> retval, rvec, tvec, inliers

#include <opencv2/calib3d.hpp>

使用 RANSAC 方案为鱼眼相机模型从 3D-2D 点对应中查找对象姿态。

参数
objectPoints对象坐标空间中的对象点数组,Nx3 1 通道或 1xN/Nx1 3 通道,其中 N 是点数。这里也可以传入 vector<Point3d>。
imagePoints对应的图像点数组,Nx2 1 通道或 1xN/Nx1 2 通道,其中 N 是点数。这里也可以传入 vector<Point2d>。
cameraMatrixInput camera intrinsic matrix \(\cameramatrix{A}\) .
distCoeffs畸变系数输入向量 (4x1/1x4)。
rvec输出旋转向量(参见 Rodrigues),与 tvec 一起将点从模型坐标系转换为相机坐标系。
tvecOutput translation vector.
useExtrinsicGuess用于 SOLVEPNP_ITERATIVE 的参数。如果为 true (1),函数将提供的 rvec 和 tvec 值用作旋转和平移向量的初始近似值,并进一步优化它们。
iterationsCountNumber of iterations.
reprojectionErrorRANSAC 过程使用的内点阈值。参数值是观测点和计算点投影之间的最大允许距离,以将其视为内点。
confidenceThe probability that the algorithm produces a useful result.
inliers输出向量,包含 objectPoints 和 imagePoints 中的内点索引。
flags解决 PnP 问题的方法:参见 SOLVEPNP_P3P, SOLVEPNP_AP3P):需要 4 个输入点才能返回唯一解。
  • SOLVEPNP_IPPE 输入点必须 >= 4,并且对象点必须共面。
  • SOLVEPNP_IPPE_SQUARE 适用于标记姿态估计的特殊情况。输入点数必须为 4。对象点必须按以下顺序定义
  • 点 0: [-squareLength / 2, squareLength / 2, 0]
  • 点 1: [ squareLength / 2, squareLength / 2, 0]
  • 点 2: [ squareLength / 2, -squareLength / 2, 0]
  • 点 3: [-squareLength / 2, -squareLength / 2, 0]
  • 对于所有其他标志,输入点数必须 >= 4,并且对象点可以是任何配置。
  • criteria内部 undistortPoints 调用的终止准则。该函数内部通过 undistortPoints 对点进行去畸变,并调用 cv::solvePnP,因此输入非常相似。有关 Perspective-n-Points 的更多信息在 Perspective-n-Point (PnP) 位姿计算 中描述。

    ◆ stereoCalibrate() [1/2]

    double cv::fisheye::stereoCalibrate ( InputArrayOfArrays objectPoints,
    InputArrayOfArrays imagePoints1,
    InputArrayOfArrays imagePoints2,
    InputOutputArray K1,
    InputOutputArray D1,
    InputOutputArray K2,
    InputOutputArray D2,
    Size imageSize,
    OutputArray R,
    OutputArray T,
    int flags = fisheye::CALIB_FIX_INTRINSIC,
    TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON) )
    Python
    cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, rvecs[, tvecs[, flags[, criteria]]]]]]) -> retval, K1, D1, K2, D2, R, T, rvecs, tvecs
    cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, flags[, criteria]]]]) -> retval, K1, D1, K2, D2, R, T

    #include <opencv2/calib3d.hpp>

    这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。

    ◆ stereoCalibrate() [2/2]

    double cv::fisheye::stereoCalibrate ( InputArrayOfArrays objectPoints,
    InputArrayOfArrays imagePoints1,
    InputArrayOfArrays imagePoints2,
    InputOutputArray K1,
    InputOutputArray D1,
    InputOutputArray K2,
    InputOutputArray D2,
    Size imageSize,
    OutputArray R,
    OutputArray T,
    OutputArrayOfArrays rvecs,
    OutputArrayOfArrays tvecs,
    int flags = fisheye::CALIB_FIX_INTRINSIC,
    TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON) )
    Python
    cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, rvecs[, tvecs[, flags[, criteria]]]]]]) -> retval, K1, D1, K2, D2, R, T, rvecs, tvecs
    cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, flags[, criteria]]]]) -> retval, K1, D1, K2, D2, R, T

    #include <opencv2/calib3d.hpp>

    执行立体标定。

    参数
    objectPoints校准模式点向量的向量。
    imagePoints1由第一个相机观测到的校准模式点投影向量的向量。
    imagePoints2由第二个相机观测到的校准模式点投影向量的向量。
    K1输入/输出第一个相机内参矩阵:\(\vecthreethree{f_x^{(j)}}{0}{c_x^{(j)}}{0}{f_y^{(j)}}{c_y^{(j)}}{0}{0}{1}\) ,\(j = 0,\, 1\) 。如果指定了 fisheye::CALIB_USE_INTRINSIC_GUESSfisheye::CALIB_FIX_INTRINSIC,则必须初始化矩阵的部分或全部组件。
    D14 个元素的畸变系数输入/输出向量 \(\distcoeffsfisheye\)。
    K2输入/输出第二个相机内参矩阵。参数类似于 K1。
    D2第二个相机的输入/输出镜头畸变系数。参数类似于 D1。
    imageSize仅用于初始化相机内参矩阵的图像尺寸。
    R第一和第二个相机坐标系之间的输出旋转矩阵。
    T相机坐标系之间的输出平移向量。
    rvecs为立体对的第一个相机的坐标系中估计的每个模式视图的旋转向量(Rodrigues)的输出向量(例如 std::vector<cv::Mat>)。更详细地说,每个第 i 个旋转向量与对应的第 i 个平移向量(参见前一个输出参数 rvecs 的描述)将校准模式从对象坐标空间(其中指定了对象点)带到立体对的第一个相机的相机坐标空间。用更专业的术语来说,第 i 个旋转和平移向量的元组执行从对象坐标空间到立体对的第一个相机的相机坐标空间的基变换。
    tvecs为每个模式视图估计的平移向量输出向量,参见前一个输出参数 (rvecs) 的参数描述。
    flags可能为零或以下值的组合的不同标志
    criteria迭代优化算法的终止条件。

    ◆ stereoRectify()

    void cv::fisheye::stereoRectify ( InputArray K1,
    InputArray D1,
    InputArray K2,
    InputArray D2,
    const Size & imageSize,
    InputArray R,
    InputArray tvec,
    OutputArray 一个可能的旋转矩阵。,
    OutputArray 另一个可能的旋转矩阵。,
    OutputArray P1,
    OutputArray P2,
    OutputArray Q,
    int flags,
    const Size & newImageSize = Size(),
    double balance = 0.0,
    double fov_scale = 1.0 )
    Python
    cv.fisheye.stereoRectify(K1, D1, K2, D2, imageSize, R, tvec, flags[, R1[, R2[, P1[, P2[, Q[, newImageSize[, balance[, fov_scale]]]]]]]]) -> R1, R2, P1, P2, Q

    #include <opencv2/calib3d.hpp>

    鱼眼相机模型的立体校正。

    参数
    K1第一个相机内参矩阵。
    D1第一个相机畸变参数。
    K2第二个相机内参矩阵。
    D2第二个相机畸变参数。
    imageSize用于立体校准的图像大小。
    R第一和第二个相机坐标系之间的旋转矩阵。
    tvec相机坐标系之间的平移向量。
    一个可能的旋转矩阵。第一个相机的新的(校正后的)坐标系中的 3x3 校正变换(旋转矩阵)。
    另一个可能的旋转矩阵。第二个相机的新的(校正后的)坐标系中的 3x3 校正变换(旋转矩阵)。
    P1第一个相机的新的(校正后的)坐标系中的 3x4 投影矩阵。
    P2第二个相机的新的(校正后的)坐标系中的 3x4 投影矩阵。
    Q输出 \(4 \times 4\) 视差到深度映射矩阵(参见 reprojectImageTo3D)。
    flags操作标志,可以是零或 fisheye::CALIB_ZERO_DISPARITY 。如果设置了该标志,函数将使每个相机的主点在校正后的视图中具有相同的像素坐标。如果未设置该标志,函数仍可能在水平或垂直方向(取决于对极线的方向)移动图像以最大化可用图像区域。
    newImageSize校正后的新图像分辨率。应将相同的尺寸传递给 initUndistortRectifyMap(参见 OpenCV 示例目录中的 stereo_calib.cpp 示例)。当传入 (0,0)(默认值)时,它被设置为原始 imageSize。将其设置为更大的值可以帮助您保留原始图像中的细节,特别是当存在大的径向畸变时。
    平衡将新焦距设置在最小焦距和最大焦距之间。平衡范围在 [0, 1]。
    fov_scale新焦距的除数。

    ◆ undistortImage()

    void cv::fisheye::undistortImage ( InputArray distorted,
    OutputArray undistorted,
    InputArray 输入的相机内参矩阵。,
    InputArray D,
    InputArray Knew = cv::noArray(),
    const Size & new_size = Size() )
    Python
    cv.fisheye.undistortImage(distorted, K, D[, undistorted[, Knew[, new_size]]]) -> undistorted

    #include <opencv2/calib3d.hpp>

    转换图像以补偿鱼眼镜头畸变。

    参数
    distorted带有鱼眼镜头畸变的图像。
    undistorted具有补偿鱼眼镜头畸变的输出图像。
    输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
    D畸变系数输入向量 \(\distcoeffsfisheye\)。
    Knew畸变图像的相机内参矩阵。默认情况下,它是单位矩阵,但您可以通过使用不同的矩阵来额外缩放和移动结果。
    new_size新尺寸

    该函数变换图像以补偿径向和切向镜头畸变。

    该函数只是 fisheye::initUndistortRectifyMap(R 为单位矩阵)和 remap(使用双线性插值)的组合。有关所执行变换的详细信息,请参见前一个函数。

    下面是 undistortImage 的结果。

    • a) 透视相机模型去畸变结果(畸变所有可能系数 (k_1, k_2, k_3, k_4, k_5, k_6) 在校准下已优化)
      • b) 鱼眼相机模型 fisheye::undistortImage 结果(鱼眼畸变所有可能系数 (k_1, k_2, k_3, k_4) 在校准下已优化)
      • c) 原始图像是用鱼眼镜头拍摄的

    图片 a) 和 b) 几乎相同。但如果我们考虑图像中远离中心的点,我们会注意到图像 a) 中的这些点是畸变的。

    image
    此函数的调用图如下

    ◆ undistortPoints()

    void cv::fisheye::undistortPoints ( InputArray distorted,
    OutputArray undistorted,
    InputArray 输入的相机内参矩阵。,
    InputArray D,
    InputArray R = noArray(),
    InputArray P = noArray(),
    TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8) )
    Python
    cv.fisheye.undistortPoints(distorted, K, D[, undistorted[, R[, P[, criteria]]]]) -> undistorted

    #include <opencv2/calib3d.hpp>

    使用鱼眼模型对 2D 点进行去畸变。

    参数
    distorted对象点数组,1xN/Nx1 2 通道(或 vector<Point2f>),其中 N 是视图中的点数。
    输入的相机内参矩阵。相机内参矩阵 \(\cameramatrix{K}\)。
    D畸变系数输入向量 \(\distcoeffsfisheye\)。
    R对象空间中的校正变换:3x3 1 通道,或向量:3x1/1x3 1 通道或 1x1 3 通道
    P新相机内参矩阵 (3x3) 或新投影矩阵 (3x4)
    criteria终止准则
    undistorted图像点输出数组,1xN/Nx1 2 通道,或 vector<Point2f>。