自适应均值滤波matlab
时间: 2023-05-30 14:03:23 浏览: 172
以下是自适应均值滤波的MATLAB代码:
```matlab
function [output] = AdaptiveMeanFilter(input, windowSize, threshold)
% input: 输入图像
% windowSize: 窗口大小
% threshold: 阈值
% output: 输出图像
% 将输入图像转为双精度类型
input = im2double(input);
% 获取输入图像的大小
[M, N] = size(input);
% 初始化输出图像
output = zeros(M, N);
% 计算边界
border = (windowSize - 1) / 2;
% 遍历所有像素
for i = 1:M
for j = 1:N
% 计算当前像素的邻域
rowStart = max(1, i - border);
rowEnd = min(M, i + border);
colStart = max(1, j - border);
colEnd = min(N, j + border);
window = input(rowStart:rowEnd, colStart:colEnd);
% 计算邻域内像素的平均值和标准差
meanValue = mean(window(:));
stdValue = std(window(:));
% 如果标准差小于阈值,则执行均值滤波
if stdValue < threshold
output(i, j) = meanValue;
% 否则执行自适应均值滤波
else
filteredWindow = window(window >= meanValue - threshold * stdValue & window <= meanValue + threshold * stdValue);
output(i, j) = mean(filteredWindow(:));
end
end
end
% 将输出图像转为8位无符号整型
output = im2uint8(output);
end
```
使用示例:
```matlab
% 读取图像
input = imread('lena.jpg');
% 执行自适应均值滤波
output = AdaptiveMeanFilter(input, 5, 0.1);
% 显示原图和处理后的图像
imshowpair(input, output, 'montage');
```
阅读全文