镜头畸变

本文主要记载了关于镜头径向畸变和切向畸变的建模过程。

径向畸变

计算径向畸变

文章 大眼睛特效 对径向畸变的叙述。

(x,y)(x,y) 到圆心的距离为:

r=x2+y2\mathcal{r}=\sqrt{x^2 + y^2}

我们可以对像素使用一个非线性变换 TT 使得点到圆心的距离 rr 变为 rdr_d, 然后增加 rdr_drr 的比例关系,将点的坐标从 (x,y)(x, y) 变换到 (xd,yd)(x_d, y_d)

rd=r+T(r)r_d=r+T(r)

xd=xrdrx_d=\frac{xr_d}{r}

yd=yrdry_d=\frac{yr_d}{r}

所以最终镜像畸变的问题变成了找出一个合适的非线性变换 TT. 有许多这样的变换方法,这里有由于我们的坐标有正负之分,而且我们的畸变是对称的,所以我们可以选择使用 cos\cos 函数:

rd=r+krcos(πr)(1)r_d = r + k \cdot r \cos(\pi r) \tag{1}

由于 cos\cos 函数的泰勒展开式为

余弦函数的泰勒级数展开

可以近似写作,

cos(r)=1r22!+r44!r66!+=1+k1r2+k2r4+k3r6\cos(r)=1-\frac{r^2}{2!}+\frac{r^4}{4!}-\frac{r^6}{6!}+\cdots=1+k_1r^2+k_2r^4+k_3r^6

则 (1) 式可以写作

rd=r+kr(1+k1(πr)2+k2(πr)4+k3(πr)6))r_d=r+k\cdot r(1+k_1(\pi r)^2+k_2(\pi r)^4+k_3(\pi r)^6))

xd=x(1+k(1+k1π2r2+k2π4r4+k3π6r6))=x(1+k+kk1π2r2+kk2π4r4+kk3π6r6)x_d=x(1+k(1+k_1\pi^2r^2+k_2\pi^4r^4+k_3\pi^6r^6))=x(1+k+kk_1\pi^2r^2+kk_2\pi^4r^4+kk_3\pi^6r^6)

可以近似写作

xd=x(1+K1r2+K2r4+K3r6)x_d=x(1+K_1r^2+K_2r^4+K_3r^6)

这也与径向畸变的模型相符

径向畸变模型

文章 机器视觉模型——畸变模型 对径向畸变的描述。

由于这种畸变是从中心沿径向方向向外分布的,我们用 r=0r=0 处的泰勒级数展开的前几项来近似描述径向畸变。径向畸变前后的坐标关系为

径向畸变坐标关系

式中:
xdistortedx_distorted ,ydistortedy_distorted ——原畸变图像坐标
x,yx,y —— 正确坐标(无畸变图像坐标,或校正后坐标)
rr —— 半径, r2=x2+y2r_2 = x_2 + y_2
k1,k2,k3k_1 , k_2 , k_3 —— 引入的径向畸变参数

由于径向畸变模型中 rr 的存在,可以推出,距离中心距离相等的圆上的像素的失真效果是一样的。这也可以从下图看出

不同k值的失真效果


文章作者: taosean
文章链接: https://taosean.github.io/2021/05/18/Camera-Distortion/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 taosean's 学习之旅