两景地基获取的sar数据,matlab格式,下载后对其进行干涉,得到干涉相位后进行滤波处理(均值滤波、中值滤波、多视滤波、圆周期中值滤波、圆周期均值滤波)
数据下载链接:https://pan.baidu.com/s/1u7DUbHD4KJIrCHOALxRntA
提取码:s86z
%% 加载mat数据
clc;clear;
BPImage35=load('BPImage35.mat');
BPImage4=load('BPImage4.mat');
cplx1=BPImage35.BPImage;
cplx2=BPImage4.BPImage;
%% 定义颜色
icolormap = jet(64);
icolormap = icolormap(13:56, :);
%% 干涉相位计算
dph=angle(cplx1.*conj(cplx2)); %共轭相乘,cplx1,cplx2为两幅SAR的SLC数据
%% 所有滤波方法
OutImage1 = dph;
OutImage2 = mean_fiter(dph, 5);
OutImage3 = mid_fiter(dph, 5);
OutImage4 = multiview_fiter(dph, 5);
OutImage5 = ciciodmean_fiter(dph, 5);
OutImage6 = ciciodmid_fiter(dph, 5);
%% 成果可视化
figure('color', [1,1,1]); %0.94118,1,0.94118
ititle = {'原图', '均值滤波', '中值滤波','多视滤波', '圆周期均值滤波', '圆周期中值滤波'};
for i=1:6
subplot(2, 3, i);
colormap(icolormap);
imagesc( eval(['OutImage', num2str(i)]) );
title(ititle{i});
colorbar;
axis tight %数据范围设为坐标范围
end
suptitle('滤波窗口大小为5*5');
%% 均值滤波
function OutImage = mean_fiter(data, winsize)
[irow, icol] = size(data);
mid = floor(winsize/2);
OutImage = data;
for i=mid+1:irow-mid
for j=mid+1:icol-mid
NeighbourArray = data(i-mid:i+mid, j-mid:j+mid);
OutImage(i, j) = mean2(NeighbourArray);
end
end
end
%% 中值滤波
function OutImage = mid_fiter(data, winsize)
[irow, icol] = size(data);
mid = floor(winsize/2);
OutImage = data;
for i=mid+1:irow-mid
for j=mid+1:icol-mid
NeighbourArray = data(i-mid:i+mid, j-mid:j+mid);
OutImage(i, j) = median(NeighbourArray(:));
end
end
end
%% 多视滤波
function OutImage = multiview_fiter(data, winsize)
[irow, icol] = size(data);
mid = floor(winsize/2); a = 0; b = 1;
OutImage = zeros(fix(irow/5), fix(icol/5));
for i=mid+1:winsize:irow-mid
for j=mid+1:winsize:icol-mid
NeighbourArray = data(i-mid:i+mid, j-mid:j+mid);
if j == mid+1
a = a+1;b = 1;
end
OutImage(a,b) = mean2(NeighbourArray);
b = b+1;
end
end
end
%% 圆周期均值滤波
function OutImage = ciciodmean_fiter(data, winsize)
[irow, icol] = size(data);
mid = floor(winsize/2);
OutImage = zeros(irow, icol);
data_exp = exp(1i*data);
for i=mid+1:irow-mid
for j=mid+1:icol-mid
mat_exp = data_exp(i-mid:i+mid, j-mid:j+mid);
sum_exp = sum(mat_exp(:));
mean_argexp = mean2(angle(mat_exp/sum_exp) );
OutImage(i, j) = mean_argexp+angle(sum_exp);
end
end
OutImage = rem(OutImage+3*pi, 2*pi)-pi;
end
%% 圆周期中值滤波
function OutImage = ciciodmid_fiter(data, winsize)
[irow, icol] = size(data);
mid = floor(winsize/2);
OutImage = zeros(irow, icol);
data_exp = exp(1i*data);
for i=mid+1:irow-mid
for j=mid+1:icol-mid
mat_exp = data_exp(i-mid:i+mid, j-mid:j+mid);
sum_exp = sum(mat_exp(:));
mid_argexp = median(angle(mat_exp(:)/sum_exp) );
OutImage(i, j) = mid_argexp+angle(sum_exp);
end
end
OutImage = rem(OutImage+3*pi, 2*pi)-pi;
end