到此为止,我已经介绍了两种专门消除失焦模糊,实现扩展景深EDOF的方法:
- 编码光圈 Coded Aperture: 37. 如何从失焦的图像中恢复景深并将图像变清晰?
- 对焦扫描 Focal Sweep: 38. 对焦扫描技术是如何实现EDOF(扩展景深)的?
这里面,编码光圈的优点是能同时获取到场景的全焦图像和相对粗糙的深度图,有了这个深度图,还可以实现像多视角成像这类功能。其缺点是由于编码光圈挡住了一部分光线,所以整体的亮度偏暗,信噪比也不够。而且由于不同物距的模糊核不一致,还需要进行提前的标定。
编码光圈
而对焦扫描技术处理则是希望在单次曝光过程中移动传感器扫描不同的对焦距离,使得每个场景点最终的有效PSF都一致,然后再通过简单的去模糊方式得到全焦图像
常规镜头不同物距的PSF不一致
对焦扫描技术使得PSF对物距不敏感
这个方法的优点是理论简单,实现容易(通过手动转动相机对焦环都可以模拟)。但缺点是需要机械运动部件,且为了实现出好的效果需要精确的控制传感器或镜头的运动速度、起始位置。而且由于整个画面的模糊程度一致,所以我们事实上丢失了深度信息。
那么实现扩展景深还有没有别的方法呢?让我给你再介绍几种有趣的方法。
一、波前编码 Wave-front Coding
之前讲到对焦扫描实现了整个深度范围内的PSF一致,这是通过移动传感器并通过在曝光时间内积分实现的。
另外一种方法则是通过改变光学特性,具体来说是改变非相干光的波前相位特性来实现的,这种方式叫做波前编码wave-front coding:
波前编码
这里面会把普通镜头换成相位板,光线通过相位板后不再像通过普通镜头一样汇聚到一点上,而是会均匀的散布,这样使得不同物距的PSF接近一致,这样获取的原始图像是均匀模糊的。那么接下来就可以运用类似去卷积一类的方法对原始图像进行处理,从而得到清晰的像了。
普通镜头 vs 波前编码
典型的波前编码成像系统的示意图如下:
波前编码的奠基者Edward R. Dowski在这个领域有大量的文献和专利,可以到这里去看看:https://www.researchgate.net/scientific-contributions/10138422_Edward_R_Dowski
二、晶格透镜 Lattice Lens
另外一种有趣的方式叫做晶格透镜,这是通过在普通的透镜前增加多个不同焦距的小的透镜实现的。晶格透镜的项目主页webee.technion.ac.il/pe
晶格透镜的目标是要使得整个光学系统的有效PSF或OTF保留最大的信息,从而使得我们能够用去卷积的方法恢复出清晰的图像。
在35. 去卷积:怎么把模糊的图像变清晰?和36. 盲去卷积 - 更加实用的图像去模糊方法中我们已经讲过了去卷积这种重要的技术,但正如评论区网友@阿迪指出的一样,直接去卷积并不能很好的处理失焦导致的模糊。这是因为失焦的PSF通常会导致很多频段的信息的丢失,如下图所示。
失焦导致高频信息丢失,去卷积也很难恢复清晰图像
图中,左边是原始清晰图像。第二列是失焦PSF,第三列是用此PSF卷积清晰图像后的模糊图像(加入了噪声),第四列是去卷积后的结果。从此图中可以看到,红色线表示的PSF相比绿色线保留了更多的频谱信息,因此去卷积后的结果相比绿色框中的图像更加清晰。所有传统相机的失焦很难简单的通过去卷积来恢复。
要想能够通过去卷积来恢复清晰的图像,需要有效的PSF能够保留足够多的频谱信息。那么,最理想的有效PSF应该是什么样的呢?这需要从4D光场的理论讲起。
与此同时,我们要意识到我们的光学系统实际上是捕捉了4D光场中的2D片段(光场的知识请回顾:34. 光场--捕获场景中所有的光线)
4D光场
如果我们对4D光场做傅里叶变换,我们会得到下图
4D光场频谱
从这个图中我们可以采样恢复出不同景深的图像的傅里叶变换:
从4D光场频谱中采样可得不同对焦平面图像的2D频谱信息
我们可以观察到一个重要的信息,即每个小格子里面的有用信息似乎都分布在一条一维的直线上,事实上晶格透镜论文的作者认为对于所有的理想散射场景(lambartian scene)这都是成立的。通过采样这条直线上不同的点的信息,就可以得到不同深度的图像频谱:
维度差异:对焦栈的频谱信息属于4D光场中的3D流形
作者进一步指出,4D光场的不同深度的OTF也可以从这条直线上采样得到,下图是普通镜头的不同深度的OTF的采样过程:
这导致了一个重要的结论,即要想这个OTF保留的信息最多,我们需要在这条直线上的频谱能量最大化,而进入镜头的光能又是有限的,因此需要特别的设计才能实现这一点。理想的4D光场的频谱需要长得像这样:所有的能量均匀的分布在沿着深度方向片段上。
因此作者提出了晶格透镜,下面是一个原型,由4片晶格组成。每一个晶格是不同焦距的透镜的片段。当增加晶格的数量时,就能覆盖到更多的深度。
我们可以比较一下晶格透镜和普通镜头在不同的深度下的有效OTF:
可以看出晶格透镜在不同深度下的OTF都保持着很高的频谱能量,这样就使得再通过去卷积的方式来恢复清晰的图像更容易了。
作者还对不同的光学系统的图像重建能力做了一次对比:
不同光学系统的图像重建能力
图中,第一行是各种不同的光学系统,第二行是在对焦平面上所成的像,第三行是物距大大偏离对焦面时所成的像。可以看对焦平面上普通相机最清晰,编码光圈也能呈现比较清晰的像。但是在物体大大偏离对焦平面时,普通镜头和编码光圈所成的像都是特别模糊的,而且这时候也很难通过去卷积来恢复出清晰图像。
而对焦扫描、波前编码、晶格透镜这几种方法都对物距不敏感,可以看到在不同的深度所成的像的模糊程度都是一致的。而且,晶格透镜在这几者中又是成像最清晰的,因此再采用去卷积技术进行图像重建时能得到最清晰的像。
尽管晶格透镜的成像结果的模糊程度一致,但它在不同距离的PSF却是不一样的,因此对于晶格透镜还可以通过实现标定的方法,获取到实际场景的相对深度图。
晶格透镜的作者展示了很多效果图,我们来看见几张:
可见我们确实可以通过晶格透镜获得扩展了景深的图像。而且由于晶格透镜能获取到相对深度图,因此还可用于拍照后的重对焦:
三、扩散编码 Diffusion Coding
另外一种改变系统光学特性的方法叫做扩散编码,它通过在传统透镜中加入特殊的扩散器来实现:
这个扩散器使得入射光按照某种规则散射到传感器上,最终实现的效果还是不同物距的PSF都一致。
正如我们多次看到的,有了与深度不相关的PSF后,就很容易通过单次去卷积恢复出整体的清晰图像来。
四、总结
今天给各位介绍了三种获取扩展景深EDOF图像的方式:
- 波前编码
- 晶格透镜
- 扩散编码
这些方式都需要特殊光学硬件的支持,同时都需要利用去卷积技术进行后处理。他们虽然各自都有自己的局限性,但是都达到了扩展景深,获取全焦图像的目的。
通过展现这些方法,我想你应该更加理解本专栏第一篇文章对计算摄影学的定义,计算摄影是计算机图形学,计算机视觉,光学和传感器等领域的交叉学科。
希望这篇文章能够给你启发,开拓你的眼界,别忘了点赞哦!
五、参考资料
今天的主要参考资料为:
- CMU 2017 Fall Computational Photography Course 15-463, Lecture 18
- Dowski and Cathey, “Extended depth of field through wave-front coding,” Applied Optics 1995.
- Levin et al., “4D Frequency Analysis of Computational Cameras for Depth of Field Extension,” SIGGRAPH 2009.
- 晶格透镜:https://webee.technion.ac.il/people/anat.levin/papers/lattice/
- Cossairt et al., “Diffusion Coded Photography for Extended Depth of Field,” SIGGRAPH 2010
- 扩散编码:https://www.cs.columbia.edu/CAVE/projects/diffusion_coding/