中值过滤源代码matlab实现
时间: 2023-08-11 08:06:34 浏览: 43
中值滤波的Matlab实现代码如下:
```matlab
function [B] = median_filter(A, m, n)
% 中值滤波
% A: 原始图像
% m, n: 滤波器大小,必须是奇数
% B: 滤波后的图像
% 处理边缘像素
pad_size = floor([m, n] / 2);
pad_A = padarray(A, pad_size, 'symmetric', 'both');
% 中值滤波
B = zeros(size(A));
for i = 1:size(A, 1)
for j = 1:size(A, 2)
patch = pad_A(i:i+m-1, j:j+n-1);
B(i, j) = median(patch(:));
end
end
```
其中,A为原始图像,m和n为滤波器的大小,必须是奇数。函数返回的B为滤波后的图像。
该函数中,首先使用padarray函数对原始图像进行边缘填充,以便对边缘像素进行处理。然后使用双向对称填充方式进行填充,保证了边缘像素的连续性。接着在循环中对每个像素的邻域进行中值计算,得到该像素的滤波结果。
使用该函数的代码示例如下:
```matlab
I = imread('lena.jpg'); % 读入图像
J = imnoise(I, 'salt & pepper', 0.02); % 添加椒盐噪声
K = median_filter(J, 3, 3); % 中值滤波
subplot(1,3,1), imshow(I), title('原始图像');
subplot(1,3,2), imshow(J), title('添加噪声后的图像');
subplot(1,3,3), imshow(K), title('中值滤波后的图像');
```
这段代码与前面的示例代码类似,不同之处在于使用了自定义的中值滤波函数median_filter来对图像进行滤波。