摄影测量学后方交会matlab实习报告
matlab_实习报告
matlab_实习报告在大学的学习生涯中,实习是一个非常重要的环节,它能够让我们将理论知识与实际应用相结合,提升自己的专业技能和综合素质。
本次实习,我选择了使用 MATLAB 这个强大的工具进行实践操作,通过一段时间的学习和实践,我收获颇丰。
一、实习目的本次实习的主要目的是深入了解和掌握MATLAB 软件的使用方法,能够运用其解决实际问题,并提高自己的编程能力和逻辑思维能力。
同时,通过实际项目的操作,培养自己的团队协作精神和解决问题的能力,为今后的学习和工作打下坚实的基础。
二、实习单位及岗位介绍我实习的单位是_____,在实习期间,我主要负责利用 MATLAB 进行数据分析和算法实现的相关工作。
三、实习内容及过程(一)基础学习在实习的初期,我首先对 MATLAB 的基本语法和操作进行了系统的学习。
了解了变量的定义、数据类型、矩阵运算、函数的编写等基础知识。
通过大量的练习和实例,我逐渐熟悉了 MATLAB 的编程环境,能够熟练地编写简单的程序。
例如,在学习矩阵运算时,我通过编写程序实现了矩阵的加法、乘法、求逆等操作,深刻理解了矩阵运算在数学和工程中的重要应用。
(二)项目实践在掌握了基础知识后,我开始参与实际的项目。
其中一个项目是对一组数据进行分析和处理,以提取有用的信息。
首先,我使用MATLAB 读取数据文件,并对数据进行预处理,包括去除噪声、缺失值处理等。
然后,运用统计学方法对数据进行分析,计算均值、方差、相关性等统计量。
最后,通过绘图函数将分析结果以直观的图表形式展示出来,以便更好地理解数据的特征和趋势。
在这个过程中,我遇到了很多问题。
例如,数据的格式不一致导致读取错误,算法的复杂度过高导致运行时间过长等。
通过查阅资料、请教同事和不断地调试,我最终解决了这些问题,顺利完成了项目任务。
(三)算法实现除了数据分析,我还参与了算法的实现工作。
在一个图像识别的项目中,需要使用机器学习算法对图像进行分类。
摄影测量学实习报告-实习报告.doc
摄影测量学实习报告-实习报告第一篇:摄影测量学实习报告摄影测量学实习报告为期两周的摄影测量学实习今天正式结束了,虽然两周时间并不长,但是对于我来说,学到的东西远不能用时间来衡量。
在这两周里,我们完成了全数字摄影测量系统实习、数字影像分割程序编制、立体影像匹配程序编制等内容,这些东西让我们的两周很充实,很有意义。
其实刚开始时一直怀疑摄影测量学实习有什么意义,到了今天,我才发现这是有意义的。
因为通过本次实习,我们可以将课堂理论与实践相结合,使我们深入掌握摄影测量学基本概念和原理,加强摄影测量学的基本技能训练,并且培养了我们的分析问题和解决实际问题的能力。
通过使用数字摄影测量工作站,我们可以了解数字摄影测量的内定向、相对定向、绝对定向、测图过程及方法;通过开发数字影像分割程序和立体影像匹配程序,使自己掌握数字摄影测量基本方法与实现技术,为今后从事有关应用遥感技术应用和数字摄影测量打下坚实基础。
所以,就算现在觉得没什么用,但是也为将来奠定了很好的基础。
正因为如此,在这两周中我们都很认真的在学习并且完成实习任务。
其实说是两周,但时间真的更短,毕竟赶上了元旦假期,联欢晚会等一系列活动。
所以如何在短暂的时间里,更出色的完成任务,是我们必须考虑的。
记得实习动员的时候,老师花了很长时间又给我们讲了一次这次实习对我们的重要性,这很触动我们,毕竟老师的苦口婆心我们都看在眼里。
不光如此,老师又耐心的把实习要求,实习任务,实习步骤讲解了一遍,让我们大致明白了这次实习从何入手,这让本来很迷茫的我们瞬间找到了方向,也为我们接下来的工作提供了便利。
动员结束的日子,我们便进入机房,正式开始了实习。
首先我们结束了全数字摄影测量系统,这款软件是我们从来没有接触过的,所以刚开始的时候很陌生,不知道怎么用,也不知道能用来做什么。
还好,我们有老师的细致讲解,并且借助帮助向导可以解决我们很多问题。
所以在这个实习中,我们没有遇到太多困难。
让我印象深刻的是,我在做我们小组的绝对定向时,总是提示同名点数不够,就因为此,很难往下一步进行。
摄影测量学单像空间后方交会编程实习报告(精品资料).doc
【最新整理,下载后即可编辑】摄影测量学单像空间后方交会编程实习报告班级:130x姓名:xx学号:2013302590xxx指导老师:李欣一、实习目的通过对提供的数据进行计算,输出像片的外方位元素并评定精度。
深入理解单像空间后方交会的思想,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。
通过尝试编程实现加强编程处理问题的能力和对实习内容的理解,通过对实验结果的分析,增强综合运用所学知识解决实际问题的能力。
了解摄影测量平差的基本过程,掌握空间后方交会的定义和实现算法。
二、实习内容根据学习的单像空间后方交会的知识,用程序设计语言(C++或C语言)编写一个完整的单像空间后方交会程序,通过对提供的数据进行计算,输出像片的外方位元素并评定精度。
三、实习数据已知航摄仪的内方位元素:fk =153.24mm,x=y=0,摄影比例尺为1:15000;4个地面控制点的地面坐标及其对应像点的像片坐标:四、实习原理如果我们知道每幅影像的6个外方位元素,就能确定被摄物体与航摄影像的关系。
因此,如何获取影像的外方位元素,一直是摄影测量工作者所探讨的问题。
可采取的方法有:利用雷达、全球定位系统(GPS)、惯性导航系统(INS)以及星相摄影机来获取影像的外方位元素;也可以利用影像覆盖范围内一定数量的控制点的空间坐标与摄影坐标,根据共线条件方程,反求该影像的外方位元素,这种方法称为单幅影像的空间后方交会。
单像空间后方交会的基本思想是:以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,ϕ,ω,κ。
五、 实习流程1. 获取已知数据。
从摄影资料中查取影像比例尺1/m ,平均摄影距离(航空摄影的航高、内方位元素x 0,y 0,f ;获取控制点的空间坐标X t ,Y t ,Z t 。
2. 量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
后方交会MATLAB程序实习报告
Ys=Ys0
Zs=Zs0
fai=fai0
omig=omig0
ka=ka0
If abs(XX(4))<0.0000291&&abs(XX(5))<0.0000291&&abs(XX(6))<0.0000291
break
end
End
R=[a1,a2,a3;b1,b2,b3;c1,c2,c3];
a2=-cos(fai0)*sin(ka0)-sin(fai0)*sin(omig0)*cos(ka0);
a3=-sin(fai0)*cos(omig0);
b1=cos(omig0)*sin(ka0);
b2=cos(omig0)*cos(ka0);
b3=-sin(omig0);
c1=sin(fai0)*cos(ka0)+cos(fai0)*sin(omig0)*sin(ka0);
a16=y(h);
a21=(a2*f+a3*y(h))/Q;
a22=(b2*f+b3*y(h))/Q;
a23=(c2*f+c3*y(h))/Q;
a24=-x(h)*sin(omig0)-(y(h)/f*(x(h)*cos(ka0)-y(h)*sin(ka0))-f*sin(ka0))*cos(omig0);
④计算旋转矩阵R。利用角元素近似值计算方向余弦值,组成R阵。
⑤逐点计算像点坐标的近似值。利用未知数的近似值按共线条件式计算控制点像点坐标的近似值(x),(y)。
⑥逐点计算误差方程式的系数和常数项,组成误差方程式。
⑦计算法方程的系数矩阵ATA与常数项ATL,组成法方程式。
⑧解求外方位元素。根据法方程,解求外方位元素改正数,并与相应的近似值求和,得到外方位元素新的近似值。
后方交会MATLAB程序实习报告
《摄 影 测 量 学》单像空间后方交会实习报告班 级: XXXX姓 名: X X X学 号:XXXXXXXXXXXXX指导教师: X X X一、实习目的1、掌握空间后方交会的定义和实现算法;2、了解摄影测量平差的基本过程;3、熟练MATLAB 等程序编写。
二、实习原理利用至少三个已知地面控制点的坐标),,(A A A Z Y X A 、),,(B B B Z Y X B 、),,(C C C Z Y X C ,与其影像上对应的三个像点的影像坐标),(a a y x a 、),(b b y x b 、),(c c y x c ,根据共线方程,反求该像片的外方位元素κωϕ、、、、、S S S Z Y X 。
共线条件方程式:将共线式线性化并取一次小值项得:三、解算过程①获取已知数据。
包括影像比例尺1/m,平均摄影距离(航空摄影的航高)H,内方位元素x0、y0、f,控制点的空间坐标X、Y、Z。
②量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
③确定未知数的初始值。
单像空间后方交会必须给出待定参数的初始值,在竖直航空摄影且地面控制点大体对称分布的情况下,Xs0和Ys0为均值,Zs0为航高,φ、ω、κ的初值都设为0。
或者κ的初值可在航迹图上找出或根据控制点坐标通过坐标正反变换求出。
④计算旋转矩阵R。
利用角元素近似值计算方向余弦值,组成R阵。
⑤逐点计算像点坐标的近似值。
利用未知数的近似值按共线条件式计算控制点像点坐标的近似值(x),(y)。
⑥逐点计算误差方程式的系数和常数项,组成误差方程式。
⑦计算法方程的系数矩阵ATA与常数项ATL,组成法方程式。
⑧解求外方位元素。
根据法方程,解求外方位元素改正数,并与相应的近似值求和,得到外方位元素新的近似值。
⑨检查计算是否收敛。
将所求得的外方位元素的改正数与规定的限差比较,通常对φ,ω,κ的改正数△φ,△ω,△κ给予限差,通常为0.000001弧度,当3个改正数均小于0.000001弧度时,迭代结束。
摄影测量学后方交会matlab实习报告
摄影测量原理单张影像后方交会实习目录一实习目的 (3)二实习原理 (3)1. 间接平差 (3)2. 共线方程 (3)3. 单向空间后方交会 (4)三计算流程 (4)1. 求解步骤 (4)2.计算机框图 (4)四程序实现 (5)五结果分析 (6)1.外方位元素 (6)2.误差 (6)3.旋转矩阵R (7)六实习体会 (7)1. 平台的选择 (7)2.问题的解决 (7)3.心得体会 (8)七代码展示 (8)一实习目的为了增强同学们对后方交会公式的理解,培养同学们对迭代循环编程的熟悉感,本次摄影测量课间实习内容定为用C语言或其他程序编写单片空间后方交会程序,最终输出像点坐标、地面坐标、单位权中误差、外方位元素及其精度。
已知四对点的影像坐标和地面坐标如下。
内方位元素fk=153.24mm,x0=y0=0。
本次实习,我使用了matlab2014进行后方交会程序实现。
结果与参考答案一致,精度良好。
二实习原理题干中有四个控制点在地面摄影测量坐标系中的坐标和对应的像点坐标,由此可列出8个误差方程,存在2个多余观测(n=2)。
故可利用间接平差的最小二乘法则求解。
由于共线方程是非线性函数模型,为了方便计算,需要将其“线性化”。
但如果仅取泰勒级数展开式的一次项,未知数的近似值改正是不精确的。
因此必须采用迭代趋近法计算,直到外方位元素的改正值小于限差。
1.间接平差间接平差为平差计算最常用的方法。
在确定多个未知量的最或然值时,选择它们之间不存在任何条件关系的独立量作为未知量组成用未知量表达测量的函数关系、列出误差方程式,按最小二乘法原理求得未知量的最或然值的平差方法。
在一个间接平差问题中,当所选的独立参数X个数与必要观测值t个数相等时,可将每个观测值表达成这t个参数的函数,组成观测方程。
函数模型为:L = BX + d。
2.共线方程共线方程是中心投影构像的数学基础,也是各种摄影测量处理方法的重要理论基础。
式中:x,y 为像点的像平面坐标;x0,y0,f 为影像的内方位元素;XS,YS,ZS 为摄站点的物方空间坐标;XA,YA,ZA 为物方点的物方空间坐标;ai,bi,ci (i = 1,2,3)为影像的3 个外方位角元素组成的9 个方向余弦。
摄影测量学空间后方交会实验报告
摄影测量学实验报告实验一、单像空间后方交会学院:建测学院班级:测绘082姓名:肖澎学号: 15一.实验目的1.深入了解单像空间后方交会的计算过程;2.加强空间后方交会基本公式和误差方程式,法线方程式的记忆;3.通过上机调试程序加强动手能力的培养。
二.实验原理以单幅影像为基础,从该影像所覆盖地面范围内若干控制点和相应点的像坐标量测值出发,根据共线条件方程,求解该影像在航空摄影时刻的相片外方位元素。
三.实验内容1.程序图框图2.实验数据(1)已知航摄仪内方位元素f=153.24mm,Xo=Yo=0。
限差0.1秒(2)已知4对点的影像坐标和地面坐标:3.实验程序using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication3{class Program{static void Main(){//输入比例尺,主距,参与平参点的个数Console.WriteLine("请输入比例尺分母m:\r");string m1 = Console.ReadLine();double m = (double)Convert.ToSingle(m1);Console.WriteLine("请输入主距f:\r");string f1 = Console.ReadLine();double f = (double)Convert.ToSingle(f1);Console.WriteLine("请输入参与平差控制点的个数n:\r");string n1 = Console.ReadLine();int n = (int)Convert.ToSingle(n1);//像点坐标的输入代码double[] arr1 = new double[2 * n];//1.像点x坐标的输入for (int i = 0; i < n; i++){Console.WriteLine("请输入已进行系统误差改正的像点坐标的x{0}值:\r", i+1);string u = Console.ReadLine();for (int j = 0; j < n; j += 2){arr1[j] = (double)Convert.ToSingle(u);}}//2.像点y坐标的输入for (int i = 0; i < n; i++){Console.WriteLine("请输入已进行系统误差改正的像点坐标的y{0}值:\r", i+1);string v = Console.ReadLine();for (int j = 1; j < n; j += 2){arr1[j] = (double)Convert.ToSingle(v);}}//控制点的坐标输入代码double[,] arr2 = new double[n, 3];//1.控制点X坐标的输入for (int j = 0; j < n; j++){Console.WriteLine("请输入控制点在地面摄影测量坐标系的坐标的X{0}值:\r", j+1);string u = Console.ReadLine();arr2[j , 0] = (double)Convert.ToSingle(u);}//2.控制点Y坐标的输入for (int k = 0; k < n; k++){Console.WriteLine("请输入控制点在地面摄影测量坐标系的坐标的Y{0}值:\r", k+1);string v = Console.ReadLine();arr2[k , 1] = (double)Convert.ToSingle(v);}//3.控制点Z坐标的输入for (int p =0; p < n; p++){Console.WriteLine("请输入控制点在地面摄影测量坐标系的坐标的Z{0}值:\r", p+1);string w = Console.ReadLine();arr2[p , 2] = (double)Convert.ToSingle(w);}//确定外方位元素的初始值//1.确定Xs的初始值:double Xs0 = 0;double sumx = 0;for (int j = 0; j < n; j++){double h = arr2[j, 0];sumx += h;}Xs0 = sumx / n;//2.确定Ys的初始值:double Ys0 = 0;double sumy = 0;for (int j = 0; j < n; j++){double h = arr2[j, 1];sumy += h;}Ys0 = sumy / n;//3.确定Zs的初始值:double Zs0 = 0;double sumz = 0;for (int j = 0; j <= n - 1; j++){double h = arr2[j, 2];sumz += h;}Zs0 = sumz / n;doubleΦ0 = 0;doubleΨ0 = 0;double K0 = 0;Console.WriteLine("Xs0,Ys0,Zs0,Φ0,Ψ0,K0的值分别是:{0},{1},{2},{3},{4},{5}", Xs0, Ys0, Zs0, 0, 0, 0);//用三个角元素的初始值按(3-4-5)计算各方向余弦值,组成旋转矩阵,此时的旋转矩阵为单位矩阵I:double[,] arr3 = new double[3, 3];for (int i = 0; i < 3; i++)arr3[i, i] = 1;}double a1 = arr3[0, 0]; double a2 = arr3[0, 1]; double a3 = arr3[0, 2];double b1 = arr3[1, 0]; double b2 = arr3[1, 1]; double b3 = arr3[1, 2];double c1 = arr3[2, 0]; double c2 = arr3[2, 1]; double c3 = arr3[2, 2];/*利用线元素的初始值和控制点的地面坐标,代入共线方程(3-5-2),* 逐点计算像点坐标的近似值*///1.定义存放像点近似值的数组double[] arr4 = new double[2 * n];//----------近似值矩阵//2.逐点像点坐标计算近似值//a.计算像点的x坐标近似值(x)for (int i = 0; i < 2 * n; i += 2){for (int j = 0; j < n; j++){arr4[i] = -f * (a1 * (arr2[j, 0] - Xs0) + b1 * (arr2[j, 1] - Ys0) + c1 * (arr2[j, 2] - Zs0)) / (a3 * (arr2[j, 0] - Xs0) + b3 * (arr2[j, 1] - Ys0) + c3 * (arr2[j, 2] - Zs0)); }}//b.计算像点的y坐标近似值(y)for (int i = 1; i < 2 * n; i += 2){for (int j = 0; j < n; j++){arr4[i] = -f * (a2 * (arr2[j, 0] - Xs0) + b2 * (arr2[j, 1] - Ys0) + c2 * (arr2[j, 2] - Zs0)) / (a3 * (arr2[j, 0] - Xs0) + b3 * (arr2[j, 1] - Ys0) + c3 * (arr2[j, 2] - Zs0)); }}//逐点计算误差方程式的系数和常数项,组成误差方程:double[,] arr5 = new double[2 * n, 6]; //------------系数矩阵(A)//1.计算dXs的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 0] = -1 / m; //-f/H == -1/m}//2.计算dYs的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 1] = -1 / m; //-f/H == -1/m}//3.a.计算误差方程式Vx中dZs的系数for (int i = 0; i < 2 * n; i += 2)arr5[i, 2] = -arr1[i] / m * f;}//3.b.计算误差方程式Vy中dZs的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 2] = -arr1[i] / m * f;}//4.a.计算误差方程式Vx中dΦ的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 3] = -f * (1 + arr1[i] * arr1[i] / f * f);}//4.a.计算误差方程式Vy中dΦ的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 3] = -arr1[i - 1] * arr1[i] / f;}//5.a.计算误差方程式Vx中dΨ的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 4] = -arr1[i] * arr1[i + 1] / f;}//5.b.计算误差方程式Vy中dΨ的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 4] = -f * (1 + arr1[i] * arr1[i] / f * f);}//6.a.计算误差方程式Vx中dk的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 5] = arr1[i + 1];}//6.b.计算误差方程式Vy中dk的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 5] = -arr1[i - 1];}//定义外方位元素组成的数组double[] arr6 = new double[6];//--------------------外方位元素改正数矩阵(X)//定义常数项元素组成的数组double[] arr7 = new double[2 * n];//-----------------常数矩阵(L)//计算lx的值for (int i = 0; i < 2 * n; i += 2)arr7[i] = arr1[i] - arr4[i]; //将近似值矩阵的元素代入}//计算ly的值for (int i = 1; i <= 2 * (n - 1); i += 2){arr7[i] = arr1[i] - arr4[i]; //将近似值矩阵的元素代入}/* 对于所有像点的坐标观测值,一般认为是等精度量测,所以权阵P为单位阵.所以X=(ATA)-1ATL *///1.计算ATdouble[,] arr5T = new double[6, 2 * n];for (int i = 0; i < 6; i++){for (int j = 0; j < 2 * n; j++){arr5T[i, j] = arr5[j, i];}}//A的转置与A的乘积,存放在arr5AA中double[,] arr5AA = new double[6, 6];for (int i = 0; i < 6; i++){for (int j = 0; j < 6; j++){arr5AA[i, j] = 0;for (int l = 0; l < 2 * n; l++){arr5AA[i, j] += arr5T[i, l] * arr5[l, j];}}}nijuzhen(arr5AA);//arr5AA经过求逆后变成原矩阵的逆矩阵//arr5AA * arr5T存在arr5AARATdouble[,] arr5AARAT = new double[6, 2 * n];for (int i = 0; i < 6; i++){for (int j = 0; j < 2 * n; j++){arr5AARAT[i, j] = 0;for (int p = 0; p < 6; p++){arr5AARAT[i, j] += arr5AA[i, p] * arr5T[p, j];}}}//计算arr5AARAT x L,存在arrX中double[] arrX = new double[6];for (int i = 0; i < 6; i++){for (int j = 0; j < 1; j++){arrX[i] = 0;for (int vv = 0; vv < 6; vv++){arrX[i] += arr5AARAT[i, vv] * arr7[vv];}}}//计算外方位元素值double Xs, Ys, Zs, Φ, Ψ, K;Xs = Xs0 + arrX[0];Ys = Ys0 + arrX[1];Zs = Zs0 + arrX[2];Φ = Φ0 + arrX[3];Ψ = Ψ0 + arrX[4];K = K0 + arrX[5];for (int i = 0; i <= 2; i++){Xs += arrX[0];Ys += arrX[1];Zs += arrX[2];Φ += arrX[3];Ψ += arrX[4];K += arrX[5];}Console.WriteLine("Xs,Ys,Zs,Φ,Ψ,K的值分别是:{0},{1},{2},{3},{4},{5}", Xs0, Ys0, Zs0, Φ, Ψ, K);Console.Read();}//求arr5AA的逆矩public static double[,] nijuzhen(double[,] a) {double[,] B = new double[6, 6];int i, j, k;int row = 0;int col = 0;double max, temp;int[] p = new int[6];for (i = 0; i < 6; i++){p[i] = i;B[i, i] = 1;}for (k = 0; k < 6; k++){//找主元max = 0; row = col = i;for (i = k; i < 6; i++){for (j = k; j < 6; j++){temp = Math.Abs(a[i, j]);if (max < temp){max = temp;row = i;col = j;}}}//交换行列,将主元调整到k行k列上if (row != k){for (j = 0; j < 6; j++){temp = a[row, j];a[row, j] = a[k, j];a[k, j] = temp;temp = B[row, j];B[row, j] = B[k, j];B[k, j] = temp;i = p[row]; p[row] = p[k]; p[k] = i; }if (col != k){for (i = 0; i < 6; i++){temp = a[i, col];a[i, col] = a[i, k];a[i, k] = temp;}}//处理for (j = k + 1; j < 6; j++){a[k, j] /= a[k, k];}for (j = 0; j < 6; j++){B[k, j] /= a[k, k];a[k, k] = 1;}for (j = k + 1; j < 6; j++){for (i = 0; j < k; i++){a[i, j] -= a[i, k] * a[k, j];}for (i = k + 1; i < 6; i++){a[i, j] -= a[i, k] * a[k, j];}}for (j = 0; j < 6; j++){for (i = 0; i < k; i++){B[i, j] -= a[i, k] * B[k, j];}for (i = k + 1; i < 6; i++){B[i, j] -= a[i, k] * B[k, j];}for (i = 0; i < 6; i++) {a[i, k] = 0;a[k, k] = 1;}}//恢复行列次序for (j = 0; j < 6; j++){for (i = 0; i < 6; i++) {a[p[i], j] = B[i, j]; }}for (i = 0; i < 6; i++){for (j = 0; j < 6; j++) {a[i, j] = a[i, j];}}return a;}4.实验结果四.实验总结此次实验让我深入了解单像空间后方交会的计算过程,加强了对空间后方交会基本公式和误差方程式,法线方程式的记忆。
摄影测量学单像空间后方交会编程实习报告
摄影测量学单像空间后方交会编程实习报告实习背景在本次实习中,我们学习了摄影测量学单像空间后方交会的编程实现。
这是一种通过计算影像中各点的坐标来确定被摄物的三维坐标的方法,应用广泛于测绘、地理信息、建筑等领域。
本次实习采用 MATLAB 软件进行编程,目的是将理论知识应用到实际操作中,让我们更深入理解摄影测量学单像空间后方交会的原理和应用。
实习内容理论部分首先,我们在工作室进行了理论部分的学习。
老师讲解了单像空间后方交会的原理,以及如何通过影像坐标、相机外方位元素、像点坐标和像平面坐标等参数来计算被摄物的三维坐标。
在理论部分的学习过程中,我们通过公式的推导和实例分析,更加深入地理解了单像空间后方交会的原理。
实践部分实践部分是本次实习的重头戏。
我们利用 MATLAB 软件进行了单像空间后方交会的编程实现,具体步骤如下:1.输入相机外方位元素通过读取文本文件,将相机外方位元素(相机在拍摄时的姿态、位置等参数)输入到 MATLAB 中。
2.输入影像坐标通过读取文本文件,将影像中的像点坐标输入到 MATLAB 中。
3.计算像平面坐标利用相机内定标参数,将像点坐标转化为像平面坐标。
4.计算被摄物三维坐标根据单像空间后方交会的原理,利用相机外方位元素、像平面坐标和像点坐标等参数,计算被摄物的三维坐标。
5.输出结果将计算结果输出到文本文件中,以便后续的数据处理和分析。
在实际操作中,我们首先编写了 MATLAB 脚本文件,根据上述步骤逐步实现了单像空间后方交会的计算过程。
然后,我们利用自己拍摄的实际照片进行实验,将相机外方位元素和像点坐标输入到程序中,最终得到了被摄物的三维坐标结果。
实习收获通过本次实习,我从理论到实践,更深入地理解了摄影测量学单像空间后方交会的原理和应用,同时也掌握了 MATLAB 的编程技能。
在实践中,我遇到了许多问题,包括数据的输入输出、代码的调试和结果的分析等等。
通过和同学的讨论和老师的指导,我不仅解决了这些问题,还对摄影测量学的应用有了更深入的认识。
matlab实习总结.(大全5篇)
matlab实习总结.(大全5篇)第一篇:matlab实习总结.MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连 matlab开发工作界面接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用Matlab是一个强大的数学工具,它的应用广泛,涉及到各个领域.它使用起来十分方便,不用麻烦去定义变量.它的绘图能力很强,甚至可以模拟出三维视图.矩阵是它应用的核心,许多工程繁琐的运算都需要靠矩阵来化简,这正是它的生命力所在.但是,他的函数很多,开始学时记的比较痛苦,我已经深深感觉到了.不过看多了也就熟了,感觉和学五笔差不多.它的语法简单,像我学过C语言的学起来还是蛮容易的.它的数组定义十分符合自然,是从1开始的,数组元素的调用也很接近数学的表达.此外,函数的名字也很符合英文规则,反正我用得很开心就是了.通过学习matlab,我又一次锻炼了自己的思维.它学起来得心应手也让我明白了学习一门语言(c语言对学习其他语言的帮助指导作用.同时,它也加强了我理论联系实际的能力.这是一个专业课的基础工具,学好它是必要的.在第一章中,讲的是一些matlab的入门技术,除了一些基本操作与介绍之外,还初步认识了简单指令的编制,认识了一些matlab 的特殊符号,例如运算用到的加减乘除。
摄影测量学空间后方交会实验报告13页
摄影测量学空间后方交会实验报告13页报告摘要:本实验以三张已知高度物体的相片为样本,运用摄影测量学的空间后方交会算法,通过MATLAB编程实现对物体三维坐标的计算,并加以检验与探讨,得出结论相对合理。
同时,本实验也通过对MATLAB编程的应用,掌握了空间后方交会算法的理论及实践方法。
1. 实验目的(1)学习和应用摄影测量学中的空间后方交会算法,掌握其计算方法和程序实现过程。
(2)了解数字像相机的相关特性,并掌握其使用方法。
(3)通过对样本数据的处理,熟悉和掌握MATLAB编程的应用技巧。
2. 实验器材数字相机一部,尺子一把,样本图像三张,MATLAB软件。
3. 实验原理在精密测量领域中,采用摄影测量学的空间后方交会算法,可实现三维坐标的测量和重建。
这种方法是将已知物体的照片,通过对像点的提取及校准,得出像点坐标系下的物体的三维坐标系下的坐标。
这种算法的基本思路是:利用像点坐标系下的物体三维坐标系下的坐标关系,构建一个误差最小的方程组,通过矩阵的求解,得到物体三维坐标系下的坐标。
数字相机是一种基于CCD或CMOS成像器材料的成像设备,根据数字信号的处理能力,合成电子图像。
数字相机的性能主要包括分辨率、感光度、曝光控制、焦距、光圈等参数。
使用数字相机拍摄时,应根据拍摄对象的光线条件、距离、尺寸、景深等因素,进行调节。
4. 实验过程(1)利用数字相机拍摄三张已知高度物体的照片,并在样本上面贴标记,用尺子测算实际高度。
(2)利用图像处理软件MATLAB,对照片进行像点识别和校准,得到像点坐标系下的坐标。
(3)根据相片中已知物体的测高值及像点坐标系下的坐标值,通过MATLAB编写空间后方交会的程序算法,得出物体的三维坐标系下的坐标。
(4)对得出的坐标值进行检验及探讨,分析误差来源及部分工具库的使用方法。
5. 实验结果与分析本实验所得出的三维坐标值,原本应是在一个确定点之间展开的点集。
知道参数计算不全或精度不够是常有的事情(尤其在没有精密测量器具的条件下),这种情况我们应该考虑从给出的角度和图像来看和计算得到位置。
摄影测量学单像空间后方交会编程实习报告材料
摄影测量学单像空间后方交会编程实习报告班级: 130x姓名: xx学号: 2013302590xxx指导老师:李欣一、实习目的通过对提供的数据进行计算,输出像片的外方位元素并评定精度。
深入理解单像空间后方交会的思想,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。
通过尝试编程实现加强编程处理问题的能力和对实习内容的理解,通过对实验结果的分析,增强综合运用所学知识解决实际问题的能力。
了解摄影测量平差的基本过程,掌握空间后方交会的定义和实现算法。
二、实习内容根据学习的单像空间后方交会的知识,用程序设计语言(C++或C语言)编写一个完整的单像空间后方交会程序,通过对提供的数据进行计算,输出像片的外方位元素并评定精度。
三、实习数据已知航摄仪的内方位元素:fk =153.24mm,x=y=0,摄影比例尺为1:15000;4个地面控制点的地面坐标及其对应像点的像片坐标:四、实习原理如果我们知道每幅影像的6个外方位元素,就能确定被摄物体与航摄影像的关系。
因此,如何获取影像的外方位元素,一直是摄影测量工作者所探讨的问题。
可采取的方法有:利用雷达、全球定位系统(GPS)、惯性导航系统(INS)以及星相摄影机来获取影像的外方位元素;也可以利用影像覆盖范围内一定数量的控制点的空间坐标与摄影坐标,根据共线条件方程,反求该影像的外方位元素,这种方法称为单幅影像的空间后方交会。
单像空间后方交会的基本思想是:以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,ϕ,ω,κ。
五、实习流程1.获取已知数据。
从摄影资料中查取影像比例尺1/m,平均摄影距离(航空摄影的航高、内方位元素x0,y,;获取控制点的空间坐标Xt,Yt,Zt。
2.量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
摄影测量实验报告(空间后方交会—前方交会)
空间后方交会—空间前方交会程序编程实验一.实验目的要求掌握运用空间后方交会-空间前方交会求解地面点的空间位置.学会运用空间后方交会的原理,根据所给控制点的地面摄影测量坐标系坐标以及相应的像平面坐标系中的坐标,利用计算机编程语言实现空间后方交会的过程,完成所给像对中两张像片各自的外方位元素的求解。
然后根据空间后方交会所得的两张像片的内外方位元素,利用同名像点在左右像片上的坐标,求解其对应的地面点在摄影测量坐标系中的坐标,并完成精度评定过程,利用计算机编程语言实现此过程.二.仪器用具计算机、编程软件(MATLAB)三.实验数据实验数据包含四个地面控制点(GCP)的地面摄影测量坐标及在左右像片中的像平面坐标。
此四对坐标运用最小二乘法求解左右像片的外方位元素,即完成了空间后方的过程.另外还给出了5对地面点在左右像片中的像平面坐标和左右像片的内方位元素。
实验数据如下:内方位元素:f=152。
000mm,x0=0,y0=0 四.实验框图此过程完成空间后方交会求解像片的外方位元素,其中改正数小于限差(0。
00003,相当于0。
1'的角度值)为止。
在这个过程中采用迭代的方法,是外方位元素逐渐收敛于理论值,每次迭代所得的改正数都应加到上一次的初始值之中。
在空间后方交会中运用的数学模型为共线方程确定Xs,Ys,Zs的初始值时,对于左片可取地面左边两个GCP的坐标的平均值作为左片Xs 和Ys的初始值,取右边两个GCP的坐标平均值作为右片Xs 和Ys的初始值。
Zs可取地面所有GCP的Z坐标的平均值再加上航高.空间前方交会的数学模型为:五.实验源代码function Main_KJQHFJH()global R g1 g2 m G a c b1 b2;m=10000;a=5;c=4;feval(@shuru);%调用shuru()shurujcp()函数完成像点及feval(@shurujcp);%CCP有关数据的输入XYZ=feval(@MQZqianfangjh); %调用MQZqianfangjh()函数完成空间前方、%%%%%% 单位权中误差%%%%%后方交会计算解得外方位元素global V1 V2;%由于以上三个函数定义在外部文件中故需VV=[]; %用feval()完成调用过程for i=1:2*cVV(i)=V1(i);VV(2*i+1)=V2(i);endm0=sqrt(VV*(VV’)/(2*c-6));disp('单位权中误差m0为正负:’);disp(m0); %计算单位权中误差并将其输出显示输入GCP像点坐标及地面摄影测量坐标系坐标的函数和输入所求点像点坐标函数:function shurujcp()global c m;m=input(’摄影比例尺:');%输入GCP像点坐标数据函数并分别将其c=input('GCP的总数=');%存入到不同的矩阵之中disp('GCP左片像框标坐标:');global g1;g1=zeros(c,2);i=1;while i<=cm=input('x=');n=input('y=');g1(i,1)=m;g1(i,2)=n;i=i+1;enddisp('GCP右片像框标坐标:’);global g2;g2=zeros(c,2);i=1;while i〈=cm=input('x=’);n=input('y=’);g2(i,1)=m;g2(i,2)=n;i=i+1;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function shuru()global a;a=input('计算总像对点数='); %完成想计算所需的像平面坐标global b1;%坐标输入,存入不同的矩阵中b1=zeros(a,2);disp('左片像点坐标:')i=1;while i〈=am=input('x=’);n=input(’y=’);b1(i,1)=m;b1(i,2)=n;i=i+1;end%%global b2;b2=zeros(a,2);disp(’右片像点坐标:')i=1;while i〈=am=input('x=’);n=input('y=’);b2(i,1)=m;b2(i,2)=n;i=i+1;end%%global c;c=input(’GCP的总数=');disp('GCP摄影测量系坐标:’)global G;G=zeros(3,c);i=1;while i〈=cm=input(’X=');n=input(’Y=');v=input(’Z=');G(i,1)=m;G(i,2)=n;G(i,3)=v;i=i+1;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%空间前方交会和后方交会函数:function XYZ=MQZqianfangjh()global R1 R2 a f b1 b2 Ra Rb;global X1 X2;R1=Ra;R2=Rb;R1=zeros(3,3);R2=zeros(3,3);global g1 g2 G V1 V2 V WF c QXX QXX1 QXX2;xs0=(G(1,1)+G(3,1))/2;ys0=(G(1,2)+G(3,2))/2;[Xs1,Ys1,Zs1,q1,w1,k1 R]=houfangjh(g1,xs0,ys0);%对左片调用后方交会函数R1=R;V1=V;WF1=WF;QXX1=QXX;save '左片外方位元素为。
摄影测量学单像空间后方交会编程实习报告
摄影测量学单像空间后方交会编程实习报告本次实习中,我使用编程语言进行了单像空间后方交会的实现,并取得了一定的成果。
首先,我了解了单像空间后方交会的基本原理。
根据光线在透镜上的成像规律,可以推导出物体点在像平面上的坐标与图像点在像平面上的坐标之间的关系式。
通过已知的摄像机内外方位元素和图像点坐标,可以反求得物体点的坐标。
在程序编写过程中,我采用了Python编程语言。
首先,我定义了一个类,用于存储摄像机的内外方位元素和图像点坐标。
然后,我编写了一个函数,用于计算物体点的坐标。
该函数根据已知的内外方位元素和图像点坐标,使用逆向投影的方式反求物体点的坐标。
最后,我编写了一个主函数,通过读取输入文件中的数据,调用计算函数,并将结果保存到输出文件中。
在实现的过程中,我遇到了一些问题。
首先,由于摄像机的内外方位元素需要提前获取,因此我通过测量方法获得了实际的内外方位元素。
然而,测量的过程中存在一定的误差,因此在计算物体点坐标时可能存在一定的误差。
其次,图像坐标与物体点坐标之间的关系式中存在一些参数,如焦距、主点坐标等,这些参数也需要提前获取。
在程序中,我将这些参数作为输入参数,通过外部文件进行输入。
在实习的过程中,我充分运用了自己所学的摄影测量学知识,并将其与编程技能相结合。
在实现过程中,我遇到了一些难题,但通过查阅资料和与老师的讨论,最终得以解决。
通过编程实习,我深入理解了单像空间后方交会的原理,并通过实际操作提高了自己的计算能力。
总的来说,本次实习使我对摄影测量学有了更深入的认识,也提升了我的计算和编程能力。
通过此次实习,我对摄影测量学的兴趣更加浓厚,也更加期待在今后的学习和研究中能够进一步深入探索。
摄影测量实习报告
摄影测量实习报告第一篇:摄影测量实习报告篇一:摄影测量实习报告一、实习任务利用自己所熟悉的一种编程语言,实现单像空间后方交会,解求此张像片的6个外方位元素,,ω,κ,范文之实习报告:摄影测量实习报告。
二、实习目的1、深刻理解单张像片空间后方交会的原理与意义;2、在存在多余观测值时,利用最小二乘平差方法,经过迭代,求的外方位元素的最佳值;3、熟悉vc编程方法,利用编程实现计算。
三、实习原理以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,求解该影象在航空摄影时刻的像片外方位元素,,ω,κ共线条件方程如下:x-x0=-f*[a1(x-xs)+b1(y-ys)+c1(z-zs)]/[a3(x-xs)+b3(y-ys)+c3(z-zs)] y-y0=-f*[a2(x-xs)+b2(y-ys)+c2(z-zs)]/[a3(x-xs)+b3(y-ys)+c3(z-zs)]其中:x,y为像点的像平面坐标;x0,y0,f为影像的外方位元素;,为摄站点的物方空间坐标;x,y,z为物方点的物方空间坐标;旋转矩阵r为;由于此共线条件方程是非线性方程,先对其进行线性化,利用泰勒展开得:=(x)-x++++++++ =(y)-y++++++++像点观测值一般视为等权,即p=i;矩阵形式:v=ax-l,p=i;通过间接平差,为提高精度,增加多余观测方程,根据最小二乘平差原理,可计算出外方位元素的改正数。
经过迭代计算,每次迭代用未知数的近似值与上次迭代计算的改正数之和作为新的近似值,重复计算,求出新的改正数,这样反复趋近,直到改正数小于某个限值为止。
四、程序框图输入原始数据归算像点坐标x,y计算并确定初值,,组成旋转矩阵r计算(x)(y)和逐点组成误差方程式并法化所有点完否?解法方程,求未知数改正数计算改正后的外方位元素未知数改正数<限差否?整理并输出计算结果正常结束非正常结束输出中间结果和出错信息迭代次数是否小于限差否?否否否是五、计算结果1、像点坐标,地面坐标点数像点编号 x y x y z 2像片内方位元素:f = 153.840 x0=y0=0摄影比例尺:1:2500运算结果:六、数据分析选取第六张像片进行计算,迭代次数为2次。
摄影测量学单像空间后方交会编程实习报告
摄影测量学单像空间后方交会编程实习报告班级: 130x姓名: xx学号: 90xxx指导老师:李欣一、实习目的通过对提供的数据进行计算,输出像片的外方位元素并评定精度。
深入理解单像空间后方交会的思想,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。
通过尝试编程实现加强编程处理问题的能力和对实习内容的理解,通过对实验结果的分析,增强综合运用所学知识解决实际问题的能力。
了解摄影测量平差的基本过程,掌握空间后方交会的定义和实现算法。
二、实习内容根据学习的单像空间后方交会的知识,用程序设计语言(C++或C语言)编写一个完整的单像空间后方交会程序,通过对提供的数据进行计算,输出像片的外方位元素并评定精度。
三、实习数据已知航摄仪的内方位元素:fk =,x=y=0,摄影比例尺为1:15000;4个地面控制点的地面坐标及其对应像点的像片坐标:四、实习原理如果我们知道每幅影像的6个外方位元素,就能确定被摄物体与航摄影像的关系。
因此,如何获取影像的外方位元素,一直是摄影测量工作者所探讨的问题。
可采取的方法有:利用雷达、全球定位系统(GPS)、惯性导航系统(INS)以及星相摄影机来获取影像的外方位元素;也可以利用影像覆盖范围内一定数量的控制点的空间坐标与摄影坐标,根据共线条件方程,反求该影像的外方位元素,这种方法称为单幅影像的空间后方交会。
?单像空间后方交会的基本思想是:以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,?,ω,κ。
五、实习流程1.获取已知数据。
从摄影资料中查取影像比例尺1/m,平均摄影距离(航空摄影的航高、内方位元素x0,y,;获取控制点的空间坐标Xt,Yt,Zt。
?2.量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
3.确定未知数的初始值。
摄影测量实习报告
摄影测量实习报告——单张影像空间后方交会程序设计一、 实习目的深入理解单张影像空间后方交会呃原理,体会再有多余观测情况下,用最小二乘平差方法编程实现解求影像外方为元素的过程。
利用Visual C++或者Matlab (或其他熟悉的计算机语言)边学一个完整的单张影像空间后方交会程序,通过对提供的试验数据进行计算,输出相片的外方为元素并进行评定精度。
通过编写程序实现单张影像空间后方交会计算,掌握非线性方程线性化的过程、相应数据读入与存储的方法以及迭代计算的特点,巩固各类基础课程及计算机课程的学习内容,培养上机调试程序的主动能力,通过对实验结果的分析,增强综合运用所学知识解决专业实际问题的能力。
二、 实习环境1、 硬件环境:Windows 操作系统;2、 软件环境:VC++活Matlab 或其他计算机语言。
三、 实习内容利用一定数量的地面控制点,根据共线条件方程求解相片外方为元素并进行精度评定。
四、 实习原理 1.共线方程)()()()()()()()()()()()(333222333111s s s s s s s s s s s s Z Z c Y Y b X X a Z Z c Y Y b X X a fy Z Z c Y Y b X X a Z Z c Y Y b X X a f x -+-+--+-+--=-+-+--+-+--=2.精度评定iii Q m m ∙=0 其中[]620-±=n VV m五、实习数据2. 模拟像片一对:左片号23 右片号24 2.像片比例尺: 1/30000 3.航摄机主距:f=150mm 4.每张像片有4个控制点 5.点位略图6.各片像点坐标及其地面坐标七、验证数据1.已知航摄仪内方位元素f =153.24mm ,Xo =Yo =0。
2.已知4对点的影像坐标和地面坐标影像坐标 地面坐标 x (mm ) y (mm ) X(m) Y (m ) Z(m) 1 -86.15 -68.99 36589.41 25273.32 2195.17 2 -53.40 82.21 37631.08 31324.51 728.69 3 -14.78 -76.63 39100.97 24934.98 2386.50 410.4664.4340426.5430319.81757.31八、程序设计如下using System;using System.Collections.Generic; using ponentModel;3. Δ6 Δ12 4.5. ⊙5 ⊙8 6.7. Δ4 Δ108. Δ3 Δ9 9. 10.⊙5⊙8 11. 12.Δ1Δ7片 号 点 号 像点坐标(mm ) 地面坐标(m ) x y X Y Z 231 -91.596 -74.859 100000.00 137500.00 11.00 3 -94.230 81.446 100000.00 142500.00 36.00 7 95.207 -75.521 106000.00 137500.00 42.00 9 96.797 83.077 106000.00 142500.00 56.00 244 -102.695 -79.618 103000.00 137500.00 90.006 -99.904 81.754 103000.00 142500.00 31.00 10 86.890 -77.540 109000.00 137500.00 7.00 1288.90476.257109000.00142500.005.00using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Data.OleDb;namespace 单像空间后方交会{public partial class 后方交会: Form{public 后方交会(){InitializeComponent();}//定义已知数据,x[]、y[]存储像点坐标,X[]、Y[]、Z[]存储地面点坐标double []x = new double[4], y = new double[4],X = new double[4], Y = new double[4], Z = new double[4];double f, d;//f为主距,d为迭代精度private void openDataToolStripMenuItem_Click(object sender, EventArgs e){////打开*.txt文件数据if (ofdOpenFile.ShowDialog() == DialogResult.OK){StreamReader mystreamreader = new StreamReader(ofdOpenFile.FileName);//将文件载入到mystreamreaderstring Line;//读取的每行信息将记录在该字符串中double[] Temp = new double[22];//将每一行的信息存放在该一维数组中int temp = 0;//将*.text文件中的信息读如到Temp[]一维数组中while ((Line = mystreamreader.ReadLine()) != null){Temp[temp++] = Convert.ToDouble(Line);}mystreamreader.Close();for (int i = 0; i < 4; i++){//根据所读的数据赋值已知数据x[i] = Temp[5 * i];y[i] = Temp[5 * i + 1];X[i] = Temp[5 * i + 2];Y[i] = Temp[5 * i + 3];Z[i] = Temp[5 * i + 4];//将已知数据添加到列表视图中ListViewItem a;a = lst已知数据.Items.Add(x[i].ToString());a.SubItems.Add(y[i].ToString());a.SubItems.Add(X[i].ToString());a.SubItems.Add(Y[i].ToString());a.SubItems.Add(Z[i].ToString());}//将所读数据赋值给f和d,并显示到文本框中f =Temp[20];d =Temp[21];txt主距f.Text = f.ToString() + "m";txt限差d.Text = d.ToString() + "m";}}private void btnCalculate_Click(object sender, EventArgs e) {/////////////////初始计算///////////////////////已知数据//double[] x ={ -0.08615, -0.0534, -0.01478, 0.01046 };//double[] y ={ -0.06899, 0.08221, -0.07663, 0.06443 };//double[] X ={ 36859.41, 37631.08, 39100.97, 40426.54 };//double[] Y ={ 25273.32, 31324.51, 24934.98, 30319.81 };//double[] Z ={ 2195.17, 728.69, 2386.50, 757.31 };//double f = 0.15324, d = 0.000001;const int c_N = 100;//迭代次数int n=0;//迭代次数统计变量double H,m=0;//H为航高,m为比例尺//// 求m的值int t = 0;double sum;double[] mid = new double[6];//存储比例尺m的值for (int i = 0; i < 4; i++)//求六对线段的长度比{for (int j = i + 1; j < 4; j++){mid[t] = (Math.Sqrt((X[i] - X[j]) * (X[i] - X[j]) + (Y[i] - Y[j]) * (Y[i] - Y[j]))) /(Math.Sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])));t++;}}sum = 0.0;for (int i = 0; i < t; i++){sum = sum + mid[i];}m = sum / t;//比例尺为各段长度比的均值H = f * m;//计算航高lbl比例尺m.Text = "比例尺m=" + m.ToString();//显示比例尺lblH.Text = "航高H=" + H.ToString()+"m";//显示航高////定义外方位元素,并附初值double Xs , Ys , Zs , φ = 0, ω = 0, κ= 0;Xs = (X[0] + X[1] + X[2] + X[3]) / 4.0;Ys = (Y[0] + Y[1] + Y[2] + Y[3]) / 4.0;Zs = (Z[0] + Z[1] + Z[2] + Z[3]) / 4.0 + m * f;////定义x,y近似值double[] _x = new double[4];double[] _y = new double[4];////定义共线方程中的分子分母项,便于计算double[] _X = new double[4];double[] _Y = new double[4];double[] _Z = new double[4];////定义旋转矩阵Rdouble[,] R = new double[3, 3];////定义解方程所用矩阵double[,] A = new double[8, 6];//A系数阵double[,] AT = new double[6, 8];//A系数阵转置double[,] ATA = new double[6, 6];//A的转置与A的乘积double[,] temp = new double[6, 12];//临时矩阵double[,] ATAR = new double[6, 6];//A的转置与A的乘积的逆double[,] ATARAT = new double[6, 8];//A的转置与A的乘积的逆的转置double[,] L = new double[8, 1];//误差方程中的常数项double[,] XX = new double[6, 1];//X向量//////////////////开始迭代///////////////////do{////计算旋转矩阵R*0, 0+ = Math.Cos(φ) * Math.Cos(κ) - Math.Sin(φ) * Math.Sin(ω) * Math.Sin(κ);//a1R[0, 1] = -Math.Cos(φ) * Math.Sin(κ) - Math.Sin(φ) * Math.Sin(ω) * Math.Cos(κ);//a2R[0, 2] = -Math.Sin(φ) * Math.Cos(ω);//a3R*1, 0+ = Math.Cos(ω) * Math.Sin(κ);//b1R*1, 1+ = Math.Cos(ω) * Math.Cos(κ);//b2R[1, 2] = -Math.Sin(ω);//b3R*2, 0+ = Math.Sin(φ) * Math.Cos(κ) + Math.Cos(φ) * Math.Sin(ω) * Math.Sin(κ);//c1R[2, 1] = -Math.Sin(φ) * Math.Sin(κ) + Math.Cos(φ) * Math.Sin(ω) * Math.Cos(κ);//c2R*2, 2+ = Math.Cos(φ) * Math.Cos(ω);//c3for (int i = 0; i < 4; i++){//用共线方程计算x,y 的近似值_X[i] = R[0, 0] * (X[i] - Xs) + R[1, 0] * (Y[i] - Ys) + R[2, 0] * (Z[i] - Zs);_Y[i] = R[0, 1] * (X[i] - Xs) + R[1, 1] * (Y[i] - Ys) + R[2, 1] * (Z[i] - Zs);_Z[i] = R[0, 2] * (X[i] - Xs) + R[1, 2] * (Y[i] - Ys) + R[2, 2] * (Z[i] - Zs);_x[i] = -f * _X[i] / _Z[i];_y[i] = -f * _Y[i] / _Z[i];}for (int i = 0; i < 4; i++){//计算系数矩阵A[2 * i, 0] = (R[0, 0] * f + R[0, 2] * x[i]) / _Z[i];A[2 * i, 1] = (R[1, 0] * f + R[1, 2] * x[i]) / _Z[i];A[2 * i, 2] = (R[2, 0] * f + R[2, 2] * x[i]) / _Z[i];A*2 * i, 3+ = y*i+ * Math.Sin(ω) - ((x*i+ / f) * (x*i+ * Math.Cos(κ) - y*i+ * Math.Sin(κ)) + f * Math.Cos(κ)) * Math.Cos(ω);A[2 * i, 4] = -f * Math.Sin(κ) - (x*i+ / f) * (x*i+ * Math.Sin(κ) + y*i+ * Math.Cos(κ));A[2 * i, 5] = y[i];A[2 * i + 1, 0] = (R[0, 1] * f + R[0, 2] * y[i]) / _Z[i];A[2 * i + 1, 1] = (R[1, 1] * f + R[1, 2] * y[i]) / _Z[i];A[2 * i + 1, 2] = (R[2, 1] * f + R[2, 2] * y[i]) / _Z[i];A[2 * i + 1, 3] = -x*i+ * Math.Sin(ω) - ((x[i] / f) * (x[i] * Math.Cos(κ) - y*i+ * Math.Sin(κ)) - f * Math.Sin(κ)) * Math.Cos(ω);A[2 * i + 1, 4] = -f * Math.Cos(κ) - (y[i] / f) * (x*i+ * Math.Sin(κ) + y*i+ * Math.Cos(κ));A[2 * i + 1, 5] = -x[i];//计算常数项L[2 * i, 0] = x[i] - _x[i];L[2 * i + 1, 0] = y[i] - _y[i];}////计算A的转置,存在AT中for (int i = 0; i < 6; i++)for (int j = 0; j < 8; j++){AT[i, j] = A[j, i];}////计算A的转置与A的乘积,存在ATA中for (int i = 0; i < 6; i++)for (int j = 0; j < 6; j++){ATA[i, j] = 0;for (int l = 0; l < 8; l++)ATA[i, j] += AT[i, l] * A[l, j];}////////计算ATA的逆矩阵////////////初始化temp--临时数组for (int l = 0; l < 6; l++)for (int p = 0; p < 12; p++){temp[l, p] = 0;}////把ATA各值赋给tempfor (int i = 0; i < 6; i++)for (int j = 0; j < 6; j++){temp[i, j] = ATA[i, j];}////在temp中加入初等方阵for (int l = 0; l < 6; l++)temp[l, l + 6] = 1;////初等变换for (int l = 0; l < 6; l++){if (temp[l, l] != 1){double bs = temp[l, l];temp[l, l] = 1;for (int p = l + 1; p < 12; p++)temp[l, p] /= bs;}for (int q = 0; q < 6; q++){if (q != l){double bs = temp[q, l];for (int p = l; p < 12; p++)temp[q, p] -= bs * temp[l, p];}elsecontinue;}}////得到ATA的逆阵后存在ATAR中for (int i = 0; i < 6; i++)for (int j = 0; j < 6; j++){ATAR[i, j] = temp[i, j + 6];}////ATAR * AT存在ATARAT中for (int i = 0; i < 6; i++)for (int j = 0; j < 8; j++){ATARAT[i, j] = 0;for (int l = 0; l < 6; l++)ATARAT[i, j] += ATAR[i, l] * AT[l, j];}////计算ATARAT * L,存在XX中for (int i = 0; i < 6; i++)for (int j = 0; j < 1; j++){XX[i, j] = 0;for (int l = 0; l < 8; l++)XX[i, j] += ATARAT[i, l] * L[l, 0];}n++;if (n > c_N){MessageBox.Show("请检查阈值和迭代次数!" + (n - 1), "计算失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);break;}////计算外方位元素值Xs += XX[0, 0];Ys += XX[1, 0];Zs += XX[2, 0];φ += XX*3, 0+;ω += XX*4, 0+;κ += XX*5, 0+;}while (Math.Abs(XX[0, 0]) >= d || Math.Abs(XX[1, 0]) >= d || Math.Abs(XX[2, 0]) >= d || Math.Abs(XX[3, 0]) >= 1000*d || Math.Abs(XX[4, 0]) >= 1000*d || Math.Abs(XX[5, 0]) >= 1000*d);////输出显示结果if (n > c_N)MessageBox.Show("超过迭代精度,此数值下可能不收敛!", "提示", MessageBoxButtons.OK, rmation);else{MessageBox.Show("计算完成,显示计算结果", "提示", MessageBoxButtons.OK, rmation);txt计算结果.Text = "Xs:" + Xs.ToString() + "m" + "\r\n" + "Ys:" + Ys.ToString() + "m" + "\r\n" + "Zs:" + Zs.ToString() + "m" + "\r\n\r\n"+ "φ:" + φ.ToString() + "rad" + "\r\n" + "ω:" + ω.ToString() + "rad" + "\r\n" + "κ:" + κ.ToString() + "rad" + "\r\n\r\n"+ "dXs:" + XX[0, 0].ToString() + "m" + "\r\n" + "dYs:" + XX[1, 0].ToString() + "m" + "\r\n" + "dZs:" + XX[2, 0].ToString() + "m" + "\r\n"+ "dφ:" + XX[3, 0].ToString() + "rad" + "\r\n" + "dω:" + XX[4, 0].ToString() + "rad" + "\r\n" + "dκ:" + XX[5, 0].ToString() + "rad" + "\r\n\r\n" + "迭代次数:" + n.ToString();}////保存结果if (MessageBox.Show("是否保存结果数据.", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes){if (ofdSaveFile.ShowDialog() == DialogResult.OK){StreamWriter mystreamwriter = new StreamWriter(ofdSaveFile.FileName);mystreamwriter.WriteLine("计算结果为:" );mystreamwriter.WriteLine("m:" + m.ToString());mystreamwriter.WriteLine("H:" + H.ToString() + "m");mystreamwriter.WriteLine("\r\n");mystreamwriter.WriteLine("Xs:" + Xs.ToString() + "m" );mystreamwriter.WriteLine("Ys:" + Ys.ToString() + "m");mystreamwriter.WriteLine("Zs:" + Zs.ToString() + "m");mystreamwriter.WriteLine("\r\n");mystreamwriter.WriteLine("φ:" + φ.ToString() + "rad");mystreamwriter.WriteLine("ω:" + ω.ToString() + "rad");mystreamwriter.Write Line("κ:" + κ.ToString() + "rad");mystreamwriter.WriteLine("\r\n");mystreamwriter.WriteLine("dXs:" + XX[0, 0].ToString() + "m");mystreamwriter.WriteLine("dYs:" + XX[1, 0].ToString() + "m");mystreamwriter.WriteLine("dZs:" + XX[2, 0].ToString() + "m");mystreamwriter.WriteLine("dφ:" + XX*3, 0+.ToString() + "rad");mystreamwriter.WriteLine("dω:" + XX*4, 0+.ToString() + "rad");mystreamwriter.WriteLine("dκ:" + XX*5, 0+.ToString() + "rad");mystreamwriter.WriteLine("迭代次数:" + n.ToString());mystreamwriter.Close();}}elsereturn;}private void editorToolStripMenuItem_Click(object sender, EventArgs e){MessageBox.Show("地信XXX","个人信息");}}}九、运行结果十、实习总结通过这次摄影测量实习,是我学到了许多课本上学不到的知识和实践经验,也初步学会了关于单张影像空间后方交会的程序设计,丰富了自己的专业知识,让自己对摄影测量又有了性得了解;同时,在实习中也发现了自身的许多不足,使相关的专业知识和技巧得到了进一步提高。
摄影测量学实习报告4篇
摄影测量学实习报告摄影测量学实习报告精选4篇(一)实习报告:摄影测量学一、实习目的本次实习的主要目的是通过实际操作,了解摄影测量学的基本原理和方法,掌握航空摄影测量的流程和技术。
二、实习内容1. 学习基本理论知识通过课堂学习,了解摄影测量学的基本原理,学习航空摄影测量的相关知识,包括像空间、像对空间、光束法平差等。
2. 实地观摩航空摄影测量现场参观航空摄影测量实地测量现场,了解航空摄影测量的航摄设备和测量仪器的使用方法,观摩航摄过程,了解数据采集的流程。
3. 学习数据处理软件学习使用摄影测量数据处理软件,包括航空摄影测量数据处理软件和地理信息系统软件,学习数据处理的流程和方法。
4. 实际操作摄影测量针对实际问题,使用航空摄影测量设备进行实地测量,采集数据,并使用数据处理软件进行数据处理和分析,得出测量结果。
三、主要收获通过本次实习,我对摄影测量学有了更深入的了解和认识,掌握了航空摄影测量的基本原理和方法。
我学会了使用航空摄影测量设备进行实地测量,并熟练运用数据处理软件进行数据处理和分析。
在实践中,我进一步了解了数据采集的流程和数据处理的要点,提高了解决实际问题的能力。
四、存在问题在实习过程中,我发现自己在实际操作中出现了一些问题,比如摄影测量设备的操作不熟练,数据处理软件的使用不熟悉等。
这些问题需要进一步加强学习和实践,提高操作的熟练程度。
五、总结通过本次实习,我深入了解了摄影测量学的基本原理和方法,学会了使用航空摄影测量设备进行实地测量,并运用数据处理软件进行数据处理和分析。
这次实习加深了我对摄影测量学的理解,提高了解决实际问题的能力,并为今后的工作打下了坚实的基础。
摄影测量学实习报告精选4篇(二)在摄影测量实习期间,我有幸能够参与实践,并且从中获得了许多宝贵的经验和体会。
首先,实习期间我学会了如何使用各种摄影测量仪器和设备。
我了解了测量仪器的工作原理,并且学会了准确地操作它们。
通过实际操作,我对测量仪器的性能和特点有了更深入的了解,这对于我今后的工作会有很大帮助。
matlab实习报告二5篇
matlab实习报告二5篇第一篇:matlab实习报告二MATLAB实习报告(2)实验二 MATLAB矩阵分析与处理王夏一、实验目的1、掌握生成特殊矩阵的方法。
2、掌握矩阵分析的方法。
3、用矩阵求逆发解线性方程组。
二、实验内容1、设有分块矩阵A=[E3×3 R3×2;O2×3 S2×2],其中E、R、O、S分别为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证A²=[E R+RS;O S²]。
程序清单:E=eye(3);R=rand(3,2);O=zeros(2,3);S=diag([4,5]);A=[E R;O S] ;A2=A^2;C=[E R+R*S;O S^2];length(find(A2==C))==25 运行结果:ans =12、产生5阶希尔伯特矩阵H和5阶帕斯卡矩阵P,且求其行列式的值Hh和Hp以及他们的条件数Th和Tp,判断哪个矩阵的性能更好,为什么?程序清单:format rat H=hilb(5);format short P=pascal(5);Hh=det(H);Hp=det(P);Th=cond(A);Tp=cond(P);运行结果:Hh =3.7493e-012 Hp =1 Th =5.5228 Tp =8.5175e+003 实验收获:会建立希尔伯特矩阵和帕斯卡矩阵,知道怎么求矩阵行列式的值以及条件数。
希尔伯特矩阵的性能更好,条件数越接近1的矩阵性能越好。
3、建立一个5×5矩阵,求它的行列式值、迹、秩和范数。
程序清单:A=[1:5;1:0.1:1.5;2 5 7 3 9;2:6;3:0.4:4.6]Ha=det(A);Ra=rank(A);Ta=trace(A);Na=norm(A);运行结果:Ha =1.4421e-031 Ra = 3 Ta =18.7000 Na =19.49664、已知向量A,求A的特征值及特征向量,并分析其数学意义。
matlab实习报告7
matlab实习报告7《matlab 实习报告 7》在大学的学习生涯中,我有幸参与了一次 MATLAB 的实习,这次实习让我对这一强大的数学计算和可视化工具,有了更深入的理解和掌握。
实习伊始,我对 MATLAB 的认知还停留在书本上的理论知识和简单的示例代码。
然而,随着实习的推进,我逐渐发现 MATLAB 的强大功能远远超出了我的想象。
首先,我学习了MATLAB 的基本语法和数据类型。
整数、浮点数、字符串、数组等各种数据类型在 MATLAB 中都有独特的表示和操作方式。
通过不断地练习和实践,我逐渐熟悉了如何定义变量、进行数据运算以及处理不同类型的数据。
在掌握了基本的数据操作后,我开始深入学习 MATLAB 的函数编写。
函数是 MATLAB 中实现复杂功能的重要手段。
通过自定义函数,我能够将重复使用的代码段封装起来,提高代码的可读性和可维护性。
例如,我编写了一个用于计算两个矩阵乘积的函数,通过输入两个矩阵,函数能够返回它们的乘积结果。
这个过程不仅锻炼了我的编程思维,还让我更加熟悉了矩阵运算的原理和方法。
接下来,我接触到了 MATLAB 的绘图功能。
绘图是直观展示数据和结果的重要方式。
我学会了使用 plot 函数绘制简单的折线图、使用bar 函数绘制柱状图、使用 hist 函数绘制直方图等等。
通过对数据进行可视化,我能够更清晰地理解数据的分布和趋势,从而为进一步的分析和处理提供了有力的支持。
在实习过程中,我还参与了一个实际的项目——图像去噪。
图像在采集和传输过程中往往会受到噪声的干扰,影响图像的质量和后续的处理。
利用 MATLAB 提供的图像处理工具和函数,我尝试了多种去噪算法,如均值滤波、中值滤波和高斯滤波等。
通过对不同算法的效果进行比较和分析,我最终找到了一种最适合当前图像的去噪方法。
这个过程让我深刻体会到了 MATLAB 在实际应用中的强大能力,也让我明白了理论知识与实际应用之间的紧密联系。
另外,MATLAB 的矩阵运算功能给我留下了深刻的印象。
matlab实习报告总结
MATLAB实习报告总结介绍本文是对我在MATLAB实习过程中的总结与反思。
通过这次实习,我对MATLAB的使用有了更深入的了解,并且对实际问题的解决能力也有了提升。
实习目标在实习开始之前,我设定了以下几个目标: 1. 熟悉MATLAB的基本语法和常用函数; 2. 学习如何使用MATLAB解决实际问题; 3. 提升自己的编程能力和解决问题的思维能力。
实习过程第一阶段:熟悉MATLAB基本语法在实习开始之初,我花了一段时间来学习MATLAB的基本语法。
通过阅读官方文档和参考书籍,我了解了MATLAB的变量定义、矩阵运算、函数定义等基本概念和用法。
我利用空闲时间编写了一些简单的代码来巩固这些知识。
第二阶段:学习MATLAB的常用函数在熟悉基本语法之后,我开始学习MATLAB的常用函数。
我学习了MATLAB 中的统计分析函数、数据可视化函数、图像处理函数等。
通过学习这些函数,我可以更高效地处理和分析数据,同时也能够更好地展示我的结果。
第三阶段:实际问题的解决在掌握了MATLAB的基本语法和常用函数后,我开始尝试使用MATLAB解决一些实际问题。
我选择了一个与我的专业相关的问题,通过MATLAB对数据进行分析和建模。
在这个过程中,我遇到了一些困难和挑战,但通过查阅资料和请教同学,我最终成功解决了这些问题。
第四阶段:编程能力和思维能力的提升通过这次实习,我的编程能力和解决问题的思维能力得到了提升。
在实际问题的解决过程中,我学会了如何分析问题、设计算法、编写代码并调试。
通过与同学的讨论和交流,我也学会了如何思考和解决问题的不同角度。
总结与反思这次MATLAB实习让我受益匪浅。
通过实际操作,我深入了解了MATLAB的使用方法和技巧。
我学会了如何使用MATLAB解决实际问题,并且在这个过程中提升了自己的编程能力和解决问题的思维能力。
然而,我也发现了自己的不足之处。
在实习过程中,我有时会陷入“死记硬背”的状态,只注重语法和函数的使用,而不去思考问题背后的本质,这导致我在解决一些复杂问题时遇到了困难。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摄影测量原理单张影像后方交会实习目录一实习目的 (3)二实习原理 (3)1. 间接平差 (3)2. 共线方程 (3)3. 单向空间后方交会 (4)三计算流程 (4)1. 求解步骤 (4)2.计算机框图 (4)四程序实现 (5)五结果分析 (6)1.外方位元素 (6)2.误差 (6)3.旋转矩阵R (7)六实习体会 (7)1. 平台的选择 (7)2.问题的解决 (7)3.心得体会 (8)七代码展示 (8)一实习目的为了增强同学们对后方交会公式的理解,培养同学们对迭代循环编程的熟悉感,本次摄影测量课间实习内容定为用C语言或其他程序编写单片空间后方交会程序,最终输出像点坐标、地面坐标、单位权中误差、外方位元素及其精度。
已知四对点的影像坐标和地面坐标如下。
内方位元素fk=153.24mm,x0=y0=0。
本次实习,我使用了matlab2014进行后方交会程序实现。
结果与参考答案一致,精度良好。
二实习原理题干中有四个控制点在地面摄影测量坐标系中的坐标和对应的像点坐标,由此可列出8个误差方程,存在2个多余观测(n=2)。
故可利用间接平差的最小二乘法则求解。
由于共线方程是非线性函数模型,为了方便计算,需要将其“线性化”。
但如果仅取泰勒级数展开式的一次项,未知数的近似值改正是不精确的。
因此必须采用迭代趋近法计算,直到外方位元素的改正值小于限差。
1.间接平差间接平差为平差计算最常用的方法。
在确定多个未知量的最或然值时,选择它们之间不存在任何条件关系的独立量作为未知量组成用未知量表达测量的函数关系、列出误差方程式,按最小二乘法原理求得未知量的最或然值的平差方法。
在一个间接平差问题中,当所选的独立参数X个数与必要观测值t个数相等时,可将每个观测值表达成这t个参数的函数,组成观测方程。
函数模型为:L = BX + d。
2.共线方程共线方程是中心投影构像的数学基础,也是各种摄影测量处理方法的重要理论基础。
式中:x,y 为像点的像平面坐标;x0,y0,f 为影像的内方位元素;XS,YS,ZS 为摄站点的物方空间坐标;XA,YA,ZA 为物方点的物方空间坐标;ai,bi,ci (i = 1,2,3)为影像的3 个外方位角元素组成的9 个方向余弦。
3.单向空间后方交会利用至少三个已知地面控制点的坐标A、B、Z与其影像上对应的三个像点的影像坐标a、b、c,根据共线方程,反求该像点的外方位元素。
这种解算方法以单张相片为基础,亦称单像空间后方交会。
三计算流程1.求解步骤(1)获取已知数据。
(2)量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
(3)确定未知数的初始值。
在竖直航空摄影且地面控制点大体对称分布的情况下,可按如下方法确定初始值:Z S0 = H = m*fX S0 = 1/n*(X1+X2+…+X n)Y S0 = 1/n*(Y1+Y2+…+Y n)q0 = w0 = 0k0可在航迹图上找出,或根据控制点坐标通过坐标正反变换求出。
(4)利用角元素近似值计算方向余弦值,组成旋转矩阵R。
(5)利用未知数的近似值按共线方程条件式计算控制点像点坐标的近似值x0,y0。
(6)逐点计算误差方程式的系数和常数项,组成误差方程式。
(7)解求外方位元素改正数,并与相应的近似值求和,得到外方位元素新的近似值。
(8)规定限差限制迭代次数,检查计算是否收敛。
2.计算机框图四程序实现1.定义各种参数名并赋值。
由于题目是近似垂直观测,角元素q,w,k的初值我统一赋了0。
从最终结果也可以看出三个值都非常接近0。
2.读取坐标新建名为“坐标.txt”的文本文件,按顺序输入每个点的影像坐标和地面坐标。
使用matlab读取文件语句textread将x,y,X,Y,Z分别存储到对应矩阵中。
3.从计算R阵开始,直到外方位元素改正,需要进行数次迭代循环。
结束循环的条件为线元素最终改正值绝对值小于limit1(0.001),角元素最终改正值绝对值小于limit1(0.001),两者必须同时成立。
4.进入循环后,先按照书上公式,用程序中外方位元素赋的初值计算旋转矩阵R。
5.按照公式计算共线方程。
共线方程左侧应为x-x0/y-y0,但本题中x0、y0都为0,故略去一步,直接记录左侧数值为x/y。
存储在矩阵的顺序与c矩阵相同,方便二者作差求出L阵。
6.利用一个i(1~4)的循环,计算出系数阵A。
在此之前需要计算Zbar。
7.计算常数项L,进而推导出外方位元素改正值dx。
8.改正外方位元素大小,判断是否满足循环条件。
若不满足则输出结果。
9.循环结束后,分别输出外方位元素值、外方位元素误差和R阵,保存在txt文件中。
五结果分析1.外方位元素结果如下;迭代次数为5次。
结果与参考答案一致,迭代次数也符合要求,说明外方位元素初值选取的比较好。
本张像片近似垂直摄影。
2.外方位元素误差都比较小,同时角元素精度远高于线元素精度。
3.旋转矩阵R各元素大小四舍五入后与参考答案一致。
六实习体会七代码展示%单幅影像后方交会%线元素10^-3,角元素10^-6close all; clear all; clc;disp('后方交会求解')%屏幕输出[x,y,X,Y,Z]=textread('坐标.txt','%f %f %f %f %f');%读取文件x=x/1000;y=y/1000;%修正单位fk=153.24/1000;%主距修正单位m=50000;%比例尺系数limit1=0.001;limit2=0.000001;%改正值精度Xs=sum(X)/4;Ys=sum(Y)/4;Zs=fk*m+sum(Z)/4;%待定参数初始值q=0;w=0;k=0;%外方位角元素R=zeros(3,3);%旋转矩阵dx=ones(6,1);%改正值H=m*fk;%航高round=0;%迭代次数c=[x(1);y(1);x(2);y(2);x(3);y(3);x(4);y(4)];%方便L计算PI=3.1415926;%循环条件:线元素改正值<=limit1且角元素改正值<=limit2while(abs(dx(1,1))>limit1||abs(dx(2,1))>limit1||abs(dx(3,1))>limit1||a bs(dx(4,1))>limit2||abs(dx(5,1))>limit2||abs(dx(6,1))>limit2)%迭代计算旋转矩阵RR(1,1)=cos(q)*cos(k)-sin(q)*sin(w)*sin(k);R(1,2)=-cos(q)*sin(k)-sin(q)*sin(w)*cos(k);R(1,3)=-sin(q)*cos(w);R(2,1)=cos(w)*sin(k);R(2,2)=cos(w)*cos(k);R(2,3)=-sin(w);R(3,1)=sin(q)*cos(k)+cos(q)*sin(w)*sin(k);R(3,2)=-sin(q)*sin(k)+cos(q)*sin(w)*cos(k);R(3,3)=cos(q)*cos(w);xy_0=zeros(8,1);%共线方程。
奇数为x-x0,偶数为y-y0xy_0(1,1)=-fk*(R(1,1)*(X(1)-Xs)+R(2,1)*(Y(1)-Ys)+R(3,1)*(Z(1)-Zs))/(R( 1,3)*(X(1)-Xs)+R(2,3)*(Y(1)-Ys)+R(3,3)*(Z(1)-Zs));xy_0(2,1)=-fk*(R(1,2)*(X(1)-Xs)+R(2,2)*(Y(1)-Ys)+R(3,2)*(Z(1)-Zs))/(R( 1,3)*(X(1)-Xs)+R(2,3)*(Y(1)-Ys)+R(3,3)*(Z(1)-Zs));xy_0(3,1)=-fk*(R(1,1)*(X(2)-Xs)+R(2,1)*(Y(2)-Ys)+R(3,1)*(Z(2)-Zs))/(R( 1,3)*(X(2)-Xs)+R(2,3)*(Y(2)-Ys)+R(3,3)*(Z(2)-Zs));xy_0(4,1)=-fk*(R(1,2)*(X(2)-Xs)+R(2,2)*(Y(2)-Ys)+R(3,2)*(Z(2)-Zs))/(R( 1,3)*(X(2)-Xs)+R(2,3)*(Y(2)-Ys)+R(3,3)*(Z(2)-Zs));xy_0(5,1)=-fk*(R(1,1)*(X(3)-Xs)+R(2,1)*(Y(3)-Ys)+R(3,1)*(Z(3)-Zs))/(R( 1,3)*(X(3)-Xs)+R(2,3)*(Y(3)-Ys)+R(3,3)*(Z(3)-Zs));xy_0(6,1)=-fk*(R(1,2)*(X(3)-Xs)+R(2,2)*(Y(3)-Ys)+R(3,2)*(Z(3)-Zs))/(R( 1,3)*(X(3)-Xs)+R(2,3)*(Y(3)-Ys)+R(3,3)*(Z(3)-Zs));xy_0(7,1)=-fk*(R(1,1)*(X(4)-Xs)+R(2,1)*(Y(4)-Ys)+R(3,1)*(Z(4)-Zs))/(R( 1,3)*(X(4)-Xs)+R(2,3)*(Y(4)-Ys)+R(3,3)*(Z(4)-Zs));xy_0(8,1)=-fk*(R(1,2)*(X(4)-Xs)+R(2,2)*(Y(4)-Ys)+R(3,2)*(Z(4)-Zs))/(R( 1,3)*(X(4)-Xs)+R(2,3)*(Y(4)-Ys)+R(3,3)*(Z(4)-Zs));A=zeros(8,6);%系数阵for i=1:4Xbar=R(1,1)*(X(i)-Xs)+R(2,1)*(Y(i)-Ys)+R(3,1)*(Z(i)-Zs);Ybar=R(1,2)*(X(i)-Xs)+R(2,2)*(Y(i)-Ys)+R(3,2)*(Z(i)-Zs);Zbar=R(1,3)*(X(i)-Xs)+R(2,3)*(Y(i)-Ys)+R(3,3)*(Z(i)-Zs);A(2*i-1,1)=1/Zbar*(R(1,1)*fk+R(1,3)*xy_0(2*i-1,1));A(2*i-1,2)=1/Zbar*(R(2,1)*fk+R(2,3)*xy_0(2*i-1,1));A(2*i-1,3)=1/Zbar*(R(3,1)*fk+R(3,3)*xy_0(2*i-1,1));A(2*i,1)=1/Zbar*(R(1,2)*fk+R(1,3)*xy_0(2*i,1));A(2*i,2)=1/Zbar*(R(2,2)*fk+R(2,3)*xy_0(2*i,1));A(2*i,3)=1/Zbar*(R(3,2)*fk+R(3,3)*xy_0(2*i,1));A(2*i-1,4)=xy_0(2*i,1).*sin(w)-(xy_0(2*i-1,1)./fk.*(xy_0(2*i-1,1).*cos (k)-xy_0(2*i,1).*sin(k))+fk*cos(k))*cos(w);A(2*i-1,5)=-fk*sin(k)-xy_0(2*i-1,1)./fk.*(xy_0(2*i-1,1).*sin(k)+xy_0(2 *i,1).*cos(k));A(2*i-1,6)=xy_0(2*i,1);A(2*i,4)=-xy_0(2*i-1,1).*sin(w)-(xy_0(2*i,1)./fk.*(xy_0(2*i-1,1).*cos( k)-xy_0(2*i,1).*sin(k))-fk*sin(k))*cos(w);A(2*i,5)=-fk*cos(k)-xy_0(2*i,1)./fk.*(xy_0(2*i-1,1).*sin(k)+xy_0(2*i,1 ).*cos(k));A(2*i,6)=-xy_0(i*2-1,1);endround=round+1;L=c-xy_0;dx=((A')*A)\(A')*L;%改正外方位元素Xs=Xs+dx(1,1);Ys=Ys+dx(2,1);Zs=Zs+dx(3,1);q=q+dx(4,1);w=w+dx(5,1);k=k+dx(6,1);end%写入文件fid1=fopen('后方交会.txt','w');%输出外方位元素fprintf(fid1,'Xs = %f\r\n',Xs);fprintf(fid1,'Ys = %f\r\n',Ys);fprintf(fid1,'Zs = %f\r\n\r\n',Zs);fprintf(fid1,'q = %f\r\n',q);fprintf(fid1,'w = %f\r\n',w);fprintf(fid1,'k = %f\r\n\r\n',k);fprintf(fid1,'round = %d\r\n',round);fclose(fid1);fid2=fopen('R阵.txt','w');%输出矩阵Rfprintf(fid2,'\r\n');for m=1:3for n=1:3fprintf(fid2,'%f ',R(m,n));endfprintf(fid2,'\r\n');endfclose(fid2);fid3=fopen('精度评定.txt','w');%输出中误差fprintf(fid3,'dXs = ±%f(mm)\r\n',1000*abs(dx(1,1)));fprintf(fid3,'dYs = ±%f(mm)\r\n',1000*abs(dx(2,1)));fprintf(fid3,'dZs = ±%f(mm)\r\n',1000*abs(dx(3,1)));fprintf(fid3,'\r\ndq = ±%f(″)\r\n',abs(dx(4,1))*180*3600/PI);fprintf(fid3,'dw = ±%f(″)\r\n',abs(dx(5,1))*180*3600/PI); fprintf(fid3,'dk = ±%f(″)\r\n',abs(dx(6,1))*180*3600/PI); fclose(fid3);。