双目相机畸变和平行矫正
1 双目相机内外参
1.1 内参矩阵
左相机:
K1=\left[\begin{array}{ccc}fx 1 & 0 & c x 1 \\0 & f y 1 & c y 1 \\0 & 0 & 1\end{array}\right]
右相机:
K2=\left[\begin{array}{ccc}fx 2 & 0 & c x 2 \\0 & f y 2 & c y 2 \\0 & 0 & 1\end{array}\right]
1.2 畸变系数
左相机:
D 1=\left[\begin{array}{lllll}k 11 & k 12 & k 13 & p 11 & p 12\end{array}\right]
右相机:
D 2=\left[\begin{array}{lllll}f 21 & k 22 & k 23 & p 21 & p 22\end{array}\right]
1.3 外参系数
左相机外参:R1 和 t1
右相机外参:R2 和 t2
1.4 理想内参矩阵
构建一个两个相机共同的理想内参矩阵
K=\left[\begin{array}{ccc}fx & 0 & cx \\0 & f y & cy \\0 & 0 & 1\end{array}\right]=\left[\begin{array}{ccc}\left(\frac{fx1+fx2}{2}\right) & 0 & \left(\frac{c x 1+c x 2}{2}\right) \\0 & \left(\frac{f y 1+f y 2}{2}\right) & \left(\frac{c y 1+c y 2}{2}\right) \\0 & 0 & 1\end{array}\right]
2 典型步骤
参照 [2] 中的步骤,双目相机典型的畸变和平行矫正流程如下:
- 分别将两个图像的像素坐标系通过共同的内参矩阵转换到相机坐标系:
- 分别对两个相机坐标系进行旋转得到新的相机坐标系。通过左乘旋转矩阵R1和R2。
- 针对新的相机坐标分别进行左、右相机的去畸变操作。
- 去畸变操作结束后,分别用左、右相机的内参矩阵将左、右两个相机坐标系重新转换到左、右图像像素坐标系。
- 并分别用左、右源图像的像素值对新左、右图像的像素点进行插值。
3 OpenCV 中的相关函数
- findChessboardCorners()用来发现棋盘格的角点位置,这里用的是haaris角点检测方法。cornerSubPix()角点位置精确到亚像素级。
- stereoCalibrate()通过角点推算出两个相机的内参矩阵M1,M2和畸变系数D1,D2,当然外参矩阵随之也就计算出来了(在图像校正中还没有用到外参),这里用到的是张正友相机标定算法。
- stereoRectify()根据内参矩阵和畸变系数计算右相机相对于左相机的旋转R和平移矩阵T,并将这个旋转和平移矩阵分解成左、右相机各旋转一半的旋转R1,R2和平移矩阵T1,T2,这里用到的是bouguet极线校正的方法。
- initUndistortRectifyMap()和remap()对左右相机拍摄的图像进行校正(在今后的文章中将会详细介绍实现方法和步骤)。
参考文献
[1] https://blog.csdn.net/wangxiaokun671903/article/details/37935113
[2] https://blog.csdn.net/wangxiaokun671903/article/details/38017055