35. 去卷积:怎么把模糊的图像变清晰?
本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎扫码关注,
你有没有想过把模糊的图像变清晰?就像这样:
或者这样:
今天我将给你介绍这种神奇的技术:去卷积
图像的模糊有很多种可能性,包括了:
- 镜头的缺陷
- 相机的抖动
- 场景的运动
- 景深的限制
- 后期的处理
让我先从第一种镜头的缺陷导致的图像模糊讲起,因为这是所有的镜头都会存在的固有的问题。
一、镜头的缺陷以及衍射极限PSF
在31. 镜头、曝光,以及对焦(上)中,我们看到了小孔成像的缺陷,小孔的尺寸太大会导致画面模糊,小孔的尺寸太小会导致没有足够的能量穿过小孔,画面很暗,并且由于衍射的原因,画面也会模糊。即便是非常仔细的调整小孔的尺寸,最后的成像效果都不够清晰,因为事实上由于光的波粒二象性,几何光学中理想的小孔成像就不存在。
在31. 镜头、曝光,以及对焦(上), 32. 镜头、曝光,以及对焦(下)中,我还给你介绍了人们采用镜头来弥补小孔成像的缺陷。这样获得了更好的光能利用率,更清晰的成像。
理想的镜头成像时,一个对焦平面上的物点会投影为一个像点:
但事实上理想的镜头时不存在的,镜头总是存在一些缺陷会导致一个物点会投影为很多点。一个理想点经过相机后成的像由点扩散函数PSF(Point Spread Function)来描述。
镜头的缺陷有两类:
- 像差,比如色差和球差
- 衍射,这是因为光的波动性导致的,只要光通过光圈就会产生衍射
我们可以认为这种效应是空间不变的,即空间中任何一点在任意一个像平面上都会呈现同样的缺陷——即你用相机拍出的照片永远是不够清晰的。
在这篇文章中,我们先忽略掉像差,只考虑衍射。那么一个理想的小点通过圆形光圈后的PSF会呈现出一种特别的形态,这是一种叫做Airy Pattern的图像,这种因为衍射形成的PSF我们称之为衍射极限PSF(Diffraction Limit PSF)
而如果对此PSF做傅里叶变换(相关知识见:6. 傅里叶变换与图像的频域处理),就可以得到这个镜头的光学传递函数OTF(Optical Transfer Function),它长这个样子:
那么镜头的PSF或OTF,对于成像的具体影响是什么呢?
假设有一个理想镜头,不受衍射的影响,用它所成的像为x, 而实际镜头的PSF为c, 实际镜头的成像是b,那么这三者之间的关系是一种典型的卷积关系:
那么一个很自然的想法就是,如果我们有实际镜头的成像,另外还知道了镜头的PSF,即我们知道了上式的b和c,是否可以得到更加理想的成像x呢?
下面这一节我就来探讨这个问题。
二、去卷积和维纳滤波
这似乎是很显然能够成立的。由于空域的卷积等效于频域的乘法,因此我们只需要在频域上做除法,就能很好的恢复出x了,我们把这个过程称为Deconvolution,去卷积:
这种想法有没有问题呢? 实际上有两个问题:
- OTF的高频部分为0,这可以很容易从图像上看出
2. 实际成像系统有噪声,所以实际的成像公式是(其中n是指噪声)
也就是说b里面含有噪声,所以如果简单的用F(b)/F(c), 就会放大系统中高频部分的的噪声,最后只会得到一幅全是噪声的图像。下面是在故意在b里面加入了方差为0.05的轻微高斯噪声的去卷积结果,你可以看到即便b里面有轻微的噪声,用这种方式也只能得到一幅噪声图像。
那么,有没有更好的方法呢?事实上,已知模糊的图像b以及成像系统的PSF,恢复原始图像x的过程叫做非盲去卷积(Non-blind deconvolution)。这个领域有大量的研究成果。
其中最最经典的方法之一,莫过于1942年发表的维纳滤波(Wiener Filter),它把图像和噪声都看做是随机过程,并把去卷积的问题看作是一个最大似然问题去求解。最后的结果中,包含了一个关键的噪声相关的阻尼因子
其中分母有一项是SNR(ω),它是值在频率ω的信噪比
当噪声很低时,SNR(ω)很高,上式接近于 F^{-1}(\frac{F(b)}{F(c)}) 。 而当噪声较大时,则上式接近于0实际上,对于自然图像,一般认为其功率谱与 \frac{1}{\omega^2} 线性相关,同时我们认为噪声是白噪声,其功率是与频率无关的常量,那么一般SNR(ω)=\frac{1}{\omega^2}
此时,我们可以将维纳滤波简化为:
我们可以比较下基本的频域除法去卷积和这种维纳滤波去卷积的结果差异,很显然维纳滤波得到了正确的结果
再看看不同噪声水平对维纳滤波的影响,可以看到维纳滤波对不同噪声水平的图像都能恢复出较好的X,当然如果图像b中噪声较高,那么恢复的图像中的噪声也会较高。
三、维纳滤波的推导
现在让我们来看看如何从下面这个简单的成像公式推导出维纳滤波
空域的卷积对应着频域的乘法,于是:
现在我们可以把去卷积的问题看作是寻找一个频域函数H(ω),它可以使得下面的期望误差最小:
于是问题就转换为:
将B的表达式带入:
展开这个式子有:
这里因为噪声N和图像X不相关,于是
因为噪声均值为0,这样E[XN] = 0
这样我们可以把上面的最小化表达式写作:
对下面这个loss求梯度
并设 \frac{\partial Loss}{\partial H}=0 ,那么有:
分子分母同时处以E(||X^2|| ,就可以得到
那么维纳滤波就是F^{-1}(HB)
将C重新写作F(c), B写作F(b), 于是就得到了我们上面介绍过的维纳滤波表达式:
四、维纳滤波的另一种理解
上面我们把问题看做为了一个在频域上的最小化问题,但我们也可以把问题看做是空域上的最小化问题:
这里的第一项描述了清晰图像和模糊图像之间的关系,而第二项则是梯度正则化项,用于惩罚过大的梯度信息(噪声会带来大的梯度,因此第二项就含有降噪的功效)
我们可以看看梯度正则化带来的好处,下面的示例图中两幅模糊图像具有不同的模糊程度和不同的噪声水平,可以看到采用梯度正则化都得到了不错的结果,而不用正则化项(相当于频域上直接的除法做去卷积),则造成了很大的噪声。
有很多学者尝试了各种不同的正则化项,例如:
有时候,这些新的方法会得到比维纳滤波更好的结果:
五、更多非盲去卷积的方法
除了这种直接求解的去卷积方式,还有一类方式是通过迭代的方式得到结果。这种迭代的方式通常能够比直接求解的方式得到更好的结果,其中最最经典的莫过于Richardson和Lucy独立在1972和1974年提出的Richardson-Lucy方法,这是一种非线性的方法。为了表述清晰,我们用新的符号来表述各个图像:
那么,第k+1次迭代的结果可以表述为:
Richardson-Lucy方法在相关领域得到了很广泛的应用,也给了后面研究这个问题的学者很多启示。
还值得一提的是下面这篇文章。我们刚刚提到的方法仅仅用于处理空间不变的模糊核问题,不能解决色差、像差问题。而这篇文章则尝试用去卷积的思想同时解决多类图像质量的损失问题,并尝试用廉价的单片透镜来获得接近昂贵的高质量的镜头组的成像效果
Heide et al., “High-Quality Computational Imaging Through Simple Lenses,” TOG 2013
作者的目标:
下面是作者的演示视频:
六、总结
今天沿着前面31. 镜头、曝光,以及对焦(上)、32. 镜头、曝光,以及对焦(下)等文章的思路,给大家介绍了镜头由于衍射带来的成像质量损失。介绍了点扩散函数(PSF)和它的傅里叶变换光学传递函数(OTF)。接着介绍了去卷积Deconvolution的思想,以及一种超级经典的、诞生于1942年的非盲去卷积方法:维纳滤波。它能够复原由于衍射导致的图像模糊。实际上,任何线性移不变的PSF导致的图像模糊都可以用维纳滤波进行复原。
除了维纳滤波之外,后来者还研究了很多非盲去卷积的方法,包括现在还有很多基于深度学习的方法。非盲去卷积已经应用在了图像处理的很多领域。而我自己现在最感兴趣的则是利用廉价镜头取代昂贵的镜头组的想法,文献[3]作出了很好的示范。
不知道你看了文章后,有没有新的想法出现? 感谢你阅读这篇文章,希望我给了你启发。别忘了给我点赞哦
有进一步疑问可点下面链接向我咨询
我的这个专栏会全面的讲解计算摄影学相关的知识,但无论之后你看到的内容多么新奇,计算摄影学最最基础的部分却首先是”获取图像的过程“。虽然我在专栏里面已经做了一些讲解了,但此前还是缺乏以视频形式对”成像"这一基础过程的传道答疑解惑。现在,我酝酿已久的构建在国际顶尖大学相关课程基础上的计算摄影学系列视频课程总算落地了。第一季讲解的就是刚才我说的“成像”这个过程,除了我在专栏中提到的一些内容,我特意增加了一些重要的与相机成像的知识和实践作业。在这个课程中,你有机会练习制作小孔相机并尝试获取到最佳的成像,然后用它真实地拍摄你周围的环境。有机会学习如何用光线追踪法准确的绘制光线透过传统凸透镜和凹透镜、甚至复杂的透镜组的走向,还能学会用成像理论分析DollyZoom(推拉镜头)这样的电影特效的原理。你还可以学会量化的分析镜头的景深,学会如何计算镜头的等效焦距,为选用合适的镜头和相机组合准确成像打下坚实的基础。你还将完成一个较为系统的大作业,学会如何用单反获取到RAW图像,并写出完整的代码将RAW图像转换为我们肉眼可见的图像。如果你对这个课程感兴趣的话,可以点击下面的链接了解详情,希望对你有帮助:
七、参考文献
本文的参考资料有
- CMU 2017 Fall Computational Photography Course 15-463, Lecture 17
- Restoration of defocused and blurred images
- Heide et al., “High-Quality Computational Imaging Through Simple Lenses,” TOG 2013另外
本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎扫码关注,
你好,冒昧地和您讨论一下,觉得你正文里有两处公式似乎有问题。第一处是将B带入到最小期望误差里,(1-HC)您写成了(1+HC);另一处是求出H,分子应该为C^2.否则上下文不一致。请您确认
分子那个没问题吧,后面代入逆变换时,分子分母同乘了C
其实不是,去卷积的本质是放大特定频率的信号,PSF决定了具体放大哪种信号(低频还是高频,x2还是x20)。以低通滤波为例,而高频信息必须仍然在你模糊的照片里(只是能量太弱,肉眼看不出来),如果高频完全丢失为零,那去卷积也无能为力。至少得有部分高频,且比噪声要强一点(SNR不能太低),然后才能通过去卷积对高频乘以一个恢复系数,使其高频强度增强到合理范围,人眼才能看到高频+低频叠加的图像。
可以试一下把维纳过滤器放在频域下看,对于低通高斯滤波PSF,其产生的去卷积因子的频域形式就是一个环,刚好罩在高斯开始衰减的位置,所以其目的就是把高斯滤波器衰减的频率给补偿回来。
维纳滤波推导的部分,带入B的表达式时有错误,应该是(1-HC)X-HN
你好,我的理解是可以的,去卷积的一大应用就是我所讲的把模糊图像变清晰。我文章里面最后贴出的视频的引文就是想这样做。 但是获取到镜头的PSF还是很困难的事情,所以我接下来就会谈到另外一种去卷积方法:盲去卷积
有已嵌入反卷积功能的商业软件 通用软件吗?
非常多,各行各业,计算光刻,计算成像,Adobe旗下PS等等等等
最后那个视频有电影里那种效果
将B的表达式带入那步,为啥不是1-HC?
请问作者,模糊核的大小是怎么确定的呢?