OpenCV  4.10.0
开源计算机视觉
加载中...
搜索中...
无匹配
命名空间 | 枚举 | 函数
鱼眼相机模型

详细描述

定义:设P是3D世界坐标系中(存储在矩阵X中)的坐标为X的点,P在相机坐标系中的坐标向量为

\[Xc = R X + T\]

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

\[x = Xc_1 \\ y = Xc_2 \\ z = Xc_3\]

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

\[a = x / z \ and \ b = y / z \\ r^2 = a^2 + b^2 \\ \theta = atan(r)\]

鱼眼畸变

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

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

\[x' = (\theta_d / r) a \\ y' = (\theta_d / r) b \]

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

\[u = f_x (x' + \alpha y') + c_x \\ v = f_y y' + c_y\]

总结:带透视投影且不带畸变校正的通用相机模型[143]

命名空间

namespace  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::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=asfdsfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfs
 从三维到二维点对应关系中为鱼眼相机模型找到物体姿态。
 
double __fisheye.html>#gadbb3a6CA6429528ef302c784df47949bcv::fisheye::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize, OutputArray R, OutputArray T, int flags=#ggaad48724b64b04d6fcbc5cc3f97f1cb8dag4ade803e9503dc58975b2156836e724fisheye::CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT
+TermCriteria::EPS, 100, DBL_EPSILON))
 这是一个方便的重载成员函数。它只与上述函数在接受参数方面有所不同。
 
double #gae36bd43c34a0cb1cb543da00902a821ecv::fisheye::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, Size imageSize, OutputArray R, OutputArray T, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=#ggaad48724b64b04d6fcbc5cc3f97f1cb8dag4ade803e9503dc58975b2156836e724fisheye::CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT
+TermCriteria::EPS, 100, DBL_EPSILON))
 执行立体校准。
 
void cv::fisheye::stereoRectify (输入数组 K1,输入数组 D1,输入数组 K2,输入数组 D2,const Size& image_size,输入数组 R,输入数组 tvec,输出数组 R1,输出数组 R2,输出数组 P1,输出数组 P2,输出数组 Q,int flags,const Size& newImageSize = Size(),double balance=0.0,double fov_scale=1.0)
 对鱼眼相机模型进行立体校正。
 
void cv::fisheye::undistortImage (输入数组 distorted,输出数组 undistorted,输入数组 K,输入数组 D,inputArray Knew = cv::noArray(),const Size& new_size = Size())
 将图像变换以校正鱼眼镜头失真。
 
void cv::fisheye::undistortPoints (输入数组 distorted,输出数组 undistorted,输入数组 K,输入数组 D,输入数组 R = cv::noArray(),输入数组 P = cv::noArray(),TerminCriteria criteria = TerminCriteria(MAX_ITER + 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校准模式点的投影的向量的向量。对于每个i,imagePoints.size()、objectPoints.size() 和 imagePoints[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()

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

#include opencv2/calib3d.hpp

使用鱼眼模型畸变2D点。

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

注意,该函数假定未畸变点的摄像机内禀矩阵为单位矩阵。这意味着如果您想畸变图像点,您必须将它们乘以 \(K^{-1}\)。

下面是这个函数的调用图

◆ 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 1通道,或向量:3x1/1x3 1通道或1x1 3通道
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 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  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通道(或Point3f向量),其中N是视图中点的数量。
imagePoints图像点输出数组,2xN/Nx2 1通道或1xN/Nx1 2通道,或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

从三维到二维点对应关系中为鱼眼相机模型找到物体姿态。

参数
objectPoints物体坐标空间中的物体点数组,Nx3 1通道或1xN/Nx1 3通道,其中N是点的数量。也可以在这里传递vector
imagePoints相应图像点的数组,Nx2 1通道或1xN/Nx1 2通道,其中N是点的数量。也可以在这里传递vector
cameraMatrix输入相机内矩阵\(\cameramatrix{A}\)。
distCoeffs输入畸变系数向量(4x1/1x4)。
rvec输出旋转向量(参见Rodrigues),它与tvec一起将点从模型坐标系转换到相机坐标系。
tvec输出平移向量。
useExtrinsicGuess用于SOLVEPNP_ITERATIVE的参数。如果为真(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-点(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_USEINTRINSIC_GUESSfisheye::CALIB_FIX_INTRINSIC,则必须初始化矩阵的某些或所有组件。
D1输入/输出鱼眼畸变系数向量 \(\distcoeffsfisheye\),具有4个元素。
K2输入/输出第二摄像头内参矩阵。该参数与K1类似。
D2输入/输出第二摄像头的镜头畸变系数。该参数与D1类似。
imageSize仅用于初始化摄像头内参矩阵的图像大小。
R输出第一摄像头和第二摄像头坐标系之间的旋转矩阵。
T输出相机坐标系统之间的平移向量。
rvecs输出在立体对的第一摄像头坐标系统中估计的每个模式视图的旋转向量(例如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

使用鱼眼模型校正2D点。

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