您的位置:首页 > 编程语言 > MATLAB

应用小波图像去噪的Matlab 实现

2014-10-30 14:31 393 查看
小波图像去噪的方法大概分为3类

1:基于小波变换摸极大值原理

2:基于小波变换系数的相关性

3:基于小波阈值的去噪。

基于小波阈值的去噪方法3个步骤:

1: 计算含噪声图像的小波变换。选择合适的小波基和小波分解层数J,运用Matlab 分解算法将含有噪声图像进行J层小波分解,得到相应的小波分解系数。

2:对分解后的高频系数进行阈值量化,对于从1 到J的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。

3:进行小波逆变化,根据图像小波分解后的第J层,低频 系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数),运用Matlab重构算法进行小波重构,得到去噪后的图像。

Talk is simple,Show me the code!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear;                   

  

[X,map]=imread('lena.BMP');              

  

%X=rgb2gray(X);  

figure(1); 

  

        

set(gcf,'Position',[0,0,512,512])

set(gca,'position',[0 0 1 1])

imshow(X); 

%title('原始图像');                    

  

% 生成含噪图像并图示  

  

init=2055615866;         

  

randn('seed',init);        

  

X=double(X);  

  

% 添加随机噪声  

  

XX=X+8*randn(size(X));    

  

figure(2) ;         

set(gcf,'Position',[0,0,512,512]);

set(gca,'position',[0 0 1 1])  ;

imshow(uint8(XX));                

 

%title(' 含噪图像 ');         

  

%用小波函数coif2对图像XX进行2层  

  

% 分解  

  

[c,l]=wavedec2(XX,2,'coif2');   

a2 = wrcoef2('a',c,l,'coif2',2);  % 重构第2层图像的近似系数

n=[1,2];        % 设置尺度向量  

              

p=[10.28,24.08];% 设置阈值向量 

nc=wthcoef2('h',c,l,n,p,'s');     %对高频小波系数进行阈值处理

  

% 图像的二维小波重构  

  

X1=waverec2(nc,l,'coif2');    %图像的二维小波重构

  

figure(3)             ;   % 显示图像处理之后的结果

set(gcf,'Position',[0,0,512,512]);

set(gca,'position',[0 0 1 1]);

imshow(uint8(X1));                  

             

%title(' 第一次消噪后的图像 ');   

mc=wthcoef2('v',nc,l,n,p,'s');    %再次对高频小波系数进行阈值处理  

% 图像的二维小波重构  

  

X2=waverec2(mc,l,'coif2');    

figure(4);

set(gcf,'Position',[0,0,512,512]);

set(gca,'position',[0 0 1 1]);

imshow(uint8(X2));                  

%title(' 第二次消噪后的图像 ');

figure(5);

colormap(map); 

set(gcf,'Position',[0,0,512,512]);

set(gca,'position',[0 0 1 1]);

image(uint8(a2));

%title('原图经过两次低通滤波后的结果')

  

%信噪比 

Ps =sum(sum((X-mean(mean(X))).^2));

Pn =sum(sum((X2-X).^2));

SNR1 = 10*log10(Ps/Pn);

Pn1 = sum(sum(a2-X).^2);

SNR2 = 10*log10(Ps/Pn1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

上面提供了两种方法,一种是基于小波分解,即先利用函数wavedec2()对图像进行2层小波分解,再利用函数wrcoef()直接提取第二层的近似系数a2,根据小波分解的滤波器特性,a2即 是原图像经过两次低通滤波后的结果。

第二种是基于小波阈值去噪,利用wthcoef2()对图像进行两次高频系数进行阈值去噪,再通过waverec2()实现图像的重构。

根据SNR结果,和图片去噪画面可知道小波阈值去噪的结果会更好点。

此外使用不同的母小波进行小波阈值去噪,也能得到不同的去噪效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: