MATLAB编写中值滤波的函数
时间: 2023-06-11 15:07:26 浏览: 124
matlab编写的中值滤波程序
下面是一个 MATLAB 中实现中值滤波的函数:
```matlab
function img_filtered = median_filter(img, filter_size)
% img: 输入图像
% filter_size: 滤波器大小,必须是奇数
% 获取输入图像的大小
[M, N] = size(img);
% 计算滤波器的半径
r = floor(filter_size / 2);
% 初始化输出图像
img_filtered = zeros(M, N);
% 对图像进行遍历
for i = r+1:M-r
for j = r+1:N-r
% 提取滤波器所覆盖的局部图像
local_img = img(i-r:i+r, j-r:j+r);
% 对局部图像进行排序
sorted_local_img = sort(local_img(:));
% 取中间值作为输出像素值
img_filtered(i,j) = sorted_local_img(floor(filter_size^2/2)+1);
end
end
```
使用示例:
```matlab
% 读取图像
img = imread('lena.jpg');
% 将图像转换为灰度图像
img_gray = rgb2gray(img);
% 对图像进行中值滤波
img_filtered = median_filter(img_gray, 5);
% 显示原始图像和处理后的图像
figure;
subplot(1,2,1);
imshow(img_gray);
title('Original Image');
subplot(1,2,2);
imshow(img_filtered);
title('Filtered Image');
```
注意,上述代码中的 `img_gray` 是一个灰度图像矩阵,如果要对彩色图像进行中值滤波,则需要将彩色图像转换为灰度图像。另外,滤波器的大小 `filter_size` 必须是奇数。
阅读全文