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层分解 | 自适应阈值 | 复杂噪声混合 |
| 多视滤波 | 视数×视数 | 圆周期处理 | 干涉相位去噪 |
六、扩展应用
-
实时处理优化: 使用积分图像加速局部统计计算,将Lee滤波复杂度从O(n²)降至O(n)
-
GPU并行加速:
gpuImg = gpuArray(sarImg); filtered = pagefun(@leeFilter, gpuImg, 5); -
深度学习融合: 将传统滤波作为预处理模块,输入到U-Net进行残差学习
通过上述方法体系,可系统性地解决SAR图像滤波问题。实际应用中建议:
- 先通过小波变换进行初步去噪
- 结合双边滤波保留细节
- 最后用形态学操作修复边缘 完整代码库可参考中的实现方案。
浙公网安备 33010602011771号