一. 前言
各位朋友,欢迎来到新的篇章!在前面的文章中,我们学习了如何去除图像中的镜头畸变和晕影(Vignetting),特别的是我还在上一篇文章中讨论了去除晕影操作的合理的位置。如果你忘记了细节,请回顾以下的文章:
- Python图像后处理与优化11-基本流程之畸变校正
- IQE12: 晕影(Vignetting)产生原理及去除
- IQE13: 晕影(Vignetting)消除应该在Gamma校正之前还是之后?
现在让我们看看现在的坐标:
我们比较容易通过我之前讲过的晕影消除算法,得到新的图像:
看起来似乎OK了?但如果我们继续把图像放大,会看到什么呢?
这种瑕疵是如何产生的呢?我们有没有办法消除这种瑕疵呢?这就是本篇文章想要回答的问题,我们最终希望通过某种方式消除这种彩边,得到下面的对比图
本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎关注,转载请注明作者和来源.
二. 问题原因分析
我曾经在我的文章31. 镜头、曝光,以及对焦(上)中提到,真实的镜头相比我们理想中的薄透镜模型有许多不一样的地方,我们之前讲过了畸变,讲过了晕影,而我在上面第一节提到的问题则是另外一个真实镜头的缺陷导致的,这就是所谓的色差(chromatic aberration),色差有两种,一种叫做纵向色差或轴向色差(longitudinal/axial chromatic aberration), 另外一种叫做横向色差(lateral/transverse chromatic aberration),下面我分别介绍一下。
2.1 纵向色差
透镜对于不同波长的光折射率不同,因此不同波长的光穿过透镜后会聚焦在不同的距离,这就导致了纵向色差,如下图所示:
纵向色差的特点如下:
- 这通常会导致画面轻微模糊,因为许多光无法准确的对焦
- 在长焦镜头中这种色差效应更为明显
- 通过减小光圈,增大景深范围可以减轻纵向色差带来的模糊,因为更多的光聚焦在了有效景深范围内
在数码成像过程中,如果我们把绿色通道光线聚焦,那么红、蓝通道的光线就会失焦(从而导致模糊)。如果你看过我关于失焦模糊恢复的文章的话(参考文章:37. 如何从失焦的图像中恢复景深并将图像变清晰?),你就会知道这种模糊是比较难以通过软件算法层面的后处理来解决的。但从光学设计上,如果把两种不同的镜片贴在一起,能够一定程度上消除这种色差,如下图所示。我们待会在消除色差一节再来多谈谈纵向色差的消除办法。
2.2 横向色差
对我们今天的主体来说,我们更关注的就是横向色差了。在Richard Szeliski大师的《Computer Vision: Algorithms and Applications》书中,第2.2节有一幅图形象的说明了横向色差的产生原因。我们看到,由于透镜对不同波长的光的折射率不同,红、蓝光会有不同的焦距。这不仅仅意味着我们上面提到的纵向色差导致的模糊,还意味着在图像屏幕上,红蓝光会对焦在不同的位置,即放大倍率不同。
下面这幅图也能说明,不同的光线成像在像平面上的不同位置,这就导致了物体的边缘会出现类似于我们第一节看到的彩边现象
横向色差和纵向色差相比有很多不同的特点:
- 纵向色差在全图出现,而横向色差在图像中心几乎没有,在图像边缘愈发明显
- 纵向色差在长焦镜头更加明显,而横向色差在短焦镜头更为常见
- 纵向色差可以通过调节光圈大小而消弭,而横向色差则与光圈大小无关
- 纵向色差很难通过软件图像处理的方式消除,而横向色差则有可能通过径向缩放红蓝通道与绿色通道对齐来解决
三. 色差的消除及小结
那么,当我们拿到一幅图像,发现其中有色差时,有没有办法很方便的用一些软件消除色差呢?消除色差的原理是什么呢?我在我的知识星球中对此进行了详细的解释,如果你感兴趣的话,可以点击这个链接Python图像后处理与优化14-基本流程之消除色差阅读详情。
四. 参考资料
1. 【特别声明】今天我使用了一幅从李涛老师的《数码摄影后期高手之路》中获取的图像(4-04.CR2)。李涛老师非常Open,你可以很容易的通过他的微信公众号获取到原始的图像,网络上也有很多网友使用李涛老师提供的图像进行摄影后期处理的练习和展示。希望我因为教学需要而在这篇文章以及后续文章中的引用,没有违背李涛老师开放这些图像的初衷。如果确有侵权,我会从文章中删除这些引用,换上新的内容。
2. Richard Szeliski: Computer Vision: Algorithms and Applications ,此书我已放到百度网盘: 百度网盘下载链接
3. Wikipedia色差相关词条:en.m.wikipedia.org/wiki
以及我之前的文章:
31. 镜头、曝光,以及对焦(上)
32. 镜头、曝光,以及对焦(下)
37. 如何从失焦的图像中恢复景深并将图像变清晰?