单像空间后方交会实习报告.docx
- 文档编号:25110076
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:13
- 大小:123.52KB
单像空间后方交会实习报告.docx
《单像空间后方交会实习报告.docx》由会员分享,可在线阅读,更多相关《单像空间后方交会实习报告.docx(13页珍藏版)》请在冰豆网上搜索。
单像空间后方交会实习报告
摄影测量学
单像空间后方交会实习报告
一、实习目的
1.掌握空间后方交会的定义和实现算法
(1)定义:
空间后方交会是以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,φ,ω,κ。
(2)算法:
由于每一对像方和物方共轭点可列出2个方程,因此若有3个已知地面坐标的控制点,则可列出6个方程,解求6个外方位元素的改正数△Xs,△Ys,△Zs,△φ,△ω,△κ。
实际应用中为了提高解算精度,常有多余观测方程,通常是在影像的四个角上选取4个或均匀地选择更多的地面控制点,因而要用最小二乘平差方法进行计算。
2.了解摄影测量平差的基本过程
(1)获取已知数据。
从摄影资料中查取影像比例尺1/m,平均摄影距离(航空摄影的航高)、内方位元素x0,y0,f;获取控制点的空间坐标X,Y,Z。
(2)量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
(3)确定未知数的初始值。
单像空间后方交会必须给出待定参数的初始值,在竖直航空摄影且地面控制点大体对称分布的情况下,Xs0和Ys0为均值,Zs0为航高,φ、ω、κ的初值都设为0。
或者κ的初值可在航迹图上找出或根据控制点坐标通过坐标正反变换求出。
(4)计算旋转矩阵R。
利用角元素近似值计算方向余弦值,组成R阵。
(5)逐点计算像点坐标的近似值。
利用未知数的近似值按共线条件式计算控制点像点坐标的近似值(x),(y)。
(6)逐点计算误差方程式的系数和常数项,组成误差方程式。
(7)计算法方程的系数矩阵ATA与常数项ATL,组成法方程式。
(8)解求外方位元素。
根据法方程,解求外方位元素改正数,并与相应的近似值求和,得到外方位元素新的近似值。
(9)检查计算是否收敛。
将所求得的外方位元素的改正数与规定的限差比较,通常对φ,ω,κ的改正数△φ,△ω,△κ给予限差,通常为0.000001弧度,当3个改正数均小于0.000001弧度时,迭代结束。
否则用新的近似值重复(4)~(8)步骤的计算,直到满足要求为止。
3.通过对提供的试验数据进行计算,输出像片的外方位元素并评定精度。
深入理解单片空间后方交会的原理,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。
通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强综合运用所学知识解决实际问题的能力。
4.实习过程:
4.1学习单张像片空间后方交会的基本理论,掌握其基本思想。
如果我们知道每幅影像的6个外方位元素,就能确定被摄物体与航摄影像的关系。
而单像空间后方交会就是用于测定像片的外方位元素的,它的基本思想是:
以单幅影像为基础,从影像所覆盖的地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,p,w,k.由于空间后方交会所采用的数学模型共线方程是非线性函数,为了便于外方位元素的解求,首先将其线性化。
4.2在纸上绘出空间后方交会的计算机程序框图。
为了能够在宏观上指导我们编写程序,我们需要在草稿纸上绘出程序框图。
二、源代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespace单像空间的后方交会
{
publicclasscalculate
{
privatedoublej,k,l,Xs,Ys,Zs;//六个外方位元素
privatedoublef=28.1539;//主距
structpoint//像点和地面点坐标
{
publicdoublex,y,X,Y,Z;
}
privatepoint[]p=newpoint[4];//存取控制点的坐标
privatedouble[]R=newdouble[9];//旋转矩阵
privatedouble[]a=newdouble[8];//近似值坐标
privatedouble[]L=newdouble[8];//误差方程常数项
privatedouble[,]A=newdouble[8,6];//误差方程系数项
privateintcount=0;
publicvoidY(double[]q)
{
for(intn=0;n<4;n++)
{
intm=n*5;
Console.WriteLine("请输入第{0}控制点的坐标",n+1);
q[m]=Convert.ToDouble(Console.ReadLine());
q[m+1]=Convert.ToDouble(Console.ReadLine());
q[m+2]=Convert.ToDouble(Console.ReadLine());
q[m+3]=Convert.ToDouble(Console.ReadLine());
q[m+4]=Convert.ToDouble(Console.ReadLine());
p[n].x=q[m];
p[n].y=q[m+1];
p[n].X=q[m+2];
p[n].Y=q[m+3];
p[n].Z=q[m+4];
}
doubleave=0,sum=0;//求比例尺分母,用来求外方位元素
for(intn=0;n<3;n++)
{
for(intm=n+1;m<4;m++)
{
sum+=Math.Sqrt(Math.Pow(p[n].X-p[m].X,2)+Math.Pow(p[n].Y-p[m].Y,2))/Math.Sqrt(Math.Pow(p[n].x-p[m].x,2)+Math.Pow(p[n].y-p[m].y,2));
}
}
ave=sum/6;
doublej=0.054882;k=0.057034;l=-0.036175;//六个外方位元素的近似值
doubleXs=500215.49;
doubleYs=4185301.89;
doubleZs=1475.56;
}
privatedoublesin(doublem)
{
returnMath.Sin(m);
}
privatedoublecos(doublem)
{
returnMath.Cos(m);
}
publicvoidcalX()//计算旋转矩阵
{
R[0]=cos(j)*cos(k)-sin(j)*sin(l)*sin(k);
R[1]=-cos(j)*sin(k)-sin(j)*sin(l)*cos(k);
R[2]=-sin(j)*cos(l);
R[3]=cos(l)*sin(k);
R[4]=cos(l)*cos(k);
R[5]=-sin(l);
R[6]=sin(j)*cos(k)+cos(j)*sin(l)*sin(k);
R[7]=-sin(j)*sin(k)+cos(j)*sin(l)*cos(k);
R[8]=cos(j)*cos(l);
}
publicvoidcalJSZ()//计算像点坐标近似值
{
for(intn=0;n<4;n++)
{
a[2*n]=-f*(R[0]*(p[n].X-Xs)+R[3]*(p[n].Y-Ys)+R[6]*(p[n].Z-Zs))/(R[2]*(p[n].X-Xs)+R[5]*(p[n].Y-Ys)+R[8]*(p[n].Z-Zs));
a[2*n+1]=-f*(R[1]*(p[n].X-Xs)+R[4]*(p[n].Y-Ys)+R[7]*(p[n].Z-Zs))/(R[2]*(p[n].X-Xs)+R[5]*(p[n].Y-Ys)+R[8]*(p[n].Z-Zs));
}
}
publicvoidcalXSJZandCSX()//计算系数矩阵和常数项
{
for(intn=0;n<4;n++)//计算常数项
{
L[2*n]=p[n].x-a[2*n];
L[2*n+1]=p[n].y-a[2*n+1];
}
for(intn=0;n<4;n++)//计算系数矩阵
{
doublez=R[2]*(p[n].X-Xs)+R[5]*(p[n].Y-Ys)+R[8]*(p[n].Z-Zs);
A[2*n,0]=(R[0]*f+R[2]*p[n].x)/z;
A[2*n,1]=(R[3]*f+R[5]*p[n].x)/z;
A[2*n,2]=(R[6]*f+R[8]*p[n].x)/z;
A[2*n,3]=p[n].y*sin(l)-(p[n].x*(p[n].x*cos(k)-p[n].y*sin(k))/f+f*cos(k))*cos(l);
A[2*n,4]=-f*sin(k)-p[n].x/f*(p[n].x*sin(k)+p[n].y*cos(k));
A[2*n,5]=p[n].y;
A[2*n+1,0]=(R[1]*f+R[2]*p[n].y)/z;
A[2*n+1,1]=(R[4]*f+R[5]*p[n].y)/z;
A[2*n+1,2]=(R[7]*f+R[8]*p[n].y)/z;
A[2*n+1,3]=p[n].x*sin(l)-(p[n].y*(p[n].x*cos(k)-p[n].y*sin(k))/f-f*sin(k))*cos(l);
A[2*n+1,4]=-f*cos(k)-p[n].y/f*(p[n].x*sin(k)+p[n].y*cos(k));
A[2*n,5]=-p[n].x;
}
}
publicdoublecalJSGZS()//计算改正数
{
double[,]AT=newdouble[6,8];//A转置
double[,]temp=newdouble[6,6];//A转置与A的乘积
double[]X=newdouble[6];//改正数
double[]ATL=newdouble[6];//A转置与L相乘的积
intn,m,s;
for(n=0;n<8;n++)//求A的转置矩阵AT
for(m=0;m<6;m++)
{
AT[m,n]=AT[n,m];
}
for(n=0;n<6;n++)//求A转置与A的乘积
for(m=0;m<6;m++)
{
temp[n,m]=0;
for(s=0;s<8;s++)
{
temp[n,m]+=AT[n,s]*A[s,m];
}
}
MA(temp);//求逆
for(n=0;n<6;n++)//求A的转置与L的乘积
{
for(m=0;m<8;m++)
{
ATL[n]+=AT[n,m]*L[m];
}
}
for(n=0;n<6;n++)//求改正数X
{
for(m=0;m<6;m++)
{
X[n]+=temp[n,m]*ATL[m];
}
}
Xs+=X[0];
Ys+=X[1];
Zs+=X[2];
j+=X[3];
k+=X[4];
l+=X[5];
returnXs;
returnYs;
returnZs;
returnj;
returnk;
returnl;
}
publicvoidMain(string[]args)//计算流程n
{
while(count>=4)
{
calX();
calJSZ();
calXSJZandCSX();
Console.WriteLine("第{0}次迭代的结果",count);
calJSGZS();
count++;
}
}
privatevoidMA(double[,]c)
{
inti,j,h,m;
constintn=6;
doublel;
double[,]q=newdouble[n,12];
for(i=0;i { for(j=0;j<12;j++) { q[i,j]=c[i,j]; } } for(i=0;i { for(j=0;j<12;j++)//构造单位阵 { if(i+6==j) q[i,j]=1; else q[i,j]=0; } } for(h=0,m=0;m { for(i=m+1;i { if(q[i,h]==0d) continue; l=q[m,h]/q[i,h]; for(j=0;j<12;j++) { q[i,j]*=l; q[i,j]-=q[m,j]; } } } for(h=n-1,m=n-1;m>0;m--,h--)//消去对角线以上的数据 { for(i=m-1;i>=0;i--) { if(q[i,h]==0d) continue; l=q[m,h]/q[i,h]; for(j=0;j<12;j++) { q[i,j]*=l; q[i,j]-=q[m,j]; } } } for(i=0;i { l=1.0/q[i,i]; for(j=0;j<12;j++) { q[i,j]*=l; } } for(i=0;i { for(j=0;j { c[i,j]=q[i,j+6]; } } } } } 三、计算结果 起算数据文件为: 文件存储的计算结果为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 空间 后方 交会 实习 报告