introduce

主流方法

两种消除运动模糊的技术,一个叫做Coded Exposure Photography(编码曝光),确切的说是一种利用了Flutter Shutter(震颤快门)的编码曝光技术。多用于全局模糊。
另外一种则是Motion Invariant Photography(运动不变摄影)。多用于局部运动物体模糊。

运动模糊的基本模型

一个典型的场景,这里面背景和部分物体是固定的,但有一个装着快速的物体从左向右移动,使得拍摄的画面中出现了部分物体运动模糊。运动模糊和我们之前讲过的几种模糊都可以用卷积来描述。具体到上面这种均匀运动的模糊,可以如下表示:清晰图像 X 运动模糊kernel = 运动模糊图像。理论上只需要解这个方程(de-Conv)即可。
但是,存在如下问题:

  1. 很难获取到准确的卷积核,因为卷积核跟物体的远近(D)、物体运动的速度(V)方向(FOV)都有关系。这就使得不同深度的物体模糊程度不同,不能用一个卷积核简单还原出所有物体。
  2. 场景中的各个物体有不同的运动方向和速度,还可能有固定的背景,所以需要把需要恢复的物体分割开来,而这本来就是一个困难的问题。其中各物体是否运动甚至都无法确定。
  3. 运动卷积核丢失了高频信息,去卷积技术就会面临严重的信噪比低的问题。
  4. 运动导致的物体位置变化

Coded Exposure

模糊相当于对图像做一个一维的Box Filter,而这个卷积核的傅里叶变换(即OTF)如下图所示,它实际上是一个Sinc函数,可以看到这里有一些值接近零的点。

opencv 图像去运动模糊 opencv消除快速运动模糊_c++


于是当我们用去卷积技术去尝试恢复清晰图像时,会因为OTF的大量零点而出现大量的噪声,最终结果信噪比极低(如下图所示)。我们说这时的运动模糊使得很多频域信息损失掉了,所以无法准确的恢复出原始信号。

减少频域信息的损失:Coded Exposure

Raskar et al., “Coded Exposure Photography: Motion Deblurring using Fluttered Shutter,” SIGGRAPH 2006.

Flutter Shutter是指快门交替开关的技术。用这种技术拍出来的图像依然是模糊的,但这种模糊里面却依然保留了尽可能多的频域信息,所以这种情况下拍摄的图像的模糊形态和普通相机是不一样的。卷积算法对其进行去模糊时,就可以得到比较清晰的信噪比较高的图像。
在曝光时间内快门交替开关能比一直打开保持更多的频域信息,使得最终图像经过去卷积后得到更清晰的图像。那么,到底如何开闭快门能够收益最大呢?

在上述论文中,作者把快门的开关看做是一种二进制编码,开为1,关为0,这样快门的状态就形成了一个编码——这也是为什么称作Coded Exposure的原因。然后作者比较了几种不同的编码,最终认为一种有52比特的编码形态能够使得整个系统保留最宽广的频率响应,从而信噪比最高。你可以看到下图中,最后一种编码的频率响应最平坦、稳定,且没有过零点。

opencv 图像去运动模糊 opencv消除快速运动模糊_python_02

作者采用的这种52bit的编码中有26个1,26个0,这意味着相比传统相机这种方式损失了一半的光能。 需要分割运动的物体和固定的背景,否则做全局的去卷积会使得背景被破坏。

Motion Invariant Photograpny(运动不变摄影)

Levin et al., “Motion-Invariant Photography,” SIGGRAPH 2008

Motion Invariant Photograpny的思路是通过将整个图像的模糊程度变均匀,使之与物体的远近、运动速度等都不相关,这样就可以用简单的单一去模糊算法来使得图像变清晰了。这个思想就是来自于波前编码和对焦扫描。

conclusion

一个是利用震颤快门的编码曝光,另外一个则是利用抛物线扫描实现的运动不变摄影。
编码曝光使得模糊的图像中保留了尽可能多的频域信息,所以去卷积能够得到信噪比较高的图像。但是由于画面中同时存在不同运动速度的物体,还有固定的背景,而震颤快门不能做到模糊程度与运动速度、方向无关,所以还需要手动介入来进行分割,把想要变清晰的物体分割出来处理。同时,由于我们很难去估计此时的有效卷积核,因此需要进行较多的试错。同时,编码曝光使得快门有一半的时间是关闭的,因此整体画面会偏暗。
而利用抛物线扫描实现的运动不变摄影则使得整个画面的模糊与物体的运动速度、方向都无关,同时作者还证明了此时的有效卷积核中保留了比编码曝光时更多的频域信息(参看作者论文[3]),因此其最终结果更好(见下图):