Matlab解算空间后方交会外方位元素


  本问题为武汉大学摄影测量学教材课后习题,现在用MATLAB实现,供大家学习参考。

1 问题描述

  已知摄像机主距f=153.24mm,四对点的像点坐标与相应的地面坐标列入下表 [ 1 ] ^{[1]} [1]

点号像点坐标地面坐标
x(mm)y(mm)X(mm)Y(mm)Z(mm)
1-86.15-68.9936589.4125273.322195.17
2-53.4082.2137631.0831324.51728.69
3-14.78-76.6339100.9724934.982386.50
410.4664.4340426.5430319.81757.31

2 实现部分

  直接上代码

%单像空间后方交会%
%编程环境:MATLAB%

%起算数据
x=[-86.15 -53.40 -14.78 10.46];
y=[-68.99 82.21 -76.63 64.43];
X=[36589.41 37631.08 39100.97 40426.54];
Y=[25273.32 31324.51 24934.98 30319.81];
Z=[2195.17 728.69 2386.50 757.31];
f=153.24;
m=50000;%比例尺暂时定为50000

%单位转换,mm2m
x=x/1000;
y=y/1000;
f=f/1000;

%确定外方位元素初始值
XS=mean(X(:));
YS=mean(Y(:));
ZS=m*f;
phi=0;
omg=0;
kai=0;

%设置迭代次数记录函数“dd”
dd=-1;

while(1)  %判断为真就循环

%确定方向余弦 
    a1=cos(phi)*cos(kai)-sin(phi)*sin(omg)*sin(kai);
    a2=-cos(phi)*sin(kai)-sin(phi)*sin(omg)*cos(kai);
    a3=-sin(phi)*cos(omg);
    b1=cos(omg)*sin(kai);
    b2=cos(omg)*cos(kai);
    b3=-sin(omg);
    c1=sin(phi)*cos(kai)+cos(phi)*sin(omg)*sin(kai);
    c2=-sin(phi)*sin(kai)+cos(phi)*sin(omg)*cos(kai);
    c3=cos(phi)*cos(omg);

%构造辅助函数(注意每个辅助函数的值不同)
    for i=1:4
	Xb(i)=a1*(X(i)-XS)+b1*(Y(i)-YS)+c1*(Z(i)-ZS);
	Yb(i)=a2*(X(i)-XS)+b2*(Y(i)-YS)+c2*(Z(i)-ZS);
	Zb(i)=a3*(X(i)-XS)+b3*(Y(i)-YS)+c3*(Z(i)-ZS);
    end

%分别计算4个控制点x,y近似值
    for i=1:4
	xj(i) = -f*Xb(i)/Zb(i);
	yj(i) = -f*Yb(i)/Zb(i);
	L(2*i-1,1) = x(i)-xj(i);
	L(2*i,1) = y(i)-yj(i);
    end

%误差方程式中系数(偏导数)矩阵的计算
    for i=1:4
	A(2*i-1,1)=(a1*f+a3*x(i))/Zb(i);
	A(2*i-1,2)=(b1*f+b3*x(i))/Zb(i);
	A(2*i-1,3)=(c1*f+c3*x(i))/Zb(i);
	A(2*i-1,4)=y(i)*sin(omg)-(x(i)*(x(i)*cos(kai)-y(i)*sin(kai))/f+f*cos(kai))*cos(omg);
	A(2*i-1,5)=-f*sin(kai)-x(i)*(x(i)*sin(kai)+y(i)*cos(kai))/f;
	A(2*i-1,6)=y(i);
	A(2*i,1)=(a2*f+a3*y(i))/Zb(i);
	A(2*i,2)=(b2*f+b3*y(i))/Zb(i);
	A(2*i,3)=(c2*f+c3*y(i))/Zb(i);
	A(2*i,4)=-x(i)*sin(omg)-(y(i)*(x(i)*cos(kai)-y(i)*sin(kai))/f-f*sin(kai))*cos(omg);
	A(2*i,5)=-f*cos(kai)-y(i)*(x(i)*sin(kai)+y(i)*cos(kai))/f;
	A(2*i,6)=-x(i);
    end

%计算法方程
    GZS=inv(A'*A)*A'*L;
    XX=GZS+[XS;YS;ZS;phi;omg;kai];
    XS=XX(1);
    YS=XX(2);
    ZS=XX(3);
    phi=XX(4);
    omg=XX(5);
    kai=XX(6);
    dd=dd+1;

%判断改正数精度(%限差应该是多少?)
    if(abs(GZS(1))<3*(10)^(-5)&&abs(GZS(2))<3*(10)^(-5)&&abs(GZS(3))<3*(10)^(-5)&&abs(GZS(4))<3*(10)^(-5)&& abs(GZS(5))<3*(10)^(-5)&& abs(GZS(6))<3*(10)^(-5))	
	break;
    end  
end

%角度转换
phi=vpa(degrees2dms(rad2deg(XX(4))),4);
omg=vpa(degrees2dms(rad2deg(XX(5))),4);
kai=vpa(degrees2dms(rad2deg(XX(6))),4);
fprintf('迭代次数为%d次\nXS=%.2f\nYS=%.2f\nZS=%.2f\nphi=%d度%d分%.2f秒\nomg=%d度%d分%.2f秒\nkai=%d度%d分%.2f秒',dd,XS,YS,ZS,phi(1),phi(2),phi(3),omg(1),omg(2),omg(3),kai(1),kai(2),kai(3));

计算结果为
在这里插入图片描述

参考文献

[1]王佩军, 徐亚明. 摄影测量学:测绘工程专业[M]. 武汉大学出版社, 2005.


               赶紧点赞、收藏起来吧!不然下次就找不到了💕

  • 17
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测不绘的返工小渠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值