一维非局部均值滤波matlab代码
时间: 2023-06-02 16:01:32 浏览: 132
以下是一维非局部均值滤波的Matlab代码:
function output = nonLocalMeans(input, h, patchSize, windowSize)
% input: 输入图像
% h: 控制平滑程度的参数
% patchSize: 每个块的大小
% windowSize: 搜索窗口的大小
% padding
padSize = floor(patchSize/2);
inputPad = padarray(input, [0, padSize], 'symmetric', 'both');
% 初始化输出图像
output = zeros(size(input));
% 遍历每个像素
for i = 1:size(input, 2)
% 获取当前像素的块
patch = inputPad(:, i:i+patchSize-1);
% 初始化权重和像素值
weightSum = 0;
pixelSum = 0;
% 遍历搜索窗口内的每个像素
for j = max(1, i-windowSize):min(size(input, 2), i+windowSize)
% 获取当前像素的块
patch2 = inputPad(:, j:j+patchSize-1);
% 计算块之间的欧氏距离
dist = sum(sum((patch-patch2).^2));
% 计算权重
weight = exp(-dist/h);
% 累加权重和像素值
weightSum = weightSum + weight;
pixelSum = pixelSum + weight*input(j);
end
% 更新输出图像
output(i) = pixelSum/weightSum;
end
end
阅读全文