在我的知识星球中,我正在教大家如何编程实现摄影图像的后期处理与优化。目前我的进度在图像的畸变校正这一部分,如下图所示:
这里我所说的畸变校正包括了两个部分。一个部分是画面的几何畸变校正,这部分的原理我在文章手机中的计算摄影4-超广角畸变校正和66. 三维重建1——相机几何模型和投影矩阵中都有提到过。
另外一部分,则是被我强行纳入畸变范畴的 它有一个拉风的名字——晕影,英文教材里面称作Vignetting,我在文章2. 从入射光到JPEG相片-数码相机内部的秘密中提到过它。今天我就稍微展开介绍一下晕影
晕影这个词比较抽象,我们先来看一对去除晕影前后的图像的对比,获取一下直观的印象。
仔细观察上面的动图,我们明显可以看出规律,在去除晕影前,画面的四周比中心要暗,感觉就像曝光不足一样。而去除晕影后,画面的四周的亮度就提升了,很多细节也凸显了出来。仔细看还能发现,上图中中心的阶梯和左右两边的植物本来位于同一物距,有相似的光照条件,但去除晕影前中间的阶梯就是显得要亮一些,旁边的植物就显得黑乎乎的。而去除晕影后,中心的画面亮度没有大的改变,但周围的像素亮度就提起来了。
有了感性的认识后,我们现在来正式的认识一下它。
根据Richard Szeliski大师在《Computer Vision: Algorithms and Applications》中的说法,晕影是图像亮度向图像边缘下降的现象。他把晕影分为了两类,一类叫做自然晕影(Natural Vignetting),一类叫做机械晕影(Mechanical Vignetting),在另外的文献中(参考资料3)还专门分出了一类光学晕影(Optical Vignetting)。我们简单看看这些晕影的说明。
我们看下面这幅图,以场景点O为中心的、面积为δo的面片发出的光线会最终成像到传感器表面,以I为中心的面积为δi的像素集,这个过程中有几个因素会导致物方发出的光线产生衰减:
自然晕影来自光线的传输衰减
1. 由于镜头表面是曲面,因此δo和镜头表面并不是平行的,而是呈现一个夹角α。这意味着场景面片发出的光会衰减,实际穿过的光能我们用δo*cos(α)
2. 虽然δo的物距为zo,但实际上其发出的光线到达镜头表面会比zo更长,看下图很明显为zo/cos(α)。而光能是随距离呈平方率衰减的,更远的距离自然衰减更多。
3. 另外,虽然从Q点看上去理想透镜表面是个圆形。但从O点看上去镜头却是个椭圆,其面积相比原始圆面积缩小了cos(α)倍
综合以上因素,我们可以用书中的一个公式来描述自然晕影,即场景辐照度L和入射到传感器上的辐射能量之间的关系是余弦四次方的关系,其中离轴角度α越大,衰减越多,焦距f越大衰减越多,光圈直径d越小,衰减越多。事实上,由于光圈值N = f/d,因此光圈值越大(即光圈越小)衰减量越大。
自然晕影的数学模型
很明显,自然晕影的产生确实是物理现象,是任何使用镜头成像的设备天然就会遇到,这也是其名字的由来。
机械晕影产生的原因则是因为镜头外部的机械结构阻挡了靠近边缘的光线进入相机内部。比如下图就很能说明问题。
机械晕影由相机附件遮挡产生
还有一种叫做光学晕影,是指光线被镜头光圈的附件所遮挡,这种阻挡光线的现象会随着光圈变小(光圈值变大)而减小,如下图所示。我们很明显看到,对于f/1.4的大光圈镜头,当从边缘朝镜头内部看的时候,光圈会被物理遮挡产生形变。但当光圈值变为f5.6,即光圈面积变小时,即使从边缘朝镜头内部看时,光圈依然是完整的。
光学晕影由光圈遮挡产生
前人研究了很多方法对Vignetting进行建模,并尝试标定相机的Vignetting量,从而消除它。校准渐晕最准确的方法是使用积分球或均匀着色和照明的空白墙的图片,总之是一个专门的过程,我以后在别的文章中可以加以描述。
现在我们来思考下如何去除Vignetting,这里我就来引述一下Adobe公司的下面这份文档中的内容
这里,Adobe简单的将Vignetting建模为一个径向衰减模型,越靠近图像边缘,衰减量越大。这非常类似于我之前讲过的镜头几何径向畸变,所以就连其衰减公式都长得很像,下面公式中L就是衰减倍率,而r则是像素点到光心图像点的距离。
其中
这个公式还可以近似为下面的式子,其中G为补偿增益,越是靠近画面的边缘补偿越多
在这个模型中,下面这些就是实现需要通过科学的方法标定的参数
然而,当我们要对一幅图像做后期处理优化时,我们手上通常没有拍摄这幅图像的相机对应的这些参数,我们甚至也没有办法去做参数标定,因为相机可能根本就不在你手上。这时候该怎么办呢?
四. 参考资料
今天的参考资料包括: