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

 

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

分类: Matlab   205人阅读  评论(0)  收藏  举报

小波图像去噪的方法大概分为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结果,和图片去噪画面可知道小波阈值去噪的结果会更好点。


此外使用不同的母小波进行小波阈值去噪,也能得到不同的去噪效果。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 小波图像去噪是一种常用的数字图像处理技术,可以有效地降低图像中的噪声。以下是一个简单的Matlab代码示例来实现小波图像去噪: 1. 首先,导入需要处理图像并将其换为灰度图像。 2. 使用Haar小波变换图像进行分解。使用名为‘wavedec2’的函数进行小波分解,并指定分解的层数。常用的层数取值范围是3-5。 3. 根据选定的阈值对每个小波分量进行阈值处理。可以使用软阈值或者硬阈值方法。软阈值和硬阈值的计算公式如下: 硬阈值($S_{hard}$): $S_{hard}(x) = \begin{cases} 0 &\text{若} |x| \leq T \\ x &\text{否则} \end{cases}$ 软阈值($S_{soft}$): $S_{soft}(x) = \begin{cases} 0 &\text{若} |x| \leq T \\ sign(x)(|x| - T) &\text{否则} \end{cases}$ 其中,$x$为小波分量的值,$T$为阈值。 4. 将阈值化后的小波系数使用名为‘waverec2’的函数进行重构,得到去噪后的图像。 5. 可以使用‘imshow’函数将原始图像去噪后的图像进行对比显示。 以上是一个本的小波图像去噪Matlab代码示例。需要注意的是,小波图像去噪涉及到参数的选择,例如小波函数、阈值等,需要根据具体情况进行调整和优化。 ### 回答2: 小波图像去噪是一种常用的信号处理方法,可以有效地降低图像中的噪声。下面是一个示例的Matlab代码实现小波图像去噪的过程: 1. 导入图像 ``` im = imread('image.jpg'); ``` 2. 对图像进行小波变换 ``` [~, S] = wavedec2(im, n, 'db4'); ``` 在这里,n为小波变换的尺度,可根据实际情况进行调整。 3. 设置阈值 ``` thr = wthrmngr('sw1ddenoLVL', S); ``` 这里使用了Matlab中提供的函数wthrmngr来计算小波变换系数的阈值。 4. 进行小波系数阈值处理 ``` S_thr = wthresh(S, 's', thr); ``` 这里使用了Matlab中提供的函数wthresh来实现小波系数的阈值处理。 5. 对图像进行小波变换 ``` im_denoise = waverec2(S_thr, S, 'db4'); ``` 这里使用了Matlab中提供的函数waverec2来实现小波变换。 6. 显示去噪后的图像 ``` imshow(im_denoise); ``` 以上就是一个简单的Matlab代码实现小波图像去噪的过程。当然,对于不同的图像和噪声类型可能需要进行一些参数的调整和优化,以得到更好的去噪效果。这个示例代码可以作为一个入门参考,在实际应用中可以根据具体情况进行调整和优化。 ### 回答3: 小波图像去噪是一种常用的图像处理方法,可以有效降低图像中的噪声并提高图像的质量。在MATLAB中,可以通过以下几个步骤实现小波图像去噪: 1. 导入图像:使用imread函数读取需要处理图像,并赋值给一个变量。 2. 进行小波变换:使用wavedec2函数图像进行小波分解,得到系数矩阵。 3. 阈值处理:通过设置一个合适的阈值对小波系数矩阵进行处理,通常可以采用软阈值或硬阈值方法。软阈值使用绝对值函数,硬阈值使用选择函数。 4. 重构图像:使用waverec2函数处理后的小波系数矩阵进行重构,得到去噪后的图像。 5. 显示图像:使用imshow函数显示原始图像去噪后的图像,以便观察效果并进行对比。 下面是一个示例的MATLAB代码实现小波图像去噪: ```matlab % 导入图像 image = imread('image.jpg'); % 进行小波变换 [wcoeff,~,~] = wavedec2(image,2,'db4'); % 设置阈值为3(可根据实际情况调整) threshold = 3; % 阈值处理 wcoeff(abs(wcoeff) < threshold) = 0; % 重构图像 denoisedImage = waverec2(wcoeff, 'db4'); % 显示图像 subplot(1,2,1); imshow(image); title('原始图像'); subplot(1,2,2); imshow(denoisedImage,[]); title('去噪后的图像'); ``` 这段代码实现了对名为image.jpg的图像进行小波去噪操作,使用了Daubechies4小波函数,阈值设为3。可以根据需要修改小波函数和阈值的数值,以得到更好的去噪效果。最后,代码将分别显示原始图像去噪后的图像以便对比观察。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值