matlab写中值滤波函数
时间: 2023-08-24 11:39:44 浏览: 94
中值滤波是一种常用的图像去噪方法,可以使用 MATLAB 中的 medfilt2 函数进行实现。以下是一个自定义的中值滤波函数,其功能与 medfilt2 函数相同。
```matlab
function output = mymedfilt2(input, window_size)
% 输入参数:
% input: 输入图像
% window_size: 滤波窗口大小
% 输出参数:
% output: 滤波后的图像
% 将窗口大小转换为奇数
window_size = max(window_size, 3); % 窗口大小至少为 3
window_size = window_size + mod(window_size, 2) - 1; % 窗口大小为奇数
half_size = floor(window_size/2);
% 对输入图像进行补边
input = padarray(input, [half_size, half_size], 'symmetric', 'both');
% 初始化输出图像
output = zeros(size(input));
% 对每个像素进行中值滤波
for i = 1 + half_size : size(input, 1) - half_size
for j = 1 + half_size : size(input, 2) - half_size
% 提取窗口内的像素值
window = input(i-half_size:i+half_size, j-half_size:j+half_size);
% 对窗口内的像素值进行排序
window_sorted = sort(window(:));
% 取中间值作为该像素的滤波结果
output(i, j) = window_sorted(median(1:numel(window_sorted)));
end
end
% 去除补边
output = output(1+half_size:end-half_size, 1+half_size:end-half_size);
end
```
在使用时,可以按照以下方式调用该函数:
```matlab
input = imread('lena.png');
output = mymedfilt2(input, 5); % 使用窗口大小为 5 的中值滤波
imshow(output);
```
其中,输入参数 input 是需要进行滤波的图像,window_size 是滤波窗口大小。函数会返回滤波后的图像 output。
阅读全文