No Title Blog

OpenCV 鱼眼相机模型投影关系

OpenCV 鱼眼相机模型投影关系
2020-04-09 · 4 min read
OpenCV Camera Geometry

HighLight:
A detail demo

相机模型

现有一鱼眼(fisheye)相机符合 OpenCV 的 Fisheye Camera 模型, 其内参和畸变参数如下:

Khmc = np.array([[352.59619801644876, 0.0, 0.0],
                 [0.0, 352.70276325061578, 0.0],
                 [654.6810228318458, 400.952228031277, 1.0]]).T
kd = np.array([-0.05631891929412012, -0.0038333424842925286,
               -0.00024681888617308917, -0.00012153386798050158])

易见, 焦距 f=352.6,cx=654.7,cy=400.9f = 352.6, cx = 654.7, cy = 400.9, kdkd 为径向畸变参数. 参考 OpenCV 的文档[1], 可知其分别对应 3, 5, 7, 9 阶的系数.

已知一点 PP 在相机坐标系中的坐标为 (x,y,z)(x, y, z), zz 为深度方向. 可得:

a=x/z and b=y/zr2=a2+b2θ=atan(r)\begin{array}{l} a=x / z \text { and } b=y / z \\ r^{2}=a^{2}+b^{2} \\ \theta=\operatorname{atan}(r) \end{array}

径向畸变校正系数 θd\theta_{\mathrm{d}} 为:

θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)=(θ+k1θ3+k2θ5+k3θ7+k4θ9)\theta_{\mathrm{d}}=\theta\left(1+\mathrm{k}_{1} \theta^{2}+\mathrm{k}_{2} \theta^{4}+\mathrm{k}_{3} \theta^{6}+\mathrm{k}_{4} \theta^{8}\right) \\ =\left(\theta+\mathrm{k}_{1} \theta^{3}+\mathrm{k}_{2} \theta^{5}+\mathrm{k}_{3} \theta^{7}+\mathrm{k}_{4} \theta^{9}\right)

应用畸变后的坐标 (x,y)(x', y') 为: (为方便指代, 将该坐标系称为 畸变后像平面坐标系, 注意与 UV坐标系 区分, 这两坐标系之间存在仿射变换关系, 变换矩阵即为内参矩阵K)

x=(θd/r)xy=(θd/r)yx' = (\theta_d / r) x \\ y' = (\theta_d / r) y

有效视野范围计算

易知, 从相机光心到图像边缘上每个点的射线构成的视锥是可以有效成像空间范围. 考虑到该相机成像为圆形区域, 图像边缘与图像中心最大距离取为 460px, 即为畸变后的像平面坐标系的最大距离rmax=460352.6=1.305r'_{max} = \frac{460}{352.6} = 1.305.

因为 rmax=θd(θmax)rmaxrmax=θd(θmax)r'_{max} = \frac{\theta_d(\theta_{max})}{r_{max}} \cdot r_{max} = \theta_d(\theta_{max}), θmax\theta_{max} 有3个实根, 分别为 (2.882,1.576,2.060)(-2.882, 1.576, 2.060), 保留 θmax=1.576rad=90.3deg\theta_{max} = 1.576 rad = 90.3 deg为最终结果. FOV确实能达到180°.


  1. OpenCV Fisheye Camera Model Document ↩︎