为了将尽可能大的场景投影到有限的图像平面内,鱼眼相机会按照一定的投影函数来设计,如上图 (a) 所示。根据投影函数的不同,鱼眼相机的设计模型大致能被分为五种:透视投影(即针孔相机模型)、等积投影、等距投影、体视投影、正交投影。
图(b)根据投影函数的不同,鱼眼相机的设计模型大致能被分为五种:透视投影、等积投影、等距投影、体视投影、正交投影,最常用的是等距投影模型,即r=fθ
但投影模型这么多是不利于自动标定的,用r 关于θ 的泰勒展开式来近似表示,这么做会带来一些精度损失,但基本可以忽略:
这里θ 是入射光线∣PO1∣ 和光轴的夹角,即入射角,r表示相机空间任意点P在相机成像平面的像点p距离光心的距离∣O2p∣。成像点到光心的距离r rr是关于入射角θ \thetaθ的函数,但光线入射后以什么角度射出我们是难以计算的,因为鱼眼镜头是由一组透镜组成的,光线入射后的光路非常复杂,会在不同透镜间反复折射,可以看到论文的截图中入射光线经过O1 射到点p pp的光路画的也是一条曲线。
畸变前的像点和畸变后的像点 到光心O的距离分别为r和rd 。实际中我们一般知道相机空间的点P坐标,如果不考虑畸变,知道相机焦距f的情况下,根据出射角等于入射角,畸变点的像点P0也很容易可以得到,所以r的值也知道,根据相似三角形原理:
从而可以求得,一般记scale = rd / r
取k0 = 1 将rd代入eq2,有
翻阅过opencv文档的小伙伴们会发现opencv文档中是这么写的:
(鱼眼相机的成像过程是已知入射角θ,求出射角θd)
如果和上面我们推导出来的eq5比较,会得到
的结论,正确理解应该是:
鱼眼镜头的畸变矫正
谈畸变矫正之前先简单回顾一下畸变成像过程。
相机坐标系存在一点P(x,y,z),现在要获得该点在鱼眼相机像平面的投影,需要经过如下步骤: