中值滤波matlab代码不用自带的medfilt
时间: 2023-09-05 18:01:21 浏览: 201
MATLAB实现中值滤波(非medfilt2函数)
5星 · 资源好评率100%
中值滤波是一种常用的图像处理方法,用于减少图像中的噪声。在MATLAB中,我们可以自己编写代码实现中值滤波,而不使用自带的medfilt函数。
下面是一种实现中值滤波的MATLAB代码:
```matlab
% 读取原始图像
original_image = imread('image.jpg');
% 将原始图像转换为灰度图像
gray_image = rgb2gray(original_image);
% 定义滤波器的大小
filter_size = 3;
% 获取图像的尺寸
[image_height, image_width] = size(gray_image);
% 初始化滤波后的图像
filtered_image = zeros(image_height, image_width);
% 对图像进行中值滤波
for i = 1 : image_height
for j = 1 : image_width
% 确定滤波器的位置范围
min_i = max(i - floor(filter_size / 2), 1);
max_i = min(i + floor(filter_size / 2), image_height);
min_j = max(j - floor(filter_size / 2), 1);
max_j = min(j + floor(filter_size / 2), image_width);
% 获取滤波器位置范围内的像素值
patch = gray_image(min_i : max_i, min_j : max_j);
% 计算中值
median_value = median(patch(:));
% 将中值赋给滤波后的图像
filtered_image(i, j) = median_value;
end
end
% 显示原始图像和滤波后的图像
figure;
subplot(1, 2, 1);
imshow(gray_image);
title('原始图像');
subplot(1, 2, 2);
imshow(uint8(filtered_image));
title('中值滤波后图像');
```
以上代码中,我们首先读取原始图像,并将其转换为灰度图像。然后,定义滤波器的大小,本例中设定为3×3。接下来,我们对图像进行遍历,并在每个像素位置上,获取滤波器的位置范围内的像素值,并计算中值。最后,将中值赋给滤波后的图像,并显示原始图像和滤波后的图像。
值得注意的是,中值滤波算法的参数(滤波器大小等)可以根据实际情况进行调整,以达到更好的滤波效果。
阅读全文