图像降噪,是最简单也是最基础的图像处理逆问题(inverse problem)。
大多数情况下,图像降噪都是ill-posed的问题。因为通过有噪音的观察,总是无法逆向求得唯一正确的干净图片。就好像让你解一个超越方程一样,不借助其他额外的条件信息,是没有唯一解的。
降噪问题(这里只讨论additive noise),用最简单的数学语言一句话就可以描述清楚:
y = x + e
y是你观察到的带噪音的图像,e是噪音,x是干净无噪音的图像。只已知y,外加e的概率分布,降噪问题需要你去寻找最接近真实值的x。
说起来降噪问题如此简单明了,但自从信号处理开宗立派起,研究人员一直在孜孜不倦地提出各种降噪算法。我最早也没搞懂,大家何必纠结于这么简单的问题,而不去考虑更复杂,更贴近实际的花哨应用?
然而世间万物的规律,万变不离其中:不管多复杂问题,其本质往往都有简单的起源。而看似简单的问题,往往却是高手一身修行的追求:就好像考察一个书法家功力,看他写一个永字就好;看一个川菜厨师功力,看他做一道开水白菜就好。
科研之道和其他道也类似,简单的任务见到的是这个approach的潜力:这仅仅是起点,而不是终点。一个好的科研者应该要着眼于起点,追求问题的本源,然后拓展到未来,此为道。只追求花哨的应用,拼凑堆叠,舍本求末甚至本末倒置,只能为术。
好吧,扯远了。我就是想说,图像降噪问题,最简单也最困难。
那么要怎么解好这个逆问题呢?
降噪的本质,是要从观测值中分离噪音,保留图像。算法的关键,是要掌握并借助于图像本身独特的性质和结构。具体用什么性质,这个流派就多了,我在这里就先提供一个不完全总结,关于近期的一些好的图像降噪算法。
根据算法利用了什么图像性质,或者用到的手段,我大概把各种算法分成如下几类:
我根据我的了解,对于每一个类比总结了一个常见算法列表。
入选的算法要满足:1.近期(05年以后)提出的算法,2.有可复现的代码提供,3.可以得到很好,或者接近state-of-the-art的效果。
由于我的水平有限,希望同行高手来帮这个public repo添砖加瓦。
以下是可复现的图像降噪算法列表,包含了简要的算法介绍,若想了解算法详情,可在该链接中查看:https://github.com/wenbihan/reproducible-image-denoising-state-of-the-art
A non-local algorithm for e denoising (CVPR 05), Buades et al.
Image restoration by sparse 3D transform-domain collaborative filtering (SPIE Electronic Imaging 2008), Dabov et al.
Progressive Image Denoising (TIP 2014), C. Knaus et al.
Image Denoising Via Sparse and Redundant Representations Over Learned Dictionaries (TIP 2006), Elad et al.
Non-local Sparse Models for Image Restoration (ICCV 2009), Mairal et al.
Nonlocally Centralized Sparse Representation for Image Restoration (TIP 2012), Dong et al.
Structured Overcomplete Sparsifying Transform Learning with Convergence Guarantees and Applications (IJCV 2015), Wen et al.
Group-based Sparse Representation for Image Restoration (TIP 2014), Zhang et al.
From Learning Models of Natural Image Patches to Whole Image Restoration (ICCV2011), Zoran et al.
Texture Enhanced Image Denoising via Gradient Histogram Preservation (CVPR2013), Zuo et al.
Patch Group Based Nonlocal Self-Similarity Prior Learning for Image Denoising (ICCV 2015), Xu et al.
External Patch Prior Guided Internal Clustering for Image Denoising (ICCV 2015), Chen et al.
Nonlocal image restoration with bilateral variance estimation: a low-rank approach (TIP2013), Dong et al.
Weighted Nuclear Norm Minimization with Application to Image Denoising (CVPR2014), Gu et al.
Multi-channel Weighted Nuclear Norm Minimization for Real Color Image Denoising (ICCV 2017), Xu et al.
Shrinkage Fields for Effective Image Restoration (CVPR 2014), Schmidt et al.
Trainable nonlinear reaction diffusion: A flexible framework for fast and effective image restoration (TPAMI 2016), Chen et al.
Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising (TIP2017), Zhang et al.
When Image Denoising Meets High-Level Vision Tasks: A Deep Learning Approach (Arxiv2017), Ding Liu, Bihan Wen, Xianming Liu, Thomas S. Huang.
Benchmarking Denoising Algorithms with Real Photographs (CVPR 2017), Tobias Plotz, Stefan Roth.
下面对于这几类算法的一些简略地解释:
滤波类:相对比较传统的一类算法,通过设计滤波器对图像进行处理。特点是速度往往比较快,很多卷积滤波可以借助快速傅里叶变化来加速。近期的一些算法例如BM3D也结合了一些block matching来利用图片的self-similarity,达到了很棒的效果。
稀疏表达类:自然图片之所以看起来不同于随机噪音/人造结构,是因为大家发现他们总会在某一个模型(synthesis model或者analysis model)下存在稀疏表达。而我们想排除的噪音往往无法被稀疏化。基于这个判别式模型(discriminative model),用稀疏性来约束自然图像,在很多逆问题里取得了拔群的效果。
外部先验(external prior):如果从有噪音的图片本身无法找到规律,我们也可以借助其他类似但又没有噪音的图片,来总结图片具有的固有属性。这一类方法利用的外部图片来创造先验条件,然后用于约束需要预测的图片。最有代表性的工作,就是混合高斯模型(Gaussian Mixture Model)。严格来说,基于深度学习的算法也可以归于这个类。
聚类低秩(Low-Rankness):除了可稀疏性,低秩性也是自然图片常见的一个特性。数学上,可稀疏表达的数据可以被认为是在Union of low-dimensional subspaces;而低秩数据则是直接存在于一个Low-dimensional subspace。这个更严格的限制往往也可以取得很好的降噪效果。
深度学习(Deep Learning):这类可以归于外部先验的子类,但由于近期大热,我单独拿出来说说。如果说解决逆问题的关键,是寻找一个好的图像约束器(regularizer),那么我们为什么不用一个最好的约束器?深度学习方法的精髓,就在于通过大量的数据,学习得到一个高复杂度(多层网络结构)的图片约束器,从而将学习外部先验条件这一途径推到极限。近期的很多这类工作,都是沿着这一思路,取得了非常逆天的效果。
根据我的经验,基本上主流的图像降噪算法,都可以被放到这上面的5种类型中。
具体论文下载和代码见:https://github.com/clxiao/Image-Denoising-State-of-the-art