
原理:首先将一幅图像分割成尺寸较小的小像素片,选定参考片后,寻找与参考片相似的小片组成 3D 块。此过程过后将得到 3D 块。然后将所有相似块进行 3D 变换。将变换后的 3D 块进行阈值收缩,这也是除去噪声的过程。然后进行 3D 逆变换。最后将所有的 3D 块通过加权平均后还原到图像中。
BM3D算法的大致流程:
第1步. 初始估计
(1)逐块估计。对含噪图像中的每一块
(i)分组。找到它的相似块然后把它们聚集到一个三维数组。
(ii)联合硬阈值。对形成的三维数组进行三维变换,通过对变换域的系数进行硬阈值处理减弱噪声,然后逆变换得到组中所有图像块的估计值,然后把这些估计值返回到他们的原始位置。
(2)聚集。对得到的有重叠的块估计,通过对他们进行加权平均得到真实图像的基础估计。
第2步. 最终估计
(1)逐块估计。对基础估计图像中的每一块
(i) 分组。通过块匹配找到与它相似的相似块在基础估计图像中的位置,通过这些位置得到两个三维数组,一个是从含噪图像中得到的,一个是从基础估计图像中得到的。
(ii)联合维纳滤波。对形成的两个三维数组均进行三维变换,以基础估计图像中的能量谱作为能量谱对含噪三维数组进行维纳滤波,然后逆变换得到组中所有图像块的估计,然后把这些估计值返回到他们的原始位置。
(2)聚集。对得到的有重叠的局部块估计,通过对他们进行加权平均得到真实图像的最终估计。
供参考:lev=5
[c,l]=wavedec(x,lev,wname)
sigma=wnoisest(c,l,1)
alpha=2
thr1=wbmpen(c,l,sigma,alpha)
[thr2,nkeep]=wdcbm(c,l,alpha)
xd1=wdencmp('gbl',c,l,wname,lev,thr1,'s',1)
[xd2,cxd,lxd,perf0,perfl2]=wdencmp('lvd',c,l,wname,lev,thr2,'h')
[thr,sorh,keepapp]=ddencmp('den','wv',x)
xd3=wdencmp('gbl',c,l,wname,lev,thr,'s',1)
subplot(411)plot(x)title('原始信号','fontsize',12)
subplot(412)plot(xd1)title('使用penalty阈值降噪后信号','fontsize',12)
subplot(413)plot(xd2)title('使用Birge-Massart阈值降噪后信号','fontsize',12)
subplot(414)plot(xd3)title('使用缺省阈值降噪后信号','fontsize',12)
s=[-1.58
0.42
0.46
0.78
-0.49
0.59
-1.3
-1.42
-0.16
-1.47
-1.35
0.36
-0.44
-0.14
1
-0.5
-0.2
-0.06
-0.6
0.42
-1.52
0.51
0.76
-1.5
0.16
-1.29
-0.65
-1.48
0.6
-1.65
-0.55]
[C,L]=wavedec(s,1,'db3')
ca1=wrcoef('a',C,L,'db3',1)
x1=ca1
[C,L]=wavedec(s,2,'db3')
ca2=wrcoef('a',C,L,'db3',2)
x2=ca2
[C,L]=wavedec(s,3,'db3')
ca3=wrcoef('a',C,L,'db3',3)
x3=ca3
[C,L]=wavedec(s,4,'db3')
ca4=wrcoef('a',C,L,'db3',4)
x4=ca4
cg
=
wrcoef('a',C,L,'sym5',1)
x5=cg
p=1:31
subplot(6,1,1)plot(p,s)ylabel('s')
subplot(6,1,2)plot(p,x1)ylabel('ca1')
subplot(6,1,3)plot(p,x2)ylabel('ca2')
subplot(6,1,4)plot(p,x3)ylabel('ca3')
subplot(6,1,5)plot(p,x4)ylabel('ca4')
subplot(6,1,6)plot(p,x5)ylabel('ca5')
%加入的重构,是不是你要的?
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)