编写中值滤波和顺序滤波(最小滤波、最大滤波)程序,处理相同的加入椒盐噪声的图像与均值滤波(均值模板)进行比较;改变模板尺寸(3×3,5×5,7×7)观察处理结果。matlab
时间: 2024-09-30 12:16:28 浏览: 69
中值滤波是一种非线性的滤波技术,主要用于去除图像中的椒盐噪声,因为它能够保留边缘信息并更好地抵抗椒盐噪声的影响。在MATLAB中,可以使用`imfilter`函数来实现中值滤波。对于顺序滤波,通常指最小滤波(最小值插值)、最大滤波(最大值插值),它们也是通过计算邻域内像素的某个统计量(如最小值或最大值)作为新像素的值。
以下是简单的步骤:
```matlab
% 加载带椒盐噪声的图像
image = imread('noisy_image.jpg');
% 添加椒盐噪声
saltpepperNoise = 0.05; % 噪声比例
noisy_image = imnoise(image, 'salt & pepper', saltpepperNoise);
% 定义不同的模板大小
template_sizes = [3 5 7]; % 比如这里我们有3x3, 5x5, 和 7x7 的模板
for i = 1:length(template_sizes)
% 中值滤波
median_filtered = medfilt2(noisy_image, template_sizes(i));
% 最小滤波
min_filtered = imfilter(noisy_image, ones(template_sizes(i),1)/numel(ones(template_sizes(i),1)), 'conv');
% 最大滤波
max_filtered = imfilter(noisy_image, ones(template_sizes(i),1)'./numel(ones(template_sizes(i),1)), 'conv');
% 显示原图和三种滤波后的对比
subplot(2,3,i);
imshow(uint8(cat(3, image(:,:,1), image(:,:,2), image(:,:,3))), []);
title(sprintf('Original - Size: %dx%d', template_sizes(i), template_sizes(i)));
subplot(2,3,i+3);
imshow(uint8(median_filtered), []);
title(sprintf('Median Filtered - Size: %dx%d', template_sizes(i), template_sizes(i)));
subplot(2,3,2*i + 4);
imshow(uint8(min_filtered), []);
title(sprintf('Min Filtered - Size: %dx%d', template_sizes(i), template_sizes(i)));
subplot(2,3,2*i + 5);
imshow(uint8(max_filtered), []);
title(sprintf('Max Filtered - Size: %dx%d', template_sizes(i), template_sizes(i)));
end
```
阅读全文