主程序:
XGXSfJpz(相干系数法精配准)
functiondatxg=XGXSfJpz(data1,data2,wsize,IF,N)
% XGXSfJpz :相干系数法精配准(SAR影像)
% Input parameter:
%data1
:输入数据1为粗配准后的主影像数据
%data2
:输入数据2为粗配准后的从影像数据
%wsize
:精配准时原始影像上的目标窗口大小
%IF
:确定是否(是则填‘Yes’或者‘y’)剔除奇异值的字符变量
%N
:同名点对数(如果要剔除奇异值,则一般定为所需同名点对数的2倍;否则即
%为所需同名点对数)
% Output parameter:
%datxg
:输出数据为主影像数据与精配准影像数据的相干(共轭相乘)影像数据
% 2009.5 20090780刘夯
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[row1,col1]=size(data1);
[row2,col2]=size(data2);
row=min(row1,row2);
col=min(col1,col2);
%%精配准同名点
dn=JpzTMD(data1,data2,row,col,wsize,IF,N);
%%显示振幅影像上的同名点对
XsTMD(data1,data2,dn);
%%计算主从影像行列坐标映射函数
X=JsYSXS(dn);
%%由主影像到从影像的行列坐标变换
scd=ZBBH(X,row,col);
%%对精配准后的从影像重采样
datac=CcyYX(data2,scd,row,col);
%%主影像数据与精配准影像数据共轭相乘(相干)成像
datxg=data1.*conj(datac);
figure,imagesc(angle(datxg));
子程序:
JpzTMD(精配准同名点)
functiondn=JpzTMD(data1,data2,row,col,windowsize,IF,N)
dn=zeros(N,4);
c=(windowsize-1)/2;
C=5*(2*c+1)-1;
d=windowsize/(20*c+9);
dn(:,1)=ceil(4*c+1+(row-8*c-1)*rand(N,1));
dn(:,2)=ceil(4*c+1+(col-8*c-1)*rand(N,1));
forn=1:N
i=dn(n,1);
j=dn(n,2);
[rm,cm]=meshgrid(i-c:i+c,j-c:j+c);
mrv=linspace(i-c,i+c,20*c+9);
mcv=linspace(j-c,j+c,20*c+9);
[Rm,Cm]=meshgrid(mrv,mcv);
m0=data1(i-c:i+c,j-c:j+c);
m=interp2(rm,cm,m0,Rm,Cm);
M=m(C+1-c:C+1+c,C+1-c:C+1+c);
[rs,cs]=meshgrid(i-4*c:i+4*c,j-4*c:j+4*c);
srv=linspace(i-4*c,i+4*c,80*c+9);
scv=linspace(j-4*c,j+4*c,80*c+9);
[Rs,Cs]=meshgrid(srv,scv);
s0=data2(i-4*c:i+4*c,j-4*c:j+4*c);
s=interp2(rs,cs,s0,Rs,Cs);
r=JsXGXS(c,M,s);
dn(n,3)=i+(r(2)-40*c-4)*d;
dn(n,4)=j+(r(3)-40*c-4)*d;
clc;
fprintf('%s%d%s\n\n','已经计算到第',n,'对同名点.....');
end
ifstrcmp('Yes',IF)==1||strcmp('y',IF)==1
fprintf('%s%d%s\n\n','剔除同名点对中行列偏移量大于',3*c,'的奇异值.....');
ID=abs(dn(:,1)-dn(:,3))>3*c|abs(dn(:,2)-dn(:,4))>3*c;
dn(ID,:)=[];
z=size(dn);
fprintf('%s%d%s%d%s\n\n','共剔除',N-z(1),'对奇异值,保留',z(1),'对同名点!');
end
end
JsXGXS(计算相干系数)
functionr=JsXGXS(c,M,s)