ISP—镜头畸变校正

ISP—镜头畸变校正目录 1 径向畸变 2 切向畸变 3 畸变模型透镜由于制造精度以及组装工艺的偏差会引入畸变 导致原始图像的失真 镜头的畸变分为径向畸变和切向畸变两类 1 径向畸变顾名思义 径向畸变就是沿着透镜半径方向分布的畸变 产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲 这种畸变在短焦镜头中表现更加明显 径向畸变主要包括桶形畸变和枕形畸变两种 以下分别是枕形和桶形畸变示意图 成像仪光轴中心的畸变为 0 沿着

        

目录

1、径向畸变

2. 切向畸变 

3. 畸变模型


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

1、径向畸变

ISP—镜头畸变校正

         成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,如鱼眼镜头,可以增加使用第三项k3来进行描述,成像仪上某点根据其在径向方向上的分布位置,调节公式为:

ISP—镜头畸变校正

        公式里(x0,y0)是畸变点在成像仪上的原始位置,(x,y)是校正后新的位置。注意这个公式,(x0,y0)是畸变的原图上像素点的位置;(x,y)是校正后输出图像上像素点的位置。实现过程是,对输出图的点做遍历——以1080p的图像为例,从点(0,0)到点(1919,1079),一行一行的遍历——依次找到输出点(x, y)对应的原图点(x0, y0)的像素值,再将(x0, y0)的值赋给(x, y)。如果计算出来的对应的原图的点(x0, y0)不是整数,则用二次线性插值计算此点,然后赋值给(x, y)。

举个一维差值示例:

计算得到,要用x0=0.3位置的点赋值到纠正后的图像的对应点上。

x0=0的点RGB(120, 120, 240),x0=1的点RGB(100, 110, 250)。

那么可以计算x0=0.3位置的

R=120*(1-0.3)+100*0.3=114;

G=120*(1-0.3)+110*0.3=117;

B=240*(1-0.3)+250*0.3=243

        完成所有遍历后,就得到了输出图像。下图是距离光心不同距离上的点经过透镜径向畸变后点位的偏移示意图,可以看到,距离光心越远,径向位移越大,表示畸变也越大,在光心附近,几乎没有偏移。

ISP—镜头畸变校正

2. 切向畸变 

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

 

ISP—镜头畸变校正

畸变模型可以用两个额外的参数p1和p2来描述:

ISP—镜头畸变校正        下图显示某个透镜的切向畸变示意图,大体上畸变位移相对于左下——右上角的连线是对称的,说明该镜头在垂直于该方向上有一个旋转角度。 

 

ISP—镜头畸变校正

3. 畸变模型

同时对径向、切向畸变消除就是将两组式子合并。

ISP—镜头畸变校正

最终可以得到5个畸变参数:

ISP—镜头畸变校正 

        畸变参数的一般顺序是k1,k2,p1,p2,k3。之所以把k3放在最后其实也很容易理解,因为前面说了一般k1,k2用来处理径向畸变足矣,k3相对而言用的比较少。

在Opencv中他们被排列成一个5*1的矩阵,经常被定义为Mat矩阵的形式:

Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0)) 

 转载:https://blog.csdn.net/lyfwill/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216837.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:57
下一篇 2026年3月18日 上午10:57


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号