自适应中值滤波matlab
时间: 2023-09-05 19:07:51 浏览: 44
自适应中值滤波是一种常用的图像处理技术,可以去除图像中的椒盐噪声和斑点噪声等。在MATLAB中,可以使用以下代码实现自适应中值滤波:
```matlab
function [filtered_image] = adaptive_median_filter(original_image, window_size)
% original_image: 原始图像
% window_size: 窗口大小
% filtered_image: 滤波后的图像
% 将原始图像转换为双精度型
original_image = im2double(original_image);
% 获取图像的行数和列数
[row, col] = size(original_image);
% 计算窗口的半径
window_radius = (window_size - 1) / 2;
% 初始化滤波器输出图像
filtered_image = original_image;
for i = 1 + window_radius : row - window_radius
for j = 1 + window_radius : col - window_radius
% 获取当前窗口的像素值
window = original_image(i - window_radius : i + window_radius, j - window_radius : j + window_radius);
% 计算窗口的中值和极差
window_median = median(window(:));
window_range = max(window(:)) - min(window(:));
% 如果中值不在窗口的最小值和最大值之间,则进行扩展
if window_median == min(window(:)) || window_median == max(window(:))
% 扩展窗口大小
window_size = window_size + 2;
window_radius = (window_size - 1) / 2;
% 如果扩展后的窗口大小超过了图像的大小,则不再进行扩展
if i - window_radius < 1 || i + window_radius > row || j - window_radius < 1 || j + window_radius > col
filtered_image(i, j) = original_image(i, j);
continue;
end
% 获取扩展后的窗口
window = original_image(i - window_radius : i + window_radius, j - window_radius : j + window_radius);
% 计算扩展后的窗口的中值和极差
window_median = median(window(:));
window_range = max(window(:)) - min(window(:));
end
% 如果极差为0,则直接输出中值
if window_range == 0
filtered_image(i, j) = window_median;
continue;
end
% 判断像素值是否在中值的左右区间内
if original_image(i, j) > window_median - window_range / 2 && original_image(i, j) < window_median + window_range / 2
filtered_image(i, j) = original_image(i, j);
else
filtered_image(i, j) = window_median;
end
end
end
% 将输出图像转换为无符号8位整型
filtered_image = im2uint8(filtered_image);
end
```
使用方法:
```matlab
% 读取原始图像
original_image = imread('lena.jpg');
% 使用自适应中值滤波对图像进行滤波
filtered_image = adaptive_median_filter(original_image, 3);
% 显示原始图像和滤波后的图像
subplot(1, 2, 1);
imshow(original_image);
title('Original Image');
subplot(1, 2, 2);
imshow(filtered_image);
title('Filtered Image');
```
其中,`original_image`为原始图像,`window_size`为窗口大小,`filtered_image`为滤波后的图像。在上面的代码中,使用了`median`函数计算窗口的中值,使用了`max`和`min`函数计算窗口的最大值和最小值。