1、已知条件:摄影机主距f=153.24mm,x0=0,y0=0, 像片比例尺为1:40000,有四对点的像点坐标与相应的地面坐标如下表。 点号像点坐标地面坐标x(mm)y(mm)X(m)Y(m)Z(m)1-86.15-68.9936589.4125273.322195.172-53.4082.2137631.0831324.51728.693-14.78-76.6339100.9724934.982386.50410.4664.4340426.5430319.81757.31以单像空间后方交会方法,求解该像片的外方位元素。二、 计算原理1. 获取已知数据。从航摄资料中查取平均航高与摄影机主距;获
2、取控制点的地面测量坐标并转换为地面摄测坐标。2. 测量控制点的像点坐标并作系统误差改正。3. 确定未知数的初始值。在竖直摄影且地面控制点大体对称分布的情况下,按如下方法确定初始值,即式中:为摄影比例尺分母;为控制点个数 4. 用三个角元素的初始值按下式计算各方向余弦值,组成旋转矩阵矩阵中各元素的计算公式如下:5. 逐点计算像点坐标的近似值。利用未知数的近似值和控制点的地面坐标,带入以下共线方程式, 逐点计算像点坐标的近似值、6. 逐点计算误差方程式的系数和常数项,组成误差方程式。由常数项计算公式:得到常数项矩阵计算式为:7. 计算法方程的是系数矩阵和常数项,组成法方程式。8. 解法方程,求得外
3、方位元素的改正数。9. 用前次迭代取得的近似值,加本次迭代的改正数,计算外方位元素的新值。代表迭代次数。10. 将求得的外方位元素改正数与规定的限差比较,若小于限差,则迭代结束。否则用新的近似值重复49满足要求为止。11. 由误差方程的计算式:以及单位权中误差的计算式(式中:表示多余观测数)以及平差中6个参数的协因数阵最终得到参数的中误差为三、 算法流程否是输入原始数据像点坐标计算,系统误差改正确定外方位元素初始值组成旋转矩阵R逐点组成误差方程式并法化所有像点完否计算改正后的外方位元素计算中误差,输出成果,结束解法方程,求外方位元素改正数外方位元素改正数是否小于限差结束并提示错误信息迭代次数小
4、于n四、 源程序源程序代码请见附页五、 计算结果在经过三次迭代之后得到的最终成果如表1所示表1,最终计算结果Xs(米)Ys(米)Zs(米)(弧度)(弧度)(弧度)39795.45225827476.4623857572.685988-0.0039870.0021140.067578六、 结果分析由计算结果可知在拍摄照片瞬间,摄影中心在地面摄影测量坐标系中的坐标为(39795.452258,27476.462385,7572.685988)(单位:米),航向倾角为-0.003987弧度,旁向倾角为0.002114弧度,像片旋角为0.067578弧度。表2,精度评定结果参数XsYsZs中误差1.1
5、073 1.2494 0.4881 0.0002 0.0001 七、 心得与体会通过本次实验,我对单张像片的空间后方交会的计算原理及实现过程有了很深的认识,并在牢记各种计算公式的推导过程基础上做到了熟练应用。在本次实验中,我遇到了很多困难,但是都一一得到了解决,在解决困难的过程中的编程能力得到了提高,对其所涉及到的知识的印象也得到了加深。这个程序本身还有一些不足,例如:在迭代过程中的矩阵的相乘、输出等,没有采用编写函数的形式,而是逐一进行计算,这是程序整体看起来较臃肿。在编程过程中为了确保计算的准确性,我还利用matlab同步编写了一个相同功能的计算单张相片空间后方交会的迭代程序,并以此来验算
6、原c+程序的正确性。现在编写完这个程序,心中很自豪,也有一些遗憾,因为我想用c#来编写,因为c#在暑期实习用过之后,时隔近一年在没有复习,不免把学会的知识又还给了老师,本想通过这次实验对c#进行复习,但是由于时间原因以及一些个人因素,没能达到自己原本的目标。总之,感谢老师给了我这次锻炼自己、提升自己的机会。八、 附页1. c+程序#includeiostreamusing namespace std;fstream#include const int n=6;void inverse(double cnn);templatevoid transpose (T1*mat1,T2*mat2,int
7、 a,int b);void multi(T1*mat1,T2*mat2,T2 * result,int a,int b,int c);int main()double x42=-0.08615,-0.06899,-0.05340,0.08221,-0.01478,-0.07663,0.01046,0.06443;double X43=36589.41,25273.32,2195.17,37631.08,31324.51,728.69,39100.97,24934.98,2386.50,40426.54,30319.81,757.31;int i,j,num=0;/num为迭代次数double
8、 X06=0;/设定未知数(XS,YS,ZS,三个角度)初始值double f=0.15324;/摄影机主距f=153.24mmdouble a=1/40000.0;/像片比例尺为1:40000double R33=0;/初始化旋转矩阵R double approx_x8=0;/用于存放像点估计值。double A86=0;/定义了一个系数阵double AT68=0;/定义了A的转置矩阵double L8=0;/定义常数项const double pi=3.1415926535897932;double Asum66=0;double result26=0;double result168=
9、0;double sumXYZ3=0;cout.precision(5);cout已知像点坐标为:n;for(i=0;i4;i+)for(j=0;j2;j+)coutfixed;if(j=0)coutxi+1= setw(8)xij elseysetw(6)endl;cout已知地面四个点的坐标为:for(i=0;for(j=0;3;if(j=0)coutXcouti+1;Xijelseif(j=1)coutYelseZfor(i=0;sumXYZj+=Xij;for(i=0;X0i=sumXYZi/4;/X0,Y0初始化X0i=1/a*f+sumXYZ2/4.0;/对Z0进行初始化doR00
10、=cos(X03)*cos(X05)-sin(X03)*sin(X04)*sin(X05);R01=-cos(X03)*sin(X05)-sin(X03)*sin(X04)*cos(X05);R02=-sin(X03)*cos(X04);R10=cos(X04)*sin(X05);R11=cos(X04)*cos(X05);R12=-sin(X04);R20=sin(X03)*cos(X05)+cos(X03)*sin(X04)*sin(X05);R21=-sin(X03)*sin(X05)+cos(X03)*sin(X04)*cos(X05);R22=cos(X03)*cos(X04);/第一个像点的估计值,第一个点的坐标存放于X00,X01,X02approx_x0=-f*(R00*(X00-X00)+R10*(X01-X01)+R20*(X02-X02)/(R02*(X00-X00)+R12*(X01-X01)+R22*(X02-X02);approx_x1=-f*(R01*(X00-X00)+R11*(X01-X01)+R21*(X02-X02)/(R02*(X00-X00)+R1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1