OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
鱼眼相机模型

详细说明

定义:设 P 为世界坐标系中坐标为 X 的 3D 点(存储在矩阵 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 \ \text{且} \ 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} \text{}\]

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

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

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

命名空间

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

枚举

enum  {
  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))
 使用鱼眼模型对二维点进行去畸变。
 

枚举类型文档 (Enumeration Type Documentation)

◆ 匿名枚举

匿名枚举

#include <opencv2/calib3d.hpp>

枚举值 (Enumerator)
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

函数文档 (Function Documentation)

◆ 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() 必须相等,且对于每个 i,imagePoints[i].size() 必须等于 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>

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

参数
undistorted对象点数组,1xN/Nx1 双通道(或 vector<Point2f> ),其中 N 是视图中的点数。
K相机内参矩阵 \(\cameramatrix{K}\)。
D鱼眼畸变系数的输入向量 \(\distcoeffsfisheye\)。
alpha倾斜系数。
distorted图像点的输出数组,1xN/Nx1 双通道,或 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 双通道(或 vector<Point2f> ),其中 N 是视图中的点数。
Kundistorted用作去畸变新相机矩阵的相机内参矩阵。
K相机内参矩阵 \(\cameramatrix{K}\)。
D鱼眼畸变系数的输入向量 \(\distcoeffsfisheye\)。
alpha倾斜系数。
distorted图像点的输出数组,1xN/Nx1 双通道,或 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)在最小焦距和最大焦距之间设置新焦距。平衡范围为 [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 三通道(或 vector<Point3f> ),其中 N 是视图中的点数。
imagePoints图像点的输出数组,2xN/Nx2 单通道或 1xN/Nx1 双通道,或 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 单通道或 1xN/Nx1 三通道,其中 N 是点数。这里也可以传递 vector<Point3d>。
imagePoints对应图像点的数组,Nx2 单通道或 1xN/Nx1 双通道,其中 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
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 单通道或 1xN/Nx1 三通道,其中 N 是点数。这里也可以传递 vector<Point3d>。
imagePoints对应图像点的数组,Nx2 单通道或 1xN/Nx1 双通道,其中 N 是点数。这里也可以传递 vector<Point2d>。
cameraMatrix输入相机内参矩阵 \(\cameramatrix{A}\)。
distCoeffs畸变系数的输入向量 (4x1/1x4)。
rvec输出旋转向量(参见 Rodrigues),与 tvec 一起将点从模型坐标系变换到相机坐标系。
tvec输出平移向量。
useExtrinsicGuess用于 SOLVEPNP_ITERATIVE 的参数。如果为 true (1),函数将使用提供的 rvec 和 tvec 值分别作为旋转和平移向量的初始近似值,并进一步优化它们。
iterationsCount迭代次数。
reprojectionErrorRANSAC 过程使用的内点阈值。该参数值是观测到的投影点与计算出的投影点之间允许的最大距离,以将其视为内点。
confidence算法产生有用结果的概率。
inliers包含 objectPoints 和 imagePoints 中内点索引的输出向量。
flags (标志)求解 PnP 问题的方法:参见 calib3d_solvePnP_flags。此函数使用不同的方法返回将 3D 点从对象坐标框架变换到相机坐标框架的旋转和平移向量
  • P3P 方法 (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,则必须初始化部分或全部矩阵分量。
D1包含 4 个元素的第一个相机鱼眼畸变系数输入/输出向量 \(\distcoeffsfisheye\)。
K2输入/输出第二个相机内参矩阵。该参数类似于 K1。
D2输入/输出第二个相机的镜头畸变系数。该参数类似于 D1。
imageSize图像的大小,仅用于初始化相机内参矩阵。
R第 1 个和第 2 个相机坐标系之间的输出旋转矩阵。
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。如果设置了该标志,函数会使每个相机的主点在校正后的视图中具有相同的像素坐标。如果未设置该标志,函数仍可能在水平或垂直方向上移动图像(取决于极线的方向)以最大化有用图像区域。
newImageSize校正后的新图像分辨率。应将相同的大小传递给 initUndistortRectifyMap(参见 OpenCV 示例目录中的 stereo_calib.cpp 示例)。传递 (0,0)(默认值)时,它被设置为原始 imageSize。将其设置为较大的值可以帮助你保留原始图像中的细节,尤其是当存在较大的径向畸变时。
平衡 (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(distorted, K, D[, undistorted[, R[, P[, criteria]]]]) -> undistorted

#include <opencv2/calib3d.hpp>

使用鱼眼模型对二维点进行去畸变。

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