最近研究了一下防抖算法,总结如下,欢迎大家交流。防抖算法我总结一下三个方向:
- deconv method
- base gyro method
- feature method
下面说一下我对上述各种方法的理解。
- deconv method
该方法的模型数学表示如下:
Blurred image=Sharp image* kernel+Noise 公式1
这样问题就来了,当我们有且仅有一个模糊图像的时候,这个模型的数学表达就是一个ill-problem.在这种情况下,许多牛人提出了各种方法,但是都会有一个问题,离开不了预设初始化、迭代、傅立叶变换等条件。我在matlab跑了下代码,嗯,60分钟左右,一张几兆分辨率的图像。这里有兴趣的同学推荐阅读paper:
Deblurring Text Images via L 0 -Regularized Intensity and Gradient Prior
Deblurring Shaken and Partially Saturated Images
Fast Motion Deblurring
Learning Good Regions to Deblur Images
我总结如下:算法复杂度过高。
- base gyro method.
这种方法是基于移动设备的陀螺仪来确定公式1的kernel,接下来是用deconv啊还是使用winner滤波等方法进行防抖处理。上图。
推荐paper如下:
Gyro-Based Multi-Image Deconvolution for Removing Handshake Blur
**Image deblurring in smartphone devices using
built-in inertial measurement sensors**
只进行了一下winner滤波在指定psf下的仿真,由此可证明在保证陀螺仪判断kernel靠谱的情况下,该方法可行。
运行时间为1M分辨率的情况下 800ms。该方法可拓展为把图像分为大小相同的block,并进行分别的PSF和image restroe,这样理论上可以提高速度。因为winner滤波的本质就是7次傅立叶变换,可以使用fftw和neon进行加速。
feature method
该方法是我由video stabilization algorithm总结而来,基本上特征点-匹配-warpping的方法进行视频稳像。推荐paper:
Bundled Camera Paths for Video Stabilization
该论文的核心思想如下图所示:
该paper提出的思想如下,分成各个block确定各个block的端点,进行feature point检测,再进行匹配,根据上述信息进行warpping,得到最终稳定图像。
本想上传仿真图像,但超过2M,懒得上传了。
说下结论吧,可以稳像,但deblur效果一般。如果两帧的图像都有局域较大的blur,基本没啥效果。如果使用Surf工程化的时候也会有问题,因为surf向量是64维的,memory占用会较大。13M图像花了13s,呃,surf大约耗时5s,warpping 8s。
可以考虑基于多种feature point 进行优化。
有误之处,大家多多指教。
本文介绍了防抖算法的三种主要方法:deconv方法、base gyro method和feature method。deconv方法由于算法复杂度过高,实际应用受限;base gyro method依赖陀螺仪数据,通过winner滤波实现快速防抖;feature method采用特征点匹配稳像,但deblur效果一般。每种方法的优缺点和适用场景进行了讨论。

1150

被折叠的 条评论
为什么被折叠?



