请帮我修改下面这段matlab中的代码,使得作中值滤波处理的时候,可以设定并可视化几种不同的窗口大小。clc; clear; I = imread('Panda.bmp'); %读取图片 I_PepperSalt=imnoise(I,'salt & pepper'); %添加椒盐噪声 [m,n] = size(I_PepperSalt);% 读取图像长和宽 I1 = double(I_PepperSalt);%将图像转换成double类型 I2 = I1; for i=2:m-1 for j=2:n-1 %从去除边缘的像素开始源波 Mat = I1(i-1:i+1,j-1:j+1); Mat2 = Mat(:); s=sort(Mat2);%对像素进行排序 I2(i,j) = s(floor(9/2)+1); %选取中值 end end I3 = uint8(I2); %%图像对比 figure; subplot(131) imshow(I); title("原始图像"); subplot(132) imshow(I_PepperSalt); title("椒盐噪声图像"); subplot(133) imshow(I3); title("中值滤波图像");
时间: 2023-12-08 16:03:34 浏览: 99
以下是修改后的代码,使用了一个循环来遍历不同的窗口大小,并使用了一个 cell 数组来存储每个窗口大小对应的结果图像。在可视化时,使用了 subplot 函数来将不同的结果图像显示在同一张图像上,方便比较。
```matlab
clc; clear;
I = imread('Panda.bmp'); %读取图片
I_PepperSalt = imnoise(I,'salt & pepper'); %添加椒盐噪声
[m,n] = size(I_PepperSalt); % 读取图像长和宽
I1 = double(I_PepperSalt); %将图像转换成double类型
% 定义不同的窗口大小
win_sizes = [3, 5, 7];
% 存储不同窗口大小对应的结果图像
results = cell(1, length(win_sizes));
for k = 1:length(win_sizes)
win_size = win_sizes(k);
I2 = I1;
for i = (win_size+1)/2 : m-(win_size-1)/2
for j = (win_size+1)/2 : n-(win_size-1)/2
Mat = I1(i-(win_size-1)/2:i+(win_size-1)/2,j-(win_size-1)/2:j+(win_size-1)/2);
Mat2 = Mat(:);
s = sort(Mat2);
I2(i,j) = s(floor(win_size^2/2)+1);
end
end
results{k} = uint8(I2);
end
% 显示原始图像、椒盐噪声图像和不同窗口大小对应的结果图像
figure;
subplot(2,2,1); imshow(I); title("原始图像");
subplot(2,2,2); imshow(I_PepperSalt); title("椒盐噪声图像");
for k = 1:length(win_sizes)
subplot(2,2,k+2); imshow(results{k}); title(sprintf("窗口大小:%d", win_sizes(k)));
end
```
阅读全文