Bootstrap

图像算法一 —— 相机畸变及其数学模型

1. 相机畸变及其数学模型

畸变类型

相机畸变主要分为两种:

  • 径向畸变(枕形、桶形):光线在远离透镜中心的地方 比 靠近透镜中心的地方 更加弯曲
  • 切向畸变:透镜不完全平行于图像平面,即sensor在安装时与镜头之间的角度不准。

在这里插入图片描述

畸变数学模型

径向畸变

成像仪 光轴中心的畸变为 0 0 0,沿着镜头半径方向 越靠近边缘,畸变越严重

畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项来进行描述。

  • 通常使用前两项和,即 k 1 k_1 k1 k 2 k_2 k2

  • 对于畸变很大的镜头,如鱼眼镜头,需要增加第三项 k 3 k_3 k3来进行描述。

成像仪上的某点,根据其在径向方向上的分布位置,调节公式为:

x ^ = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \widehat{x} =x(1 + k_1r^2 + k_2r^4 + k_3r^6) x =x(1+k1r2+k2r4+k3r6)

y ^ = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \widehat{y} =y(1 + k_1r^2 + k_2r^4 + k_3r^6) y =y(1+k1r2+k2r4+k3r6)

公式中:

( x ^ , y ^ ) (\widehat{x} , \widehat{y} ) (x ,y )——畸变后的归一化图像坐标

( x , y ) (x, y) (xy)——无畸变的归一化的图像坐标

r r r——图像像素点到图像中心点的距离,即为: r 2 = x 2 + y 2 r^2 = x^2 + y^2 r2=x2+y2

径向畸变的偏移示意图

在这里插入图片描述

切向畸变

切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致

畸变可以由两个额外的参数 p 1 p_1 p1 p 2 p_2 p2来描述:

x ^ = x + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] \widehat{x} = x + [2p_1xy + p_2(r^2 + 2x^2)] x =x+[2p1xy+p2(r2+2x2)]

y ^ = y + [ 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) ] \widehat{y} = y + [2p_2xy + p_1(r^2 + 2y^2)] y =y+[2p2xy+p1(r2+2y2)]

大体上,切向畸变的畸变位移相对于左下——右上角的连线是对称的,说明该镜头在垂直于该方向上有一个旋转角度

切向畸变的偏移示意图

在这里插入图片描述

畸变数学模型总结

径向畸变和切向畸变中,一共有5个畸变参数,OpenCV中他们被排列为一个 5 × 1 5\times1 5×1的矩阵,依次包含 k 1 k_1 k1 k 2 k_2 k2 p 1 p_1 p1 p 2 p_2 p2 k 3 k_3 k3,经常被定义为Mat矩阵的形式,如Mat distCoeffs = Mat(1, 5, CV_32FC1, Scalar::all(0));

上述5个参数就是相机标定中需要的相机的5个畸变参数,求得这5个参数后,就可以矫正由镜头畸变引起的图像的变形失真。

因此,包含径向畸变和切向畸变的总体畸变模型:

x ^ = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] \widehat{x} = x(1 + k_1r^2 + k_2r^4 + k_3r^6) + [2p_1xy + p_2(r^2 + 2x^2)] x =x(1+k1r2+k2r4+k3r6)+[2p1xy+p2(r2+2x2)]

y ^ = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) ] \widehat{y} = y(1 + k_1r^2 + k_2r^4 + k_3r^6) + [2p_2xy + p_1(r^2 + 2y^2)] y =y(1+k1r2+k2r4+k3r6)+[2p2xy+p1(r2+2y2)]

其中,

( x ^ , y ^ ) (\widehat{x} , \widehat{y} ) (x ,y )——畸变后的归一化图像坐标

( x , y ) (x, y) (xy)——无畸变的归一化的图像坐标

r r r——图像像素点到图像中心点的距离,即为: r 2 = x 2 + y 2 r^2 = x^2 + y^2 r2=x2+y2

k 1 k_1 k1 k 2 k_2 k2 p 1 p_1 p1 p 2 p_2 p2 k 3 k_3 k3——畸变参数

;