OpenCV 4.11.0
开源计算机视觉
加载中...
搜索中...
无匹配项
鱼眼相机模型

详细描述

定义:设P为世界参考系中坐标为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} \]

总结:具有透视投影和无畸变校正的通用相机模型 [142]

命名空间

命名空间  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)
 使用鱼眼模型扭曲二维点。
 
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点对应关系查找物体姿态。
 
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 K,
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() 必须对于每个 i 等于 objectPoints[i].size()。
image_size仅用于初始化相机内参矩阵的图像大小。
K输出 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 K,
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>

使用鱼眼模型扭曲二维点。

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

◆ estimateNewCameraMatrixForUndistortRectify()

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 )
Python
cv.fisheye.estimateNewCameraMatrixForUndistortRectify(K, D, image_size, R[, P[, balance[, new_size[, fov_scale]]]]) -> P

#include <opencv2/calib3d.hpp>

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

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

◆ initUndistortRectifyMap()

void cv::fisheye::initUndistortRectifyMap ( InputArray K,
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为空,则使用单位矩阵。

参数
K相机内参矩阵 \(\cameramatrix{K}\)。
D输入失真系数向量 \(\distcoeffsfisheye\)。
R物体空间中的校正变换:3x3 单通道,或向量:3x1/1x3 单通道或 1x1 三通道
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 K,
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
K相机内参矩阵 \(\cameramatrix{K}\)。
D输入失真系数向量 \(\distcoeffsfisheye\)。
alpha倾斜系数。
jacobian可选输出 2Nx15 雅可比矩阵,表示图像点相对于焦距分量、主点坐标、畸变系数、旋转向量、平移向量和倾斜度的偏导数。在旧接口中,雅可比矩阵的不同分量通过不同的输出参数返回。

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

◆ projectPoints() [2/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray K,
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>。
cameraMatrix输入相机内参矩阵 \(\cameramatrix{A}\) 。
distCoeffs输入畸变系数向量 (4x1/1x4)。
rvec输出旋转向量(参见 Rodrigues),它与 tvec 一起将点从模型坐标系带到相机坐标系。
tvec输出平移向量。
useExtrinsicGuess用于 SOLVEPNP_ITERATIVE 的参数。如果为 true (1),则该函数使用提供的 rvec 和 tvec 值作为旋转和平移向量的初始近似值,并进一步优化它们。
flags求解 PnP 问题的方法:参见 calib3d_solvePnP_flags 此函数返回旋转和平移向量,这些向量使用不同的方法将以对象坐标系表示的 3D 点转换为相机坐标系。
  • P3P 方法(SOLVEPNP_P3PSOLVEPNP_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,因此输入非常相似。有关透视-n-点的更多信息,请参阅 Perspective-n-Point (PnP) pose computation 以了解更多信息。

◆ 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中的任何一个,则必须初始化矩阵的某些或所有组件。
D1输入/输出包含4个元素的畸变系数向量\(\distcoeffsfisheye\)。
K2输入/输出第二个相机内参矩阵。该参数与K1类似。
D2输入/输出第二个相机的镜头畸变系数。该参数与D1类似。
imageSize仅用于初始化相机内参矩阵的图像大小。
R输出第一个和第二个相机坐标系之间的旋转矩阵。
T输出两个相机坐标系之间的平移向量。
rvecs输出旋转向量向量 ( Rodrigues ),针对立体图像对第一个相机坐标系中的每个图案视图进行估计 (例如,std::vector<cv::Mat>)。更详细地说,每个第i个旋转向量与其对应的第i个平移向量(参见下一个输出参数描述)一起,将校准图案从对象坐标空间(在其中指定对象点)转换到立体图像对第一个相机的相机坐标空间。用更专业的术语来说,第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 R1,
OutputArray R2,
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两个相机坐标系之间的平移向量。
R1输出第一个相机的3x3校正变换(旋转矩阵)。
R2输出第二个相机的3x3校正变换(旋转矩阵)。
P1输出第一个相机在新(校正)坐标系中的3x4投影矩阵。
P2输出第二个相机在新(校正)坐标系中的3x4投影矩阵。
Q输出\(4 \times 4\)视差到深度的映射矩阵(参见 reprojectImageTo3D )。
flags操作标志,可以为零或fisheye::CALIB_ZERO_DISPARITY。如果设置了该标志,则该函数使每个相机的principal points在校正视图中具有相同的像素坐标。如果没有设置该标志,则该函数仍可能沿水平或垂直方向(取决于极线的方向)移动图像,以最大化有用的图像区域。
newImageSize校正后新的图像分辨率。应将相同的大小传递给initUndistortRectifyMap(参见OpenCV示例目录中的stereo_calib.cpp示例)。当传递(0,0)(默认值)时,它被设置为原始imageSize。将其设置为较大的值可以帮助您保留原始图像中的细节,尤其是在存在较大径向畸变的情况下。
balance设置新的焦距,范围在最小焦距和最大焦距之间。Balance 的范围为 [0, 1]。
fov_scale新焦距的除数。

◆ undistortImage()

void cv::fisheye::undistortImage ( InputArray distorted,
OutputArray undistorted,
InputArray K,
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补偿了鱼眼镜头畸变的输出图像。
K相机内参矩阵 \(\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)中这些点是畸变的。

图像
以下是此函数的调用图

◆ undistortPoints()

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) )
Python
cv.fisheye.undistortPoints(畸变点, K, D[, 未畸变点[, R[, P[, 终止准则]]]]) -> undistorted

#include <opencv2/calib3d.hpp>

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

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