概述
我们常见的相机都有一个重要的组成部分,那就是镜头。但是大伙有没有好奇,为什么相机需要装上一个镜头?这个镜头是否对三维世界投影到二维平面产生影响?如果有,我们该如何建立数学模型来消除这样对影响。
在这篇博文中,我们将讨论上述的问题。
使用镜头替代针孔
为了产生清晰的图像,针孔相机的孔径应该尽可能的小。如果我们增加光圈的大小,那现实世界中的物体将会反射多条光线到相机的屏幕,从而产生模糊的图像。
另一方面,如果我们使用的光圈太小,那么将会只有少量的光子击中图像传感器,导致所得到的图像较为黑暗,或者具有很多噪声。
因此,针孔相机的光圈越小,图像的聚焦程度就越高,但是,图像的颜色也就越深(暗),所具有但噪声也越多。而光圈越大,图像的颜色也就明亮,噪声也较少。
从上边的表述可以知道,如果只调整光圈,似乎不能得到两全其美的方法。那我们该如何做,才能得到清晰的图像,并且让图像更为的明亮呢?
我们可以使用透镜替代针孔,这样就让更多的光线能够击打到图像传感器。这里就很好的运用了透镜的一些特性:透镜允许更多的光线通过,并且也能够让光线聚集在传感器上,这样就可以得到亮度和清晰度共有的图像啦。但是别太高兴哦,任何东西都不可能不用代价就获得的。
图像畸变的主要类型和原因
通过使用镜头,我们可以得到更好的图像,但是这些图像会存在一些失真的效果(畸变)。最常见的畸变有两种:
- 径向畸变:这种类型的畸变通常是由于光的不均匀弯曲造成的。即,光线在透镜边缘处的弯曲程度比在透镜中心出的弯曲程度高。由于径向畸变的存在,现实世界中的直线在图像中看起来是弯曲的。因为光线从理想位置向外或者向内移动,然后到底图像传感器。所以,径向畸变又分为两种类型,如图所示:
- 桶形畸变: 即光线向外移动。
- 枕形畸变: 即光线向内移动。
- 切向畸变:出现这样的畸变通常是由于图像成像面于传感器面存在一定角度,即二者不平行。因此,图像看起来是倾斜和拉伸的。
现在我们知道了图像畸变这个东西,但是它看起来究竟是怎么样的?又会有什么经典的影响呢?
下图我们给出了一张桶形畸变的图像,可以看出,在偏离图像中心的位置,原来改为直线的墙壁,均产生了弯曲。这样的弯曲会带来什么影响呢?第一,它看起来于原有的场景十分不符,不能作为该场景的一种二维数字体现;第二,我们无法估计出图像中某些物体的高度,因为它已经发生了严重的弯曲;第三,当我们想使用SLAM技术完成更多的事情时,这样的图像很明显是一个很大在阻碍。
使用Opencv移除畸变
消除由于镜头造成的图像畸变有三个主要的步骤:
- 对相机进行标定,进而获取相机对内参。其中,内参包括来相机对畸变参数。
- 优化相机矩阵以控制未图像中未畸变的像素的百分比。
- 使用优化后的相机矩阵,使图像不发生畸变。
具体可以我给出的带有中文注释的代码,链接在此,可以免费下载。