人工智能
图像降噪,是最简单也是最基础的图像处理逆问题(inverse problem)。
大多数情况下,图像降噪都是ill-posed的问题。因为通过有噪音的观察,总是无法逆向求得唯一正确的干净图片。就好像让你解一个超越方程一样,不借助其他额外的条件信息,是没有唯一解的。
降噪问题(这里只讨论additive noise),用最简单的数学语言一句话就可以描述清楚:
y = x + e
y是你观察到的带噪音的图像,e是噪音,x是干净无噪音的图像。只已知y,外加e的概率分布,降噪问题需要你去寻找最接近真实值的x。
说起来降噪问题如此简单明了,但自从信号处理开宗立派起,研究人员一直在孜孜不倦地提出各种降噪算法。我最早也没搞懂,大家何必纠结于这么简单的问题,而不去考虑更复杂,更贴近实际的花哨应用?
然而世间万物的规律,万变不离其中:不管多复杂问题,其本质往往都有简单的起源。而看似简单的问题,往往却是高手一身修行的追求:就好像考察一个书法家功力,看他写一个永字就好;看一个川菜厨师功力,看他做一道开水白菜就好。
科研之道和其他道也类似,简单的任务见到的是这个approach的潜力:这仅仅是起点,而不是终点。一个好的科研者应该要着眼于起点,追求问题的本源,然后拓展到未来,此为道。只追求花哨的应用,拼凑堆叠,舍本求末甚至本末倒置,只能为术。
好吧,扯远了。我就是想说,图像降噪问题,最简单也最困难。
那么要怎么解好这个逆问题呢?
降噪的本质,是要从观测值中分离噪音,保留图像。算法的关键,是要掌握并借助于图像本身独特的性质和结构。具体用什么性质,这个流派就多了,我在这里就先提供一个不完全总结,关于近期的一些好的图像降噪算法。
根据算法利用了什么图像性质,或者用到的手段,我大概把各种算法分成如下几类:
滤波类
稀疏表达类
外部先验
聚类低秩
深度学习
我根据我的了解,对于每一个类比总结了一个常见算法列表:wenbihan/reproducible-image-denoising-state-of-the-art
入选的算法要满足:1.近期(05年以后)提出的算法,2.有可复现的代码提供,3.可以得到很好,或者接近state-of-the-art的效果。
由于我的水平有限,希望同行高手来帮这个public repo添砖加瓦。
下面对于这几类算法的一些简略地解释:
滤波类:相对比较传统的一类算法,通过设计滤波器对图像进行处理。特点是速度往往比较快,很多卷积滤波可以借助快速傅里叶变化来加速。近期的一些算法例如BM3D也结合了一些block matching来利用图片的self-similarity,达到了很棒的效果。
稀疏表达类:自然图片之所以看起来不同于随机噪音/人造结构,是因为大家发现他们总会在某一个模型(synthesis model或者analysis model)下存在稀疏表达。而我们想排除的噪音往往无法被稀疏化。基于这个判别式模型(discriminative model),用稀疏性来约束自然图像,在很多逆问题里取得了拔群的效果。
github.com/wenbihan/rep
外部先验(external prior):如果从有噪音的图片本身无法找到规律,我们也可以借助其他类似但又没有噪音的图片,来总结图片具有的固有属性。这一类方法利用的外部图片来创造先验条件,然后用于约束需要预测的图片。最有代表性的工作,就是混合高斯模型(Gaussian Mixture Model)。严格来说,基于深度学习的算法也可以归于这个类。
聚类低秩(Low-Rankness):除了可稀疏性,低秩性也是自然图片常见的一个特性。数学上,可稀疏表达的数据可以被认为是在Union of low-dimensional subspaces;而低秩数据则是直接存在于一个Low-dimensional subspace。这个更严格的限制往往也可以取得很好的降噪效果。
深度学习(Deep Learning):这类可以归于外部先验的子类,但由于近期大热,我单独拿出来说说。如果说解决逆问题的关键,是寻找一个好的图像约束器(regularizer),那么我们为什么不用一个最好的约束器?深度学习方法的精髓,就在于通过大量的数据,学习得到一个高复杂度(多层网络结构)的图片约束器,从而将学习外部先验条件这一途径推到极限。近期的很多这类工作,都是沿着这一思路,取得了非常逆天的效果。
对于我总结的每一个类别,我都在创建的【github page】里面列举了一些推荐的工作,并且附带其可复现的代码实现。(你还在为写paper跑实验,不知道和哪些baseline做对比吗?还在为读了paper不知道怎么实现算法而苦恼吗?还在不知道怎么上手吗?请猛戳这里,-_-||)
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !