你有没有想过把模糊的图像变清晰?就像这样:
或者这样:
今天我将给你介绍这种神奇的技术:去卷积
图像的模糊有很多种可能性,包括了:
- 镜头的缺陷
- 相机的抖动
- 场景的运动
- 景深的限制
- 后期的处理
让我先从第一种镜头的缺陷导致的图像模糊讲起,因为这是所有的镜头都会存在的固有的问题。
一、镜头的缺陷以及衍射极限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(ω)很高,上式接近于
。而当噪声较大时,则上式接近于0实际上,对于自然图像,一般认为其功率谱与
线性相关,同时我们认为噪声是白噪声,其功率是与频率无关的常量,那么一般SNR(ω)=
此时,我们可以将维纳滤波简化为:
我们可以比较下基本的频域除法去卷积和这种维纳滤波去卷积的结果差异,很显然维纳滤波得到了正确的结果
再看看不同噪声水平对维纳滤波的影响,可以看到维纳滤波对不同噪声水平的图像都能恢复出较好的X,当然如果图像b中噪声较高,那么恢复的图像中的噪声也会较高。
三、维纳滤波的推导
现在让我们来看看如何从下面这个简单的成像公式推导出维纳滤波
空域的卷积对应着频域的乘法,于是:
现在我们可以把去卷积的问题看作是寻找一个频域函数H(ω),它可以使得下面的期望误差最小:
于是问题就转换为:
将B的表达式带入:
展开这个式子有:
这里因为噪声N和图像X不相关,于是
因为噪声均值为0,这样E[XN] = 0
这样我们可以把上面的最小化表达式写作:
对下面这个loss求梯度
并设
,那么有:
分子分母同时处以
,就可以得到
那么维纳滤波就是
将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]作出了很好的示范。
不知道你看了文章后,有没有新的想法出现? 感谢你阅读这篇文章,希望我给了你启发。别忘了给我点赞哦?
七、参考文献
本文的参考资料有
- 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另外