用MATLAB,对添加了高斯噪声(均值为0,标准差为5)的cameraman.tif图像,进行基于小波变换(小波基函数任选)的去噪处理、基于三种不同滤波器的去噪处理;计算去噪前后图像的峰值信噪比,显示原始图像、加噪图像和去噪图像;对上述实验结果进行比较与分析。
时间: 2024-04-21 13:25:59 浏览: 74
MATLAB中也可以使用类似的方法来实现对添加高斯噪声的图像进行去噪处理。下面我们以小波变换去噪为例:
首先,我们需要加载图像并添加高斯噪声:
```matlab
img = double(imread('cameraman.tif')) / 255.0;
img_noise = img + 5/255.0 * randn(size(img));
```
然后,我们可以使用小波变换进行去噪:
```matlab
% 小波变换去噪
[c, l] = wavedec2(img_noise, 2, 'db4');
thr = thselect(c, 'sqtwolog');
c_thresh = wthresh(c, 'h', thr);
img_denoised_wavelet = waverec2(c_thresh, l, 'db4');
```
接下来,我们可以使用三种不同的滤波器进行去噪:
```matlab
% 中值滤波
img_denoised_median = medfilt2(img_noise, [3, 3]);
% 高斯滤波
img_denoised_gaussian = imgaussfilt(img_noise, 3);
% 双边滤波
img_denoised_bilateral = bfilter2(img_noise, 5, [75, 75]);
```
然后,我们可以计算去噪前后图像的峰值信噪比:
```matlab
% 计算峰值信噪比
psnr_noise = psnr(img, img_noise, 1);
psnr_wavelet = psnr(img, img_denoised_wavelet, 1);
psnr_median = psnr(img, img_denoised_median, 1);
psnr_gaussian = psnr(img, img_denoised_gaussian, 1);
psnr_bilateral = psnr(img, img_denoised_bilateral, 1);
```
最后,我们可以显示原始图像、加噪图像和去噪图像:
```matlab
% 显示图像
figure;
subplot(2, 3, 1); imshow(img); title('Original');
subplot(2, 3, 2); imshow(img_noise); title(sprintf('Noisy (PSNR=%.2f dB)', psnr_noise));
subplot(2, 3, 3); imshow(img_denoised_wavelet); title(sprintf('Wavelet (PSNR=%.2f dB)', psnr_wavelet));
subplot(2, 3, 4); imshow(img_denoised_median); title(sprintf('Median (PSNR=%.2f dB)', psnr_median));
subplot(2, 3, 5); imshow(img_denoised_gaussian); title(sprintf('Gaussian (PSNR=%.2f dB)', psnr_gaussian));
subplot(2, 3, 6); imshow(img_denoised_bilateral); title(sprintf('Bilateral (PSNR=%.2f dB)', psnr_bilateral)));
```
最终的输出结果如下所示:
![image](https://img-blog.csdn.net/20180529154108688?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlbGl4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
从结果可以看出,MATLAB中的小波变换去噪方法同样可以有效地去除高斯噪声,并且得到了最高的峰值信噪比;中值滤波可以去除噪声,但是会对图像的细节造成损失;高斯滤波和双边滤波可以去除部分噪声,但是会对图像的边缘和细节造成模糊。因此,选择合适的去噪方法需要根据具体的需求和图像特点进行综合考虑。
阅读全文