• 图像畸变与去畸变


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

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

    1.图像畸变

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

    1.1 径向畸变与畸变模型

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

    畸变沿着透镜半径方向分布,主要包括桶形畸变和枕形畸变两种,如下图所示:
    在这里插入图片描述
    正常物体 枕形畸变 桶形畸变

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

    1.2 切向畸变与畸变模型

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

    畸变模型可以用两个参数p1和p2来描述:
    在这里插入图片描述
    其中,(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)计算畸变量:

    在这里插入图片描述

    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′);
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    imgsrc是直接获取的有畸变的图像, image_de_distort是去畸变后的图像。
    原始图像(存在畸变)原始图像(存在畸变)

    在这里插入图片描述去畸变后的图像

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

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

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

  • 相关阅读:
    2021年9月电子学会图形化一级编程题解析含答案:小狗进圈
    【算法基础】:(二)希尔排序
    安卓开发FirstDay
    JVM虚拟机 总结很到位
    QT设置QTextEdit的文本颜色无效
    Maven路上的疑难杂症
    产品经理薪资水涨船高的根本原因是什么?
    灾难恢复架构规划要点
    51单片机驱动HMI串口屏,串口屏的下载方式
    06 【生命周期 模板引用】
  • 原文地址:https://blog.csdn.net/limingmin2020/article/details/125478325