opencv 畸变矫正分析
参考 https://docs.opencv.org/3.3.0/da/d54/group__imgproc__transform.html#ga69f2545a8b62a6b0fc2ee060dc30559d
理论分析
方法一undistort() 与matlab标定去畸变显示相同
undistort()
void cv::undistort | ( | InputArray | src, |
OutputArray | dst, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputArray | newCameraMatrix = noArray() |
||
) |
矫正图像以补偿镜头失真。
该功能可转换图像以补偿径向和切向镜头失真。该函数只是cv :: initUndistortRectifyMap (带有单位R)和cv :: remap (带双线性插值)的组合。 有关正在执行的转换的详细信息,请参阅前一个函数。
目标图像中的源像中没有对应像素的像素用零(黑色)填充。
可以通过newCameraMatrix来调节在校正图像中可见的源图像的特定子集。 您可以使用cv :: getOptimalNewCameraMatrix根据您的要求计算相应的newCameraMatrix。
可以使用cv :: calibrateCamera确定相机矩阵和失真参数。 如果图像的分辨率与校准阶段使用的分辨率不同,则需要相应地缩放\(f_x,f_y,c_x 和(c_y),而畸变系数保持不变。(分辨率与内参和畸变的关系)
参数
SRC | 输入(失真)图像。 |
DST | 输出(校正)图像,其大小和类型与src相同。 |
cameraMatrix | 输入相机矩阵\(A = \ vecthreethree {f_x} {0} {c_x} {0} {f_y} {c_y} {0} {0} {1} \)。 |
distCoeffs | 失真系数的输入矢量\((k_1,k_2,p_1,p_2 [,k_3 [,k_4,k_5,k_6 [,s_1,s_2,s_3,s_4 [,\ tau_x,\ tau_y]]]])\)of 4 ,5,8,12或14个元素。 如果向量为NULL /空,则假定零失真系数。 |
newCameraMatrix | 扭曲图像的相机矩阵。 默认情况下,它与cameraMatrix相同,但您可以通过使用不同的矩阵来扩展和移动结果。 |
方法二 cv::initUndistortRectifyMap and cv::remap
initUndistortRectifyMap()
void cv :: initUndistortRectifyMap | ( | InputArray | cameraMatrix , |
InputArray | distcoeffs , | ||
InputArray | R , | ||
InputArray | newCameraMatrix , | ||
尺寸 | 大小 , | ||
INT | m1type , | ||
OutputArray | map1 , | ||
OutputArray |