请用MATLAB实现以下:用imnoise2生成erlang(爱尔兰)噪声,调用时用默认的a=2, b=5即可(对照表4.1查看对应的均值和方差)。对图像lena_gray_512.tif, 添加此噪声,得到带噪图。 (1)调用roipoly在带噪图中选取噪声样本图像,计算其直方图,估计噪声参数,与已知噪声参数a,b对比,画出噪声图,以及样本图像的直方图。 (2) 调用spfilt对带噪图进行去噪,比较每种滤波的效果,给出理想的方案。
时间: 2023-12-21 13:07:08 浏览: 224
首先,需要下载并添加imnoise2工具箱,可以通过以下命令获取:
```matlab
addpath('imnoise2');
```
然后,读取lena_gray_512.tif图像:
```matlab
I = imread('lena_gray_512.tif');
```
生成erlang(爱尔兰)噪声:
```matlab
J = imnoise2(I,'erlang',2,5);
```
使用roipoly在带噪图中选取噪声样本图像:
```matlab
sample = roipoly(J);
```
计算样本图像的直方图:
```matlab
histogram(J(sample));
```
估计噪声参数:
```matlab
est_param = gamfit(J(sample));
a = est_param(1);
b = est_param(2);
```
与已知噪声参数a,b对比:
```matlab
disp(['Estimated a: ', num2str(a)]);
disp(['Estimated b: ', num2str(b)]);
disp(['Known a: 2']);
disp(['Known b: 5']);
```
画出噪声图以及样本图像的直方图:
```matlab
figure;
subplot(1,2,1); imshow(J,[]); title('Noisy Image');
subplot(1,2,2); histogram(J(sample)); title('Sample Histogram');
```
使用spfilt对带噪图进行去噪:
```matlab
K1 = spfilt(J,'amean',3,3);
K2 = spfilt(J,'gmean',3,3);
K3 = spfilt(J,'hmean',3,3);
K4 = spfilt(J,'chmean',3,3);
K5 = spfilt(J,'median',3,3);
K6 = spfilt(J,'max',3,3);
```
比较每种滤波的效果:
```matlab
figure;
subplot(2,4,1); imshow(J,[]); title('Noisy Image');
subplot(2,4,2); imshow(K1,[]); title('Arithmetic Mean');
subplot(2,4,3); imshow(K2,[]); title('Geometric Mean');
subplot(2,4,4); imshow(K3,[]); title('Harmonic Mean');
subplot(2,4,5); imshow(K4,[]); title('Contraharmonic Mean');
subplot(2,4,6); imshow(K5,[]); title('Median');
subplot(2,4,7); imshow(K6,[]); title('Max');
```
给出理想的方案:
根据实验结果,中值滤波(Median Filter)效果最好,可以作为理想的方案。
阅读全文