基于引导图像滤波的图像去噪 MATLAB实现

基于引导图像滤波的图像去噪 MATLAB实现


一、引导滤波原理

引导滤波(Guided Filter)通过局部线性模型实现去噪,其核心思想是:在局部窗口内,输出图像与引导图像呈线性关系,通过最小化重建误差和正则化项,保留边缘信息的同时抑制噪声。

数学模型

其中:

关键步骤

  1. 统计量计算:均值、协方差、方差
  2. 线性系数求解a=var(I)+ϵcov(I,p), b=pˉ−aIˉ
  3. 系数平滑:对a,b进行均值滤波消除块效应
  4. 输出合成

二、MATLAB实现代码

function q = guidedFilter(I, p, r, eps)
    % 输入参数:
    % I - 引导图像(与p同尺寸)
    % p - 待去噪图像
    % r - 窗口半径
    % eps - 正则化参数

    [hei, wid] = size(I);
    N = boxFilter(ones(hei, wid), r);  % 归一化窗口
    
    % 计算均值
    mean_I = boxFilter(I, r) ./ N;
    mean_p = boxFilter(p, r) ./ N;
    
    % 计算协方差和方差
    mean_Ip = boxFilter(I.*p, r) ./ N;
    cov_Ip = mean_Ip - mean_I .* mean_p;
    
    mean_II = boxFilter(I.*I, r) ./ N;
    var_I = mean_II - mean_I .* mean_I;
    
    % 计算线性系数
    a = cov_Ip ./ (var_I + eps);
    b = mean_p - a .* mean_I;
    
    % 平滑系数
    mean_a = boxFilter(a, r) ./ N;
    mean_b = boxFilter(b, r) ./ N;
    
    % 合成输出
    q = mean_a .* I + mean_b;
end

% 辅助函数:积分图加速的均值滤波
function imDst = boxFilter(imSrc, r)
    [hei, wid] = size(imSrc);
    imDst = zeros(size(imSrc));
    
    % 累积和计算
    imCum = cumsum(imSrc, 1);
    imDst(1:r+1, :) = imCum(1+r:2*r+1, :);
    imDst(r+2:hei-r, :) = imCum(2*r+2:hei, :) - imCum(1:hei-2*r-1, :);
    imDst(hei-r+1:hei, :) = repmat(imCum(hei, :), [r, 1]) - imCum(hei-2*r:hei-r-1, :);
    
    % X轴累积和
    imCum = cumsum(imDst, 2);
    imDst(:, 1:r+1) = imCum(:, 1+r:2*r+1);
    imDst(:, r+2:wid-r) = imCum(:, 2*r+2:wid) - imCum(:, 1:wid-2*r-1);
    imDst(:, wid-r+1:wid) = repmat(imCum(:, wid), [1, r]) - imCum(:, wid-2*r:wid-r-1);
end

三、使用示例

% 读取图像
img = imread('noisy_image.jpg');
if size(img,3)==3
    img = rgb2gray(img);  % 转为灰度图
end
img = im2double(img);

% 参数设置
r = 40;      % 窗口半径
eps = 0.01;  % 正则化参数

% 执行引导滤波
denoised = guidedFilter(img, img, r, eps);  % 自引导模式

% 显示结果
figure;
subplot(121), imshow(img), title('原始含噪图像');
subplot(122), imshow(denoised), title('引导滤波去噪结果');

参考代码 用引导图像滤波实现图像去噪 www.youwenfan.com/contentcnr/100482.html

四、关键参数优化

参数 作用说明 推荐范围
窗口半径r 控制局部区域大小,影响平滑程度 3~50(大值平滑强)
正则化参数ε 抑制噪声能力,值越大平滑越强 0.001~1
引导图像 自引导(I=p)效果最佳,也可用其他图 需与输入图尺寸一致

五、性能对比

指标 引导滤波 双边滤波
计算复杂度 O(N)(线性) O(r²N)(非线性)
边缘保留 严格保留梯度方向 可能梯度反转
适用场景 高分辨率图像、实时处理 低噪声图像快速处理

六、进阶应用

  1. 多通道处理(彩色图像):

    [B, G, R] = splitChannels(img);
    denoised_B = guidedFilter(B, B, r, eps);
    denoised = cat(3, denoised_B, denoised_G, denoised_R);
    
  2. 细节增强

    % 分离基础层与细节层
    base = guidedFilter(img, img, r, 0.1);
    detail = img - base;
    % 增强细节
    enhanced = base + 1.5*detail;
    

七、注意事项

  1. 引导图像选择:自引导(I=p)时需确保输入图像无严重失真。
  2. 噪声类型:对高斯噪声效果最佳,椒盐噪声需结合其他方法。
  3. 硬件加速:对大尺寸图像可使用积分图优化(如boxFilter函数)。

 

专注于matlab/simulink,电子电路,编程