作者丨童虎
编辑丨3D视觉开发者社区
✨如果觉得文章内容不错,别忘了三连支持下哦~
本文主要介绍图像畸变产生的原因,广角镜头的一般畸变模型和去畸变的方法。
图像畸变是由于透镜制造精度以及组装工艺的偏差会引入畸变,导致原始图像失真。镜头的畸变分为径向畸变和切向畸变两类。
径向畸变是由于镜头自身凸透镜的固有特性造成的,产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲。
畸变沿着透镜半径方向分布,主要包括桶形畸变和枕形畸变两种,如下图所示:
正常物体 枕形畸变 桶形畸变
畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,可以增加使用第三项k3来进行描述:
其中,(x,y)是非畸变的坐标位置,(x0,y0)是畸变后的坐标位置。成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。
切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。
畸变模型可以用两个参数p1和p2来描述:
其中,(x,y)是非畸变的坐标位置,(x0,y0)是畸变后的坐标位置。
注意:
1)所有的畸变计算均在摄像机坐标系下进行。
2)每个镜头的畸变系数[k1,k2,k3,p1,p2],可以通过标定得出。
从镜头获取的原始图像,都是存在第一部分所述的两种畸变的,为了后续进行更好的图像操作,我们需要首先执行去畸变过程:
x=(u-cx)/fx;
y=(v-cy)/fy;
z=1;//单位平面
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是去畸变后的图像。
原始图像(存在畸变)
版权声明:本文为作者原创授权转载,由3D视觉开发者社区编辑整理发布,仅做学术分享,未经授权请勿二次传播,版权归原作者所有,若涉及侵权内容请联系删文。
3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。
点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~
也可移步微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦!