相机参数估计值如何计算?
作者:书涵
在三维重建中,标定是很重要的一环,而在所有标定中,单目相机标定是最基础的,对于新手而言,跑通了一个相机标定代码,得到了一堆参数结果,如何判断自己的标定的是对的呢?RMS(重投影误差)小标定就一定准确吗? 在这篇文章中,笔者将简单聊聊如何在标定之前估算你要标定的相机内参值。以下方法仅针对普通工业相机镜头,鱼眼相机和全景相机不考虑在内。
首先要知道的是,相机标定时,需要优化的参数有,相机内参 – 其中包括 相机“焦距“”(f/dx f/dy)相机图片中心(u0,v0), 相机畸变系数(k1 k2 k3 p1 p2)。由于参与优化的系数较多,在有些情况下,会优化到一个局部最优解上,导致你的RMS看着挺不错的,甚至比较小,但是在实际使用中如去畸变的时候,发现图片变得畸形。或者在双目极线矫正的时候,对应点没有到同一条直线上,这都是因为优化时落入了一个局部最优解。在开始估计参数之前,我们需要知道以下两点,
1 )对普通工业相机镜头来说,畸变系数通常不会很大;
2 )相机内参标定结果应该在理论的线性系统附近(即不考虑畸变下的计算值)
相机图片中心很好理解,它即指的是你图像的中心点,通常是相机分辨率的一半,即如果你的图像像素大小是 800*600,那么你的图像中心应该是(400,300),在接下来的内容中,笔者要重点介绍如何估计相机“焦距”,这个焦距的表达式是 f/dx. 代表着理想焦距/相机像元大小,是一个无单位的值(f 和 dx单位要统一后比值计算)。 由于f是一个理想焦距,它并不是我们拿到的工业镜头的焦距大小,所以不可以拿工业镜头焦距直接代替。 接下来笔者带大家探究下这个理想焦距的实际意义,以及在相机透镜成像系统中,如何估计这个理想焦距f的大小。
图1
图2
在相机标定时我们用的是小孔成像模型,如下图1所示,光透过小孔在成像平面形成物像,在大部分讲相机标定的书中,我们为了使坐标系方便,会把这个模型稍稍做个变形,如图2,把像平面和物平面放到同一侧(虽然违背物理意义,但是很方便建立模型),于是图1中的小孔就是我们通常所说的光心位置,这个位置是一个虚拟位置,不具备实际测量的可能。小孔到像平面的距离就是我们的理想焦距f。
图3
在实际使用时,我们通常会使用如图3所示的透镜系统,此时,图1中的小孔,即是透镜的中心,我们要标定的理想焦距f,则是像平面到透镜中心的距离。
现在我们知道了f的意义,但是不可能实际去量像平面到透镜中心的距离,那如何估计这个值呢?实际上非常简单,使用简单的初中物理知识我们就可以很好的估计了。
在透镜系统中有如下公式:
其中d代表像距,D代表物距,f代表透镜焦距。d即为我们要求得的理想焦距。
f 是我们工业镜头所标示的焦距。D可以通过测量物体对焦时到镜头的距离测得,这样理想焦距d就可以顺利求得啦。 如果觉得用测量的方式求D不是很准,或者不方便测量D,也可以通过测量D/d 的值,并结合上述公式和f求D的大小。
D/d 的求法如下: 找到一个已知长度的物体(标定板即可),拍摄其在对焦时在相机图片中的像素长度(为了更精确要竟可能使物体的长度和图像边长平行),则D/d = 物体的实际长度/(像素长度*像元大小) 注意统一像元大小和实际长度之间的单位。
通过以上计算,我们就可以很快的得到相机的参数估计值,有了这个值,就可以去对比标定的结果,如果相机内参和实际估计值的差别过大的话,即使是RMS看起来很小,也有可能出现较大误差。 这种情况下,可能是标定输入的参数,比如棋盘格的格点长度出错,也可能是畸变陷入了一个奇怪的局部优化点。