Matlab不用medfilt2 ,编程实现滤波邻域大小为 4×4的中值滤波
时间: 2024-05-05 15:20:43 浏览: 112
可以使用 MATLAB 中的 `medfilt2` 函数进行中值滤波,但是如果要自己编程实现,可以按照以下步骤进行:
1. 定义待滤波的图像矩阵 `img`,以及中值滤波的邻域大小 `n`(这里为 4)。
2. 对于图像矩阵 `img` 中的每个像素,取以该像素为中心的 `n×n` 大小的邻域,将邻域内的像素值从小到大排序,然后取其中位数作为该像素的值。
3. 将所有像素的值更新后得到中值滤波后的图像矩阵。
下面是中值滤波的 MATLAB 代码实现:
```matlab
% 定义待滤波的图像矩阵
img = imread('lena.png');
img = rgb2gray(img);
% 定义中值滤波的邻域大小
n = 4;
% 获取图像矩阵的大小
[m, n] = size(img);
% 定义中值滤波后的图像矩阵
img_filtered = zeros(m, n);
% 对于每个像素,进行中值滤波
for i = 1:m
for j = 1:n
% 取以当前像素为中心的邻域
neighborhood = img(max(1, i-floor(n/2)):min(m, i+floor(n/2)), ...
max(1, j-floor(n/2)):min(n, j+floor(n/2)));
% 对邻域内的像素值进行排序
sorted_neighborhood = sort(neighborhood(:));
% 取中位数作为当前像素的值
img_filtered(i, j) = sorted_neighborhood(floor(numel(sorted_neighborhood)/2)+1);
end
end
% 显示原图和中值滤波后的图像
subplot(1, 2, 1), imshow(img), title('Original Image');
subplot(1, 2, 2), imshow(img_filtered), title('Filtered Image');
```
阅读全文