Matlab+实现直接线性变换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直接线性变换Matlab实现的程序源代码

function re=DLT(A,B)

%imco为像方坐标,输入单位是像素

imco=A; %此处为控制点像方坐标,格式为2×n,单位:像素

%obco为物方坐标,输入单位是毫米

obco=B; %此处为控制点物方坐标,格式为n×3单位:毫米

imco_be=[];B=[];M=[];

for i=1:size(imco,2)

imco_be=[imco_be;imco(:,i)];

end

for i=1:size(imco,2)

A1=[obco(i,:),1,0,0,0,0];

A2=[0,0,0,0,obco(i,:),1];

M=[M;A1;A2];

B1=obco(i,:).*imco_be(2*i-1);

B2=obco(i,:).*imco_be(2*i);

B=[B;B1;B2];

end

M=[M,B];

N=M(1:11,:);

L=N\(-imco_be(1:11,:));

X0=-((L(1)*L(9)+L(2)*L(10)+L(3)*L(11))/(L(9)*L(9)+L(10)*L(10)+L(11)*L(11))); Y0=-((L(5)*L(9)+L(6)*L(10)+L(7)*L(11))/(L(9)*L(9)+L(10)*L(10)+L(11)*L(11))); L=[L;0];M3=[];W=[];

for i=1:size(imco,2)

xyz=obco(i,:);

A=xyz(1)*L(9)+xyz(2)*L(10)+xyz(3)*L(11)+1;

r2=(imco_be(2*i-1)-X0)*(imco_be(2*i-1)-X0)+(imco_be(2*i)-Y0)*(imco_be(2*i)-Y 0);

M1=[A*(imco_be(2*i-1)-X0)*r2;A*(imco_be(2*i)-Y0)*r2];

M2=-[M(2*i-1:2*i,:),M1]/A;

M3=[M3;M2];

W=[W;-[imco_be(2*i-1);imco_be(2*i)]/A];

end

WP=M3'*W;

NBBN=inv(M3'*M3);

LP=-NBBN*WP;

v=M3*LP+W;

imco_be=imco_be+v;

X0=-(LP(1)*LP(9)+LP(2)*LP(10)+LP(3)*LP(11))/(LP(9)*LP(9)+LP(10)*LP(10)+LP (11)*LP(11));

Y0=-(LP(5)*LP(9)+LP(6)*LP(10)+LP(7)*LP(11))/(LP(9)*LP(9)+LP(10)*LP(10)+LP (11)*LP(11));

1

FX=(-X0*X0+(LP(1)*LP(1)+LP(2)*LP(2)+LP(3)*LP(3))/(LP(9)*LP(9)+LP(10)*LP( 10)+LP(11)*LP(11)))^0.5;

V1(1)=FX;

V0(1)=v'*v;

for J=1:1:8%由此控制迭代平差次数

M3=[];

W=[];

for i=1:size(imco,2)

xyz=obco(i,:);

A=xyz(1)*LP(9)+xyz(2)*LP(10)+xyz(3)*LP(11)+1;

r2=(imco_be(2*i-1)-X0)*(imco_be(2*i-1)-X0)+(imco_be(2*i)-Y0)*(imco_be(2*i)-Y 0);

M1=[A*(imco_be(2*i-1)-X0)*r2;A*(imco_be(2*i)-Y0)*r2];

M2=-[M(2*i-1:2*i,:),M1]/A;

M3=[M3;M2];

W=[W;-[imco_be(2*i-1);imco_be(2*i)]/A];

end

WP=M3'*W;

NBBN=inv(M3'*M3);

LP=-NBBN*WP;

v=M3*LP+W;

imco_be=imco_be+v;

X0=-(LP(1)*LP(9)+LP(2)*LP(10)+LP(3)*LP(11))/(LP(9)*LP(9)+LP(10)*LP(10)+LP (11)*LP(11));

Y0=-(LP(5)*LP(9)+LP(6)*LP(10)+LP(7)*LP(11))/(LP(9)*LP(9)+LP(10)*LP(10)+LP (11)*LP(11));

FX=(-X0*X0+(LP(1)*LP(1)+LP(2)*LP(2)+LP(3)*LP(3))/(LP(9)*LP(9)+LP(10)*LP( 10)+LP(11)*LP(11)))^0.5;

V1(J+1,:)=FX;

V2(J,:)=V1(J+1)-V1(J);

V0(J+1,:)=v'*v;

%由此记录每次计算后改正数的大小

end

FX=(-X0*X0+(LP(1)*LP(1)+LP(2)*LP(2)+LP(3)*LP(3))/(LP(9)*LP(9)+LP(10)*LP( 10)+LP(11)*LP(11)))^0.5;

FY=(-Y0*Y0+(LP(5)*LP(5)+LP(6)*LP(6)+LP(7)*LP(7))/(LP(9)*LP(9)+LP(10)*LP( 10)+LP(11)*LP(11)))^0.5;

%F为求得的焦距

format

F=(FX+FY)/2;

F

X0

Y0

相关文档
最新文档