matlab 自适应中值滤波代码
时间: 2023-08-06 18:15:00 浏览: 105
下面是一个简单的 MATLAB 自适应中值滤波的示例代码:
```matlab
function [output_image] = adaptive_median_filter(input_image, window_size, max_window_size)
% input_image: 输入图像
% window_size: 初始窗口大小
% max_window_size: 最大窗口大小
% 获取输入图像的大小
[rows, cols] = size(input_image);
% 创建输出图像
output_image = zeros(rows, cols);
% 遍历每个像素
for i = 1:rows
for j = 1:cols
% 获取当前像素周围的窗口
window = get_window(input_image, i, j, window_size);
% 计算窗口中像素的中值和极差
median_value = median(window(:));
range_value = max(window(:)) - min(window(:));
% 如果中值和极差符合条件,则输出为中值;否则,增加窗口大小继续处理
if (input_image(i, j) > min(window(:))) && (input_image(i, j) < max(window(:))) && (range_value > 0) && (window_size <= max_window_size)
output_image(i, j) = input_image(i, j);
elseif (window_size < max_window_size)
window_size = window_size + 2;
output_image(i, j) = adaptive_median_filter(input_image, window_size, max_window_size);
else
output_image(i, j) = median_value;
end
end
end
end
function [window] = get_window(input_image, i, j, window_size)
% 获取像素周围的窗口
half_window_size = (window_size - 1) / 2;
i_min = i - half_window_size;
i_max = i + half_window_size;
j_min = j - half_window_size;
j_max = j + half_window_size;
% 边界处理
if i_min < 1
i_min = 1;
end
if i_max > size(input_image, 1)
i_max = size(input_image, 1);
end
if j_min < 1
j_min = 1;
end
if j_max > size(input_image, 2)
j_max = size(input_image, 2);
end
% 获取窗口
window = input_image(i_min:i_max, j_min:j_max);
end
```
在这个代码中,`adaptive_median_filter` 函数实现了自适应中值滤波的主要逻辑,`get_window` 函数用于获取指定像素周围的窗口。你可以将这个代码保存为一个 `.m` 文件并在 MATLAB 中运行,输入你想要滤波的图像、初始窗口大小和最大窗口大小即可得到滤波后的图像。
阅读全文