matlab小波去噪图像代码
时间: 2023-07-31 11:04:51 浏览: 92
以下是一个简单的 Matlab 小波去噪图像代码,使用了 Daubechies 4 小波和软阈值去噪方法:
```matlab
% 读取原始图像
I = imread('lena.jpg');
I = im2double(I);
% 加入高斯白噪声
sigma = 0.05;
In = imnoise(I, 'gaussian', 0, sigma^2);
% Daubechies 4 小波分解
level = 5;
[C, S] = wavedec2(In, level, 'db4');
% 软阈值去噪
alpha = 3*sigma;
thr = alpha*sqrt(2*log(length(C)));
Cthr = wthresh(C, 's', thr);
% Daubechies 4 小波重构
Ir = waverec2(Cthr, S, 'db4');
% 显示结果
figure;
subplot(1,3,1);
imshow(I);
title('Original Image');
subplot(1,3,2);
imshow(In);
title('Noisy Image');
subplot(1,3,3);
imshow(Ir);
title('Denoised Image');
```
其中,`imread` 函数用于读取原始图像,`im2double` 函数将图像转换为 double 类型,`imnoise` 函数添加高斯白噪声。
`wavedec2` 函数用于 Daubechies 4 小波分解,`level` 参数指定小波分解的级数。返回的 `C` 和 `S` 分别为小波系数和分解结构。
`wthresh` 函数用于软阈值去噪,`alpha` 参数为阈值倍数。`thr` 为阈值,使用了经验公式 `thr = alpha*sqrt(2*log(length(C)))`。
`waverec2` 函数用于 Daubechies 4 小波重构。
最后,使用 `subplot` 和 `imshow` 函数将原始图像、加噪图像和去噪图像显示在同一窗口中。
阅读全文