MATLAB实现SAR图像滤波

一、滤波算法实现

1.1 维纳滤波(Wiener Filter)

% 维纳滤波实现(支持自适应窗口)
function filtered = wienerFilter(sarImg, windowSize)
    [rows, cols] = size(sarImg);
    pad = floor(windowSize/2);
    paddedImg = padarray(sarImg, [pad pad], 'symmetric');
    
    filtered = zeros(rows, cols);
    for i = 1:rows
        for j = 1:cols
            window = paddedImg(i:i+2*pad, j:j+2*pad);
            localMean = mean(window(:));
            localVar = var(window(:));
            noiseVar = 0.01; % 假设噪声方差已知
            k = localVar / (localVar + noiseVar);
            filtered(i,j) = localMean + k*(sarImg(i,j)-localMean);
        end
    end
end

特点:通过局部信噪比自适应调整滤波强度,适用于相干斑噪声

1.2 Lee滤波(改进版)

function filtered = leeFilter(sarImg, windowSize)
    [rows, cols] = size(sarImg);
    pad = floor(windowSize/2);
    paddedImg = padarray(sarImg, [pad pad], 'replicate');
    
    filtered = zeros(rows, cols);
    for i = 1:rows
        for j = 1:cols
            window = paddedImg(i:i+2*pad, j:j+2*pad);
            meanVal = mean(window(:));
            varVal = var(window(:));
            pixel = sarImg(i,j);
            
            if pixel > meanVal
                filtered(i,j) = meanVal + (pixel - meanVal) * (varVal / (varVal + 100));
            else
                filtered(i,j) = meanVal - (meanVal - pixel) * (varVal / (varVal + 100));
            end
        end
    end
end

优化点:引入动态权重系数,保留边缘信息更优

二、高级滤波技术

2.1 小波变换+双边滤波联合降噪

function denoised = wavelet_bilateral(sarImg, wavelet, level, sigmaD, sigmaR)
    % 小波预处理
    [c, l] = wavedec2(sarImg, level, wavelet);
    threshold = wthrmngr('dw1ddenoLVL','sqtwolog',c,l);
    c_thresh = wthresh(c, 's', threshold);
    preprocessed = waverec2(c_thresh, l, wavelet);
    
    % 双边滤波后处理
    denoised = imbilatfilt(preprocessed, sigmaD, sigmaR);
end

参数建议

  • 小波基:db4(适用于SAR纹理)
  • 分解层数:3-5层
  • 空间域σ:10-20
  • 值域域σ:0.1-0.5

2.2 自适应多视滤波(适用于干涉SAR)

function filtered = multiviewFilter(phaseData, windowSize)
    [rows, cols] = size(phaseData);
    pad = floor(windowSize/2);
    paddedPhase = padarray(phaseData, [pad pad], 'symmetric');
    
    filtered = zeros(rows, cols);
    for i = 1:rows
        for j = 1:cols
            window = paddedPhase(i:i+2*pad, j:j+2*pad);
            meanPhase = mean(window(:));
            stdPhase = std(window(:));
            
            % 圆周期处理
            angleDiff = angle(exp(1i*(window - meanPhase)));
            medianDiff = median(angleDiff(:));
            filtered(i,j) = meanPhase + stdPhase * tan(medianDiff);
        end
    end
end

应用场景:干涉相位去噪,有效抑制大气扰动

三、性能评估与可视化

3.1 评估指标计算

function metrics = evaluateFilter(original, filtered)
    % 计算PSNR和SSIM
    [psnr, ~] = psnr(original, filtered);
    [ssim, ~] = ssim(original, filtered);
    
    % 结构相似性分析
    grayOrg = rgb2gray(original);
    grayFil = rgb2gray(filtered);
    metrics = struct(...
        'PSNR', psnr, ...
        'SSIM', ssim, ...
        'Entropy', entropy(grayFil) - entropy(grayOrg)...
    );
end

3.2 可视化对比

function plotComparison(original, filtered, method)
    figure;
    subplot(1,3,1); imshow(original); title('原始图像');
    subplot(1,3,2); imshow(filtered); title([method '滤波结果']);
    subplot(1,3,3); imshow(abs(original - filtered)); 
    title('残差图像'); colorbar;
    
    % 显示评估指标
    metrics = evaluateFilter(original, filtered);
    fprintf('%s滤波指标:\n', method);
    fprintf('PSNR: %.2f dB\n', metrics.PSNR);
    fprintf('SSIM: %.4f\n', metrics.SSIM);
end

四、完整处理流程示例

% 1. 数据加载
sarImg = imread('sar_image.tif');
sarImg = im2double(sarImg);

% 2. 添加模拟噪声(测试用)
noisyImg = imnoise(sarImg, 'speckle', 0.1);

% 3. 滤波处理对比
methods = {'均值滤波', 'Lee滤波', '小波+双边滤波'};
filters = {@meanFilter, @leeFilter, @wavelet_bilateral};
params = {5, 5, {'db4',3,15,0.2}};

figure;
for i = 1:numel(methods)
    filtered = filters{i}(noisyImg, params{i}{:});
    subplot(2,2,i+1);
    plotComparison(noisyImg, filtered, methods{i});
end

参考代码 SAR滤波MATLAB程序 www.youwenfan.com/contentcnm/78100.html

五、关键参数优化建议

滤波方法 窗口大小 阈值策略 适用场景
均值滤波 3×3~7×7 固定值 高斯噪声主导
Lee滤波 5×5~9×9 动态权重 相干斑噪声
小波+双边滤波 3~5层分解 自适应阈值 复杂噪声混合
多视滤波 视数×视数 圆周期处理 干涉相位去噪

六、扩展应用

  1. 实时处理优化: 使用积分图像加速局部统计计算,将Lee滤波复杂度从O(n²)降至O(n)

  2. GPU并行加速

    gpuImg = gpuArray(sarImg);
    filtered = pagefun(@leeFilter, gpuImg, 5);
    
  3. 深度学习融合: 将传统滤波作为预处理模块,输入到U-Net进行残差学习


通过上述方法体系,可系统性地解决SAR图像滤波问题。实际应用中建议:

  1. 先通过小波变换进行初步去噪
  2. 结合双边滤波保留细节
  3. 最后用形态学操作修复边缘 完整代码库可参考中的实现方案。
posted @ 2025-11-27 16:37  yu8yu7  阅读(0)  评论(0)    收藏  举报