
(完整word版)单像空间后方交会实习报告.doc
12页摄影测量学单像空间后方交会实习报告1一、 实习目的1. 掌握空间后方交会的定义和实现算法(1) 定义:空间后方交会是以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发, 根据共线条件方程, 解求该影像在航空摄影时刻的外方位元素 Xs ,Ys, Zs,φ , ω ,κ 2) 算法:由于每一对像方和物方共轭点可列出 2 个方程,因此若有 3 个已知地面坐标的控制点,则可列出 6 个方程,解求 6 个外方位元素的改正数△ Xs ,△ Ys,△ Zs,△ φ ,△ ω,△ κ 实际应用中为了提高解算精度,常有多余观测方程,通常是在影像的四个角上选取 4 个或均匀地选择更多的地面控制点, 因而要用最小二乘平差方法进行计算2.了解摄影测量平差的基本过程(1)获取已知数据从摄影资料中查取影像比例尺1/m ,平均摄影距离(航空摄影的航高)、内方位元素 x0, y0, f;获取控制点的空间坐标X ,Y,Z2) 量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标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 在纸上绘出空间后方交会的计算机程序框图为了能够在宏观上指导我们编写程序,我们需要在草稿纸上绘出程序框图23输入原始数据归算像点坐标 x, y计算和确定初值 Xs0, Ys0, Zs0, φ0, ω 0,κ 0组成旋转矩阵 R计算 (x),(y) 和 lx ,ly是逐点组成误差方程式并法化否迭所有点完否?代次数解法方程,求未知数改正数小于限计算改正后的外方位元素差否否?未知数改正数 <限差否?否 整理并输出计算结果输出中间结果和出错信息正常结束非正常结束4二、 源代码using System;using System.Linq;using System.Text;namespace 单像空间的后方交会{public class calculate{private double j, k, l, Xs, Ys, Zs;// 六个外方位元素private double f = 28.1539;// 主距struct point // 像点和地面点坐标{public double x, y, X, Y, Z;}private point[] p = new point[4];// 存取控制点的坐标private double[] R = new double[9];// 旋转矩阵private double[] a = new double[8];// 近似值坐标private double[] L = new double[8];// 误差方程常数项private double[,] A = new double[8, 6];// 误差方程系数项private int count = 0;public void Y(double[] q){for (int n = 0; n < 4; n++){int m = 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];}double ave = 0, sum = 0;// 求比例尺分母,用来求外方位元素 for (int n = 0; n < 3; n++){for (int m = n + 1; m < 4; m++)5{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;double j = 0.054882; k = 0.057034; l = -0.036175;// 六个外方位元素的近似值doubleXs = 500215.49;doubleYs = 4185301.89;doubleZs = 1475.56;}private double sin(double m){returnMath.Sin(m);}private double cos(double m){returnMath.Cos(m);}public void calX()// 计算旋转矩阵{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);}public void calJSZ()// 计算像点坐标近似值{for (int n = 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));}}public void calXSJZandCSX()// 计算系数矩阵和常数项{6for (int n = 0; n < 4; n++)。












