为了总结一下进入理大以来对于Stereo Vision的学习,这里分享一下对于Camera Calibration的学习
首先分享一下好的资源Richard’s blog 《学习opencv》的第十一章,照相机匹配,还有张正友的经典论文。
1.针孔模型(Pinhole model)
从高中物理的针孔成像定理以及相似三角形定义可得,Z为到针孔距离,f为焦距:
$$-x=f\frac{X}{Z}$$
换一个方式,由于人眼看到的并非是倒像,其实可以如下图一样,将成像平面前移到眼睛前方,或者进行一个重新对应成像的过程,从而把倒像恢复,但大小不变的。
$$x=f\frac{X}{Z}$$
为了使得影像中心没有偏差,加入位移参数$C_x和C_y$,另外成像平面的像素长宽的比例不一样,所以可以加入$s_x和s_y$调整。但这是可以和焦距融合的,所以最终得到公式:
$$q=M* Q$$
$f_x ,f_y ,c_x ,c_y$为摄像机的内参数,一旦标定是固定不变的。
2.透镜模型
由于针孔对光线的采集不足,需要长曝光,这是不可取的。所以选用透镜,但这回带来透镜畸变,主要是径向(Radial)和切向(Tangent)畸变
校正选用的Model如下,其中径向由泰勒展开的前三个偶数项(由于中心对称的偶函数),而切向的恢复拟合模型可以参考详细的数学方法,这里不关注。
这里k1,k2,p1,p2,k3成为摄像机的形变参数(Distortion parameteres)
3.Calibration
外部参数是用来将世界坐标系和Camera坐标系之间的坐标系统进行转换。通过3个维度的旋转和平移可得:
4.张正友方法
由于OpenCV以及matlab所使用的方法都是基于张正友的方法,这里介绍一下,其特点是校正方法的弹性以及校正物件比较容易,为一个平面物件。
由于校正物体为平面物体,成像也是一个平面物体,而平面物体上的点Transform到另一个平面上,这在CV领域理称为Planar Homography
基于如此假设,减少一个Z轴上的旋转向量,得到的映射方程可以简化为如下:
通过$H=A*[r_1 r_2 t]$代入可得以下解:
如此,我们有Homography Constrain的约束
$r_1 r_2$为相互垂直的旋转向量,且大小相同,即$r_1^T*r_2=0$以及$||r_1||=||r_2||和r_1^T*r_1=r_2^T*r_2$从而代入上面的式子进行矩阵求解,最终得到如下结果:
其中$B=A^{-T}A^{-1}$,B为对称矩阵,所以只需要知道6个矩阵元素就好。由此推出要求得一个解,至少需要3幅图像的6对已知对应点。(多多益善)
此外,由于$r_1 和 r_2$不一定相互垂直,所以有时需要对R进行奇异值分解。
有解的前提是2NK>=6K+4,即是(N-3)K>=2
4.OpenCV的相关函数
//寻找棋盘角点 |
计算完内参数后,也由单应性条件计算得到外参数