针对lena图像进行线性平均滤波和中值滤波算法实现。 ①显示lena图像和噪声图像到一个窗口; ②显示3×3、5×5、7×7模版下线性平均滤波结果并做结果分析; ③显示3×3、5×5、7×7模版下中值滤波结果并做结果分析
时间: 2024-12-19 22:17:06 浏览: 14
针对 Lena 图像进行线性平均滤波和中值滤波的步骤如下:
1. **显示 Lena 图像和噪声图像**:
- 首先,使用 `imread` 函数读取 Lena 图片:
```matlab
lena_img = imread('lena.png'); % 假设 Lena 图片名为 'lena.png'
noisy_img = imnoise(lena_img, 'salt & pepper', 0.05); % 添加随机噪声,比如 5% 的椒盐噪声
figure; % 创建新窗口
subplot(1,2,1);
imshow(lena_img, []);
title('Original Lena Image');
subplot(1,2,2);
imshow(noisy_img, []);
title('Noisy Lena Image with Salt & Pepper Noise');
```
2. **线性平均滤波**:
- 使用 `fspecial` 和 `imfilter` 函数创建不同大小的平均模板:
```matlab
sizes = [3 5 7]; % 3x3, 5x5, 7x7模板
for i = 1:length(sizes)
filter_size = sizes(i);
h = fspecial('average', filter_size); % 平均滤波模板
filtered_img_avg{i} = imfilter(noisy_img, h); % 应用滤波
subplot(2,3,3*i-2);
imshow(filtered_img_avg{i}, []);
title(sprintf('%dx%d Average Filtered Image', filter_size, filter_size));
end
```
- 结果分析:线性平均滤波会平滑图像,减少噪声,较大的模板会使边缘更模糊。
3. **中值滤波**:
- 与平均滤波类似,但是用 `medfilt2` 替换 `imfilter`:
```matlab
filtered_img_median = medfilt2(noisy_img, sizes);
subplot(2,3,3*length(sizes)+1);
imshow(filtered_img_median, []);
title('Median Filtered Image');
```
- 结果分析:中值滤波能保持边缘细节,对于椒盐噪声特别有效,因为它只替换像素周围的像素值。
阅读全文