本文主要是介绍图像去噪-NL Means,BM3D与DCT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基础
ShaneHolmes的图像处理专栏:图像各种噪声及消除方法 中记录了噪声来源、分类和处理噪声的基本方法
高斯白噪声:加性噪声的理想模型,通信系统中的热噪声统计上符合高斯白噪声。
非局部均值去噪(NL-means)
基本思想:像素的估计值 u ^ \hat{u} u^由与之具有相似邻域结构的像素加权平均得到。其权重 w ( p , q ) w(p,q) w(p,q)等于两点的相似度。这个邻域 ( 2 r + 1 ) × ( 2 r + 1 ) (2r+1)\times(2r+1) (2r+1)×(2r+1)也称为搜索区域。
u ^ i ( p ) = 1 C ( p ) ∑ q ∈ B ( p , r ) u i ( q ) w ( p , q ) \hat{u}_{i}(p)=\frac{1}{C(p)}\sum_{q\in B(p,r)}{u_i(q)w(p,q)} u^i(p)=C(p)1q∈B(p,r)∑ui(q)w(p,q)
C ( p ) = ∑ q ∈ B ( p , r ) w ( p , q ) C(p)=\sum_{q\in B(p,r)}{w(p,q)} C(p)=q∈B(p,r)∑w(p,q)
衡量相似度的方法有非常多,文章中给出的是两个像素的亮度值的差的平方。
d 2 ( B ( p , f ) , B ( q , f ) = 1 3 ( 2 f + 1 ) 2 ∑ i = 1 3 ∑ j ∈ B ( 0 , f ) ( u i ( p + j ) − u i ( q + j ) ) 2 d^{2}(B(p,f), B(q,f)=\frac{1}{3(2f+1)^2}\sum_{i=1}^{3}{\sum_{j\in B(0,f)}{(u_i(p+j)-u_i(q+j))^2}} d2(B(p,f),B(q,f)=3(2f+1)21i=1∑3j∈B(0,f)∑(ui(p+j)−ui(q+j))2
降低噪声影响,我们考虑两个像素的邻域 ( 2 f + 1 ) × ( 2 f + 1 ) (2f+1)\times(2f+1) (2f+1)×(2f+1),只有邻域相似度高,才能说明这两个像素相似度高。
w ( p , q ) = e − m a x ( d 2 − 2 σ 2 , 0.0 ) h 2 w(p,q)=e^{-\frac{max(d^2-2\sigma^2, 0.0)}{h^2}} w(p,q)=e−h2max(d2−2σ2,0.0)
h h h是滤波系数,控制指数函数衰减从而改变欧氏距离的权重。
如上图所示, p p p为去噪的点,因为 q 1 q1 q1和 q 2 q2 q2的邻域与 p p p相似,所以权重和比较大,而邻域相差比较大的点 q 3 q3 q3的权重值很小。
参考资料:
xiaoluo91 非局部均值去噪(NL-means):含python代码
图像去噪算法:NL-Means和BM3D(转载+个人笔记)
最经典最新的图像去噪算法
论文:
- Antoni Buades, Bartomeu Coll, and Jean-Michel Morel, Non-Local Means Denoising, Image Processing On Line, 1 >(2011). http://dx.doi.org/10.5201/ipol.2011.bcm_nlm
- Jacques Froment, Parameter-Free Fast Pixelwise Non-Local Means Denoising, Image Processing On Line, 4 (2014), pp. 300–326. http://dx.doi.org/10.5201/ipol.2014.120
NL-means加速算法
构造积分图像:
S t ( x ) = ∑ z 1 ≤ x 1 , z 1 ≤ x 2 s t ( z ) , x = ( x 1 , x 2 ) S_t(x)=\sum_{z_{1} \leq x_1, z_{1} \leq x_2}s_t(z),x=(x_1,x_2) St(x)=z1≤x1,z1≤x2∑st(z),x=(x1,x2)
其中, s t ( z ) = ∑ i = 1 3 ∑ j ∈ B ( 0 , f ) ( u i ( p + j ) − u i ( q + j ) ) 2 s_t(z)=\sum_{i=1}^{3}\sum_{j\in B(0,f)}(u_i(p+j)-u_i(q+j))^2 st(z)=∑i=13∑j∈B(0,f)(ui(p+j)−ui(q+j))2。
则,计算 x x x与 y = x + t y=x+t y=x+t间的距离:
d 2 ( B ( x , f ) , B ( y , f ) ) = 1 3 ( 2 f + 1 ) 2 ∑ i = 1 3 ∑ j ∈ B ( 0 , f ) ( u i ( p + j ) − u i ( q + j ) ) 2 d^2(B(x,f),B(y,f))=\frac{1}{3(2f+1)^2}\sum_{i=1}^{3}{\sum_{j\in B(0,f)}{(u_i(p+j)-u_i(q+j))^2}} d2(B(x,f),B(y,f))=3(2f+1)21i=1∑3j∈B(0,f)∑(ui(p+j)−ui(q+j))2
参考资料:
积分图像的应用(二):非局部均值去噪(NL-means)
论文:Jacques Froment, Parameter-Free Fast Pixelwise Non-Local Means Denoising, Image Processing On Line, 4 (2014), pp. 300–326. http://dx.doi.org/10.5201/ipol.2014.120
BM3D 3维块匹配滤波 去噪算法
图像去噪算法大致可以分为:空域方法(spatial method) 利用图片中不同位置的相似信息进行去噪,例如上面的NL-means和NL-Bayes;变换域方法(transform method),转换到其他空间,如频域,在利用对有效信号与噪声的特性进行降噪,例如小波萎缩法。BM3D算法综合了NLM和小波萎缩两种算法,利用了NLM的块之间相关性(inter-patch correlation)和小波萎缩法的块内相关性(intra-patch correclation),是当前行之有效的去噪算法。
BM3D算法流程如上,分为两大步:Step 1 基础估计;Step 2 最终估计。
每个步骤中分为三小步:相似块分组(Grouping),协同滤波(Collaborative Filtering)和聚合(Aggregation)。Step 1中用Hard-thresholding进行协同滤波,Step 2中用维纳滤波方法进行协同滤波。
在资料最经典最新的图像去噪算法中,博文论述的每一步的具体步骤。下文会进行转载与加工。
协同滤波
协同取自字面意思,就是说同组内的 n n n个块以某种合作的方式来滤波。假设每一个块都有独立的二维变换, n n n个块的总有效变换系数为 α n \alpha n αn;然而我们的这一组块取的是相似度高的一些块,这样会有很多冗余信息。所以,作者提出对整租进行三维变换(即对二维变换后的所有块再进行一个一维变换),其有效变换系数近似于 α \alpha α。
两个小块之间的相似度匹配
参考资料:
BM3D图像去噪算法
最经典最新的图像去噪算法
论文:
- K. Dabov, A. Foi, V. Katkovnik, and K. Egiazarian, “Image denoising by sparse 3D transform-domain collaborative filtering,” IEEE Trans. Image Process., vol. 16, no. 8, pp. 2080-2095, August 2007.
- K. Dabov, A. Foi, V. Katkovnik, and K. Egiazarian, “Image denoising with block-matching and 3D filtering,” Proc. SPIE Electronic Imaging '06, no. 6064A-30, San Jose, California, USA, January 2006.
- http://www.cs.tut.fi/~foi/GCF-BM3D/
- Marc Lebrun, An Analysis and Implementation of the BM3D Image Denoising Method, Image Processing On Line, 2 (2012), pp. 175–213.
Randomized Redundant DCT
前面两种算法感觉都有点慢,这篇文章作者给出的算法确实效率很高,但还是达不到笔者想要的效果。最终还是回归深度学习。
文章主页:Randomized Redundant DCT: Efficient Denoising by Using Random Subsampling of DCT Patches
Code: git
这篇关于图像去噪-NL Means,BM3D与DCT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!