中值滤波处理图像
时间: 2025-06-18 10:58:30 浏览: 9
### 中值滤波图像处理方法与代码示例
中值滤波是一种非线性数字滤波技术,主要用于去除图像中的椒盐噪声和斑点噪声,同时保留图像的边缘信息[^1]。在 MATLAB 中,可以通过内置函数 `medfilt2` 实现中值滤波。以下详细介绍中值滤波的实现方法及代码示例。
#### 使用 MATLAB 的 medfilt2 函数
`medfilt2` 是 MATLAB 提供的一个用于二维中值滤波的函数。该函数可以对输入图像进行中值滤波处理,其中滤波器窗口大小通常是一个奇数正方形窗口。以下是使用 `medfilt2` 的基本语法:
```matlab
filtered_image = medfilt2(input_image, [m n]);
```
- `input_image`:待处理的输入图像。
- `[m n]`:指定滤波器窗口的大小,默认为 `[3 3]`。
- `filtered_image`:经过中值滤波后的输出图像。
#### 示例代码
以下是一个完整的 MATLAB 代码示例,展示如何使用 `medfilt2` 对图像进行中值滤波处理:
```matlab
% 读取原始图像
original_image = imread('peppers.png');
% 显示原始图像
figure;
subplot(1, 3, 1);
imshow(original_image);
title('原始图像');
% 添加椒盐噪声
noisy_image = imnoise(original_image, 'salt & pepper', 0.05);
% 显示添加噪声后的图像
subplot(1, 3, 2);
imshow(noisy_image);
title('添加噪声后的图像');
% 使用中值滤波处理图像
filtered_image = medfilt2(noisy_image, [3 3]);
% 显示经过中值滤波后的图像
subplot(1, 3, 3);
imshow(filtered_image);
title('中值滤波后的图像');
```
#### 自定义实现中值滤波
如果需要自定义实现中值滤波,可以通过遍历图像的每个像素并计算其邻域像素的中值来完成。以下是一个简单的自定义实现代码示例:
```matlab
function filtered_image = custom_medfilt2(input_image, window_size)
% 获取图像尺寸
[rows, cols] = size(input_image);
% 初始化输出图像
filtered_image = zeros(rows, cols, class(input_image));
% 确定窗口半径
radius = (window_size - 1) / 2;
% 遍历图像的每个像素
for i = 1 + radius:rows - radius
for j = 1 + radius:cols - radius
% 提取当前像素的邻域
neighborhood = input_image(i - radius:i + radius, j - radius:j + radius);
% 计算邻域像素的中值
median_value = median(neighborhood(:));
% 将中值赋给当前像素
filtered_image(i, j) = median_value;
end
end
end
```
调用自定义函数时,可以使用以下代码:
```matlab
% 调用自定义中值滤波函数
custom_filtered_image = custom_medfilt2(noisy_image, 3);
% 显示自定义中值滤波后的图像
figure;
imshow(custom_filtered_image);
title('自定义中值滤波后的图像');
```
阅读全文
相关推荐















