《单向后方交会实验报告》由会员分享,可在线阅读,更多相关《单向后方交会实验报告(13页珍藏版)》请在金锄头文库上搜索。
1、课程设计报告 班级:测绘一班 学号: 姓名:罗超 日期:2015.4.26目录一、计算原理3二、算法流程4三、源程序5四、计算结果13五、结果分析13六、心得体会13一、计算原理 已知条件摄影机主距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.4
2、664.4340426.5430319.81757.31以单像空间后方交会方法,求解该像片的外方位元素。二、算法流程(1)获取已知数据。从航摄资料中差取平均航高与摄影机主距;获取控制点的地面测量坐标并转换为地面摄影坐标。(2)量测控制点的像点坐标并作系统误差改正。(3)确定未知数的初始值。在竖直摄影且地面控制点大体对称分布的情况下,按如下方法确定初始值,即,(4) 用三个角元素的初始值按下式,计算各个方向余弦值,组成旋转矩阵R (5) 逐点计算像点坐标的近似值。利用未知数的近似值和控制点的地面坐标;带入共线方程式,逐点近似像点坐标的近似值(x)、(y)。(6) 逐点计算误差方程式的系数和常数项
3、,组成误差方程式。(7) 计算法方程的系数矩阵和常数项,组成法方程式。 (8) 解法方程,求得外方位元素的改正数。(9) 用前次迭代取得的近似值,加本次迭代的改正数,计算外方位元素的新值。(10) 将求得的外方位元素改正数与规定的限差比较,若小于限差,则迭代结束。负责用新的近似值重复(4)-(9),直到满足要求为止。 用共线方程进行空间后方交会的程序框如图所示。输入原始数据像点坐标计算,系统误差正确定外方位因素初始值组成旋转矩阵R逐点组成误差方程式并法化所有像点完否是解法方程,求外方位元素改正数计算改正后的外方位元素外方位元素改正数是否小于限差是输出计算成果,计算并结束结束并显示错误信息迭代次
4、数小于n 是否 否3、 源程序#include”iostreamusing namespace std;#include”fstream#include const int n=6;void inverse(double cnn);templatevoid transpose (TI*mat1,T2*mat2,int a,int b);templatevoid multi(T1*mat1,T2*mat2,T2*result, int a, int b, int c);int main() doublex42=-0.08615,-0.06899,-0.05340,0.08221,-0.01478
5、,-0.07663,0.01046,0.06443; doubleX43=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 X06=0;/设定未知数(XS,YS,ZS,三个角度)初始值 double f=0.15324;/摄影机主距f=153.24mm double a=1/40000.0;/像片比例尺为1:40000 double R33=0;/初始化旋转知阵R double
6、 approx_ x8=0;/用于存放像点估计值 double A86二0;/定义了一个系数阵 double AT68二0;/定义了A的转置知阵 double L8=0:/定义常数项const double pi=3.97932;double Asum66=0;double result26=0;double resultl68=0;double sumXYZ3=0;cout.precision(5);cout”已知像点坐标为:n”;for(i=0;i4;i+) for(j=0;j2;j+) coutfixed: if (j=0) cout”x”i+l”=”setw (8)xij” ”;els
7、ecout”yi+1”=”setw(6)xijendl; cout”己知地面四个点的坐标为:n”;for(i=0;i4;i+) for(j=0;j3;j+) if (j=0)cout”X;couti+1;cout”= “Xij” ”;else if(j=1) cout”Y;couti+1;cout”= “Xij)” ”:elsecout”Z”;couti+1;cout”= ”;coutXijendl; coutendl;for(j=0;j3;j+) for(i=0;i4;i+) sumXYZj+=Xij;for(i=0;i2;i+) X0i=sumXYZi/4;/X0,Y0初始化X0i=1/a
8、*f+sumXYZ2/4. 0;/对Z0进行初始化do R00=cos(X03)*cos(X05)-sin(X03)*sin(X04)*sin(X05); R0I=-cos(X03)*sin(X05)-sin(X03)*sin(X04)*cos(X05); R02=-sin(X03)*cos(X04); R10=cos(X04)*sin(X05); RI11=cos(X04)*cos(X05); R12=-sin(X04); R20=sin(X03)*cos(X05)+cos(X03)*sin(X04)*sin(X05); R2l=-sin(X03)*sin(X05)+cos(X03)*sin
9、(X04)*cos(X05); R22=cos(X03)*cos(X04);/第一个像点的估计值,第一个点的坐标存放于X 0 0,X 0 1,X 0 2approx_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)+R12*(X01-X01)+R22*(X02-X02); /第二个像点的估计值,第2个点的坐标存放于X10
10、,X11,X12 approx_x2=-f*(R00*(X10-X00)+R10*(X11-X01)+R20*(X12-X02)/(R02*(X10-X00)+R12*(X11-X01)+R22*(X12-X02); approx_x3=-f*(R01*(X10-X00)+R11*(X11-X01)+R21*(X12-X02)/(R02*(X10-X00)+R12*(X11-X01)+R22*(X12-X02); /第三个像点的估计值,第3个点的坐标存放于X20,X21,X22 approx_x4=-f*(R00*(X20-X00)+R10*(X21-X01)+R20*(X22-X02)/(R
11、02*(X20-X00)+R12*(X21-X01)+R22*(X22-X02);approx_x5=-f*(R01*(X20-X00)+R11*(X21-X01)+R21*(X22-X02)/(R02*(X20-X00)+R12*(X21-X01)+R22*(X22-X02); /第四个像点的估计值,第4个点的坐标存放于X30,X31,X32 approx_x6=-f*(R00*(X30-X00)+R10*(X31-X01)+R20*(X32-X02)/(R02*(X30-X00)+R12*(X31-X01)+R22*(X32-X02); approx_x7=-f*(R01*(X30-X00)+R11*(X31-X01)+R21*(X32-X02)/(R02*(X30-X00)+R12*(X31-X01)+R22