图像畸变与去畸变

作者丨童虎
编辑丨3D视觉开发者社区
✨如果觉得文章内容不错,别忘了三连支持下哦~

本文主要介绍图像畸变产生的原因,广角镜头的一般畸变模型和去畸变的方法

1.图像畸变

图像畸变是由于透镜制造精度以及组装工艺的偏差会引入畸变,导致原始图像失真。镜头的畸变分为径向畸变和切向畸变两类。

1.1 径向畸变与畸变模型

径向畸变是由于镜头自身凸透镜的固有特性造成的,产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲。

畸变沿着透镜半径方向分布,主要包括桶形畸变和枕形畸变两种,如下图所示:
图像畸变与去畸变_第1张图片
正常物体 枕形畸变 桶形畸变

畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,可以增加使用第三项k3来进行描述:
图像畸变与去畸变_第2张图片
其中,(x,y)是非畸变的坐标位置,(x0,y0)是畸变后的坐标位置。成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。

1.2 切向畸变与畸变模型

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

畸变模型可以用两个参数p1和p2来描述:
图像畸变与去畸变_第3张图片
其中,(x,y)是非畸变的坐标位置,(x0,y0)是畸变后的坐标位置。

注意:
1)所有的畸变计算均在摄像机坐标系下进行。
2)每个镜头的畸变系数[k1,k2,k3,p1,p2],可以通过标定得出。

2.图像去畸变

从镜头获取的原始图像,都是存在第一部分所述的两种畸变的,为了后续进行更好的图像操作,我们需要首先执行去畸变过程:

1)首先将像素坐标(u,v)转到摄像机坐标系下(通过camera内参):

x=(u-cx)/fx;
y=(v-cy)/fy;
z=1;//单位平面

2)计算畸变量:

图像畸变与去畸变_第4张图片

3)畸变位置:

在这里插入图片描述

4)将该摄像机坐标系下的坐标转到像素坐标系下:

在这里插入图片描述

for (int v = 0; v < grayimg.rows; v++)

{

    for (int u = 0; u < grayimg.cols; u++)

    {

        image_de_distort.at<unsigned char>(v, u) = imgsrc.at<unsigned char>(v′, u′);

    }

}

imgsrc是直接获取的有畸变的图像, image_de_distort是去畸变后的图像。
图像畸变与去畸变_第5张图片原始图像(存在畸变)

图像畸变与去畸变_第6张图片去畸变后的图像

版权声明:本文为作者原创授权转载,由3D视觉开发者社区编辑整理发布,仅做学术分享,未经授权请勿二次传播,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。

点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~
也可移步微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦!

你可能感兴趣的:(开发者,计算机视觉,人工智能,图像处理,目标检测,相机)