MATLAB 设计一个中值滤波器
时间: 2024-03-23 07:43:07 浏览: 79
在 MATLAB 中,可以使用以下代码设计一个简单的中值滤波器,该滤波器可以对图像进行滤波并去除噪声。
```
function output_img = median_filter(input_img, filter_size)
% input_img: 输入图像
% filter_size: 滤波器大小(正方形)
% 获取图像大小
[m, n] = size(input_img);
% 初始化输出图像
output_img = zeros(m, n);
% 获取滤波器半径
r = floor(filter_size / 2);
% 对图像进行遍历和滤波
for i = r+1:m-r
for j = r+1:n-r
% 获取当前像素的邻域像素
neighborhood = input_img(i-r:i+r, j-r:j+r);
% 将邻域像素排序
sorted_neighborhood = sort(neighborhood(:));
% 取中间值作为当前像素的新值
output_img(i, j) = sorted_neighborhood(floor(length(sorted_neighborhood)/2)+1);
end
end
% 将输出图像转换为 uint8 类型
output_img = uint8(output_img);
end
```
在上述代码中,我们首先获取输入图像的大小,然后初始化输出图像为一个全零矩阵。接下来,我们对输入图像进行遍历和滤波,对于每个像素,我们获取其邻域像素并将其排序,然后取中间值作为当前像素的新值。最后,我们将输出图像转换为 uint8 类型并返回。
使用该中值滤波器的示例代码如下:
```
% 读取图像
img = imread('lena.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 添加高斯噪声
noisy_img = imnoise(gray_img, 'gaussian', 0, 0.01);
% 使用中值滤波器进行滤波
filtered_img = median_filter(noisy_img, 3);
% 显示原始图像、带噪声的图像和滤波后的图像
figure;
subplot(1, 3, 1);
imshow(gray_img);
title('Original Image');
subplot(1, 3, 2);
imshow(noisy_img);
title('Noisy Image');
subplot(1, 3, 3);
imshow(filtered_img);
title('Filtered Image');
```
在上述代码中,我们首先读取一张图像并将其转换为灰度图像,然后向其添加高斯噪声。接下来,我们使用上述中值滤波器对带噪声的图像进行滤波,并显示原始图像、带噪声的图像和滤波后的图像。
阅读全文