如何用MATLAB实现SAR图像的滤波处理?

摘要:一、滤波算法实现1.1 维纳滤波(Wiener Filter)% 维纳滤波实现(支持自适应窗口)function filtered = wienerFilter(sarImg, windowSize)[rows, cols] = size(

一、滤波算法实现

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:rowsfor j = 1:colswindow = 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);endend
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:rowsfor j = 1:colswindow = paddedImg(i:i+2*pad, j:j+2*pad);meanVal = mean(window(:));varVal = var(window(:));pixel = sarImg(i,j);if pixel > meanValfiltered(i,j) = meanVal + (pixel - meanVal) * (varVal / (varVal + 100));elsefiltered(i,j) = meanVal - (meanVal - pixel) * (varVal / (varVal + 100));endendend
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
阅读全文