clear; close all; %1. 生成含噪图像 img = rgb2gray(imread('D:\MATLAB\R2011b\toolbox\images\imdemos\lenacai.jpg')); figure; imshow(img); title('原图像'); img =double(imnoise(img,'salt & pepper',0.1)); % img =double(imnoise(img,'gauss',0,0.0.1)); figure,imshow(img,[]); title('椒盐噪声图'); %2. 采用均值滤波 N=5; %滤波模板大小 h=fspecial('average',N); I=filter2(h,img); figure,imshow(I,[]) title('均值滤波图'); %3. 中值滤波 I=medfilt2(img,[N N]); figure,imshow(I,[]) title('中值滤波图'); %4. 最大值滤波 I=ordfilt2(img,NN,true(N));%NN输出的顺序值, figure,imshow(I,[]) title('最大值滤波图'); %5.最小值滤波 I=ordfilt2(img,1,true(N)); figure,imshow(I,[]) title('最小值滤波图');
时间: 2024-03-10 10:43:35 浏览: 99
这段代码与之前的代码相比,只有一个微小的错误。在第 4 行中,ordfilt2 函数的第二个参数应该是一个标量,表示输出的顺序值,而不是一个矩阵。因此,在第 14 行中,应该将 NN 更改为 N*N。
下面是修改后的代码:
```
clear; close all;
%1. 生成含噪图像
img = rgb2gray(imread('D:\MATLAB\R2011b\toolbox\images\imdemos\lenacai.jpg'));
figure; imshow(img); title('原图像');
img = double(imnoise(img,'salt & pepper',0.1));
% img = double(imnoise(img,'gauss',0,0.0.1));
figure,imshow(img,[]);
title('椒盐噪声图');
%2. 采用均值滤波
N = 5; %滤波模板大小
h = fspecial('average',N);
I = filter2(h,img);
figure,imshow(I,[])
title('均值滤波图');
%3. 中值滤波
I = medfilt2(img,[N N]);
figure,imshow(I,[])
title('中值滤波图');
%4. 最大值滤波
I = ordfilt2(img,N*N,true(N)); %将 NN 更改为 N*N
figure,imshow(I,[])
title('最大值滤波图');
%5.最小值滤波
I = ordfilt2(img,1,true(N));
figure,imshow(I,[])
title('最小值滤波图');
```
希望这些信息对你有所帮助!如果你有其他问题,可以随时问我。
阅读全文