摄影测量学空间后方交会实验报告测绘101徐斌
摄影测量学单像空间后方交会编程实习报告(精品资料).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. 量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。
后方交会实验报告
1 实验任务理解摄影测量中核心模型-共线方程作用,掌握航空影像中重要的点线面的透视关系以及物方与像方之间的解析关系,单幅影像上像点坐标与相应地面点坐标之间的关系。
通过编程实现外方位元素的求解,提升编程能力。
2 理论模型与方法单张像片的空间后方交会的基本思想:以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应的像坐标量测值处发,根据共线条件方程,解求该影像在航空摄影时刻的元素S X ,S Y ,S Z ,φ,ω,κ。
(1)共线方程)()()()()()()()()()()()(33322203331110S A S A S A S A S A S A S A S A S A S A S A S A Z Z c Y Y b X X a Z Z c Y Y b X X a f y y Z Z c Y Y b X X a Z Z c Y Y b X X a fx x -+-+--+-+--=--+-+--+-+--=-(2)旋转矩阵R123123123cos cos sin sin sin cos sin sin sin cos sin cos cos sin cos cos sin sin cos cos sin sin sin sin cos sin cos cos cos a a a b b b c c c φκφωκφκφωκφωωκωκωφκφωκφκφωκφω=-=--=-===-=+=-+=(3)经过线性化,得到x ,y 的误差方程式 yx a a a Z a Y a X a xx a a a Z a Y a X a s s s y s s s x -+∆+∆+∆+∆+∆+∆=-+∆+∆+∆+∆+∆+∆=)(v )(v 262524232221161514131211κφφκφφ矩阵形式如下:L AX V -=系数方程 ⎥⎦⎤⎢⎣⎡=262524232221161514131211a a a a a a a a a a a a A 其中:x a y x f y f a f y x f y x a ya y x f x f a f y x f x y a Zy c f c a Zy b f b a Zy a f a a Zx c f c a Zx b f b a Zx a f a a -=---=----==+--=+--=+=+=+=+=+=+=262524161514322332223221311331123111)cos sin (/cos cos ]sin )sin cos (/[sin ]cos sin [/sin cos }cos ]sin cos [/{sin /][/][/][/][/][/][κκκωκκκωκκκωκκκω[]Ty y x x L --=)(,)( )()()()()()()()()(333222111S S S S S S S S S Z Z c Y Y b X X a Z Z Z c Y Y b X X a Y Z Z c Y Y b X X a X -+-+-=-+-+-=-+-+-=近似值计算公式如下:ZY f y y ZX f x x //00-=--=- (4)由最小二乘间接平差原理可得: []κωφ∆∆∆∆∆∆=S S S Z Y X XL A A A X T T 1)(-=+∆+∆+=+∆+∆+=+∆+∆+=+∆+∆+=+∆+∆+=+∆+∆+=210210210210210210κκκκωωωωϕϕϕϕS S S S S S S S S S S S Z Z Z Z Y Y Y Y X X X X3 程序设计本地方仅列出核心代码:%确定初值x0=0;y0=0;f=153.24;m=sqrt(((x(1)-x(2))^2+(y(1)-y(2))^2))/(sqrt(((X(1)-X(2))^2+(Y(1)-Y(2))^2)));Zs=f/m;%3个线性元素Xs=mean(X);Ys=mean(Y);aa=0; %3个外方位角元素初值ww=0;kk=0;cx=zeros(6,1);p=0.1/206264.806247096363;%将0.1秒限差化为弧度aa1=1;ww1=1;kk1=1;k=0;while abs(aa-aa1)>p||abs(ww-ww1)>p||abs(kk-kk1)>paa1=aa;%赋值ww1=ww;kk1=kk;%计算旋转矩阵a1=cos(aa)*cos(kk)-sin(aa)*sin(ww)*sin(kk);a2=-cos(aa)*sin(kk)-sin(aa)*sin(ww)*cos(kk);a3=-sin(aa)*cos(ww);b1=cos(ww)*sin(kk);b2=cos(ww)*cos(kk);b3=-sin(ww);c1=sin(aa)*cos(kk)+cos(aa)*sin(ww)*sin(kk);c2=-sin(aa)*sin(kk)+cos(aa)*sin(ww)*cos(kk);c3=cos(aa)*cos(ww);R=[a1 a2 a3;b1 b2 b3;c1 c2 c3];%计算误差方程系数for i=1:d1%计算近似值XX=a1*(X(i)-Xs)+b1*(Y(i)-Ys)+c1*(Z(i)-Zs);YY=a2*(X(i)-Xs)+b2*(Y(i)-Ys)+c2*(Z(i)-Zs);ZZ=a3*(X(i)-Xs)+b3*(Y(i)-Ys)+c3*(Z(i)-Zs);a11=(1/ZZ)*(a1*f+a3*(x(i)-x0));a12=(1/ZZ)*(b1*f+b3*(x(i)-x0));a13=(1/ZZ)*(c1*f+c3*(x(i)-x0));a14=(y(i)-y0)*sin(ww)-(((x(i)-x0)/f)*((x(i)-x0)*cos(kk)-(y(i)-y0)*sin(kk))+f*cos(kk))*cos(ww);a15=-f*sin(kk)-((x(i)-x0)/f)*((x(i)-x0)*sin(kk)+(y(i)-y0)*cos(kk));a16=(y(i)-y0);a21=(1/ZZ)*(a2*f+a3*(y(i)-y0));a22=(1/ZZ)*(b2*f+b3*(y(i)-y0));a23=(1/ZZ)*(c2*f+c3*(y(i)-y0));a24=-(x(i)-x0)*sin(ww)-(((y(i)-y0)/f)*((x(i)-x0)*cos(kk)-(y(i)-y0)*sin(kk))-f*sin(kk))*cos(ww);a25=-f*cos(kk)-((y(i)-y0)/f)*((x(i)-x0)*sin(kk)+(y(i)-y0)*cos(kk));a26=-(x(i)-x0);A(2*i-1,:)=[a11 a12 a13 a14 a15 a16];A(2*i,:)=[a21 a22 a23 a24 a25 a26];l(2*i-1,:)=x(i)-(x0-f*XX/ZZ);l(2*i,:)=y(i)-(y0-f*YY/ZZ);endcx1=inv(A'*A)*A'*l;%最小二乘平差Xs=Xs+cx1(1);Ys=Ys+cx1(2);Zs=Zs+cx1(3);aa=aa+cx1(4);ww=ww+cx1(5);kk=kk+cx1(6);k=k+1;%统计循环次数endV==A*cx1-l;sigma=sqrt(V'*V/11);4 结论与体会。
单像空间后方交会实习报告
单像空间后方交会实习报告一、实习目的单像空间后方交会是摄影测量中确定像片外方位元素的重要方法。
通过本次实习,旨在深入理解单像空间后方交会的基本原理和计算过程,熟练掌握相关软件的操作,提高对摄影测量数据处理的实践能力,并培养解决实际问题的思维和方法。
二、实习原理单像空间后方交会的目的是利用像片上的像点坐标以及相应的地面控制点坐标,通过数学模型求解像片的外方位元素(三个线元素 Xs、Ys、Zs 和三个角元素φ、ω、κ)。
其基本原理基于共线条件方程,即摄影中心、像点和相应的地面点位于同一条直线上。
共线条件方程可以表示为:\\begin{align}x x_0&= f\frac{a_1(X X_s) + b_1(Y Y_s) + c_1(Z Z_s)}{a_3(X X_s) + b_3(Y Y_s) + c_3(Z Z_s)}\\y y_0&= f\frac{a_2(X X_s) + b_2(Y Y_s) + c_2(Z Z_s)}{a_3(X X_s) + b_3(Y Y_s) + c_3(Z Z_s)}\end{align}\其中,\((x,y)\)为像点坐标,\((x_0,y_0)\)为主点坐标,\(f\)为摄影机焦距,\((X,Y,Z)\)为地面点的物方空间坐标,\((X_s,Y_s,Z_s)\)为摄影中心的物方空间坐标,\((a_1,b_1,c_1),(a_2,b_2,c_2),(a_3,b_3,c_3)\)为由角元素φ、ω、κ 构成的旋转矩阵的元素。
三、实习数据本次实习使用了一组航空像片,像片比例尺为 1:5000,焦距为152mm,像主点坐标为\((x_0,y_0)=(5000mm,5000mm)\)。
同时,提供了 6 个均匀分布在像片范围内的地面控制点的物方空间坐标和像点坐标。
四、实习步骤1、数据准备整理地面控制点的物方空间坐标和像点坐标,确保数据的准确性。
输入像片的基本参数,如像主点坐标、焦距等。
摄影测量学后方交会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 个方向余弦。
摄影测量学单像空间后方交会编程实习报告
摄影测量学单像空间后方交会编程实习报告实习背景在本次实习中,我们学习了摄影测量学单像空间后方交会的编程实现。
这是一种通过计算影像中各点的坐标来确定被摄物的三维坐标的方法,应用广泛于测绘、地理信息、建筑等领域。
本次实习采用 MATLAB 软件进行编程,目的是将理论知识应用到实际操作中,让我们更深入理解摄影测量学单像空间后方交会的原理和应用。
实习内容理论部分首先,我们在工作室进行了理论部分的学习。
老师讲解了单像空间后方交会的原理,以及如何通过影像坐标、相机外方位元素、像点坐标和像平面坐标等参数来计算被摄物的三维坐标。
在理论部分的学习过程中,我们通过公式的推导和实例分析,更加深入地理解了单像空间后方交会的原理。
实践部分实践部分是本次实习的重头戏。
我们利用 MATLAB 软件进行了单像空间后方交会的编程实现,具体步骤如下:1.输入相机外方位元素通过读取文本文件,将相机外方位元素(相机在拍摄时的姿态、位置等参数)输入到 MATLAB 中。
2.输入影像坐标通过读取文本文件,将影像中的像点坐标输入到 MATLAB 中。
3.计算像平面坐标利用相机内定标参数,将像点坐标转化为像平面坐标。
4.计算被摄物三维坐标根据单像空间后方交会的原理,利用相机外方位元素、像平面坐标和像点坐标等参数,计算被摄物的三维坐标。
5.输出结果将计算结果输出到文本文件中,以便后续的数据处理和分析。
在实际操作中,我们首先编写了 MATLAB 脚本文件,根据上述步骤逐步实现了单像空间后方交会的计算过程。
然后,我们利用自己拍摄的实际照片进行实验,将相机外方位元素和像点坐标输入到程序中,最终得到了被摄物的三维坐标结果。
实习收获通过本次实习,我从理论到实践,更深入地理解了摄影测量学单像空间后方交会的原理和应用,同时也掌握了 MATLAB 的编程技能。
在实践中,我遇到了许多问题,包括数据的输入输出、代码的调试和结果的分析等等。
通过和同学的讨论和老师的指导,我不仅解决了这些问题,还对摄影测量学的应用有了更深入的认识。
单像空间后方交会实习报告
框图。
3
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
摄影测量学空间后方交会实验报告13页
摄影测量学空间后方交会实验报告13页报告摘要:本实验以三张已知高度物体的相片为样本,运用摄影测量学的空间后方交会算法,通过MATLAB编程实现对物体三维坐标的计算,并加以检验与探讨,得出结论相对合理。
同时,本实验也通过对MATLAB编程的应用,掌握了空间后方交会算法的理论及实践方法。
1. 实验目的(1)学习和应用摄影测量学中的空间后方交会算法,掌握其计算方法和程序实现过程。
(2)了解数字像相机的相关特性,并掌握其使用方法。
(3)通过对样本数据的处理,熟悉和掌握MATLAB编程的应用技巧。
2. 实验器材数字相机一部,尺子一把,样本图像三张,MATLAB软件。
3. 实验原理在精密测量领域中,采用摄影测量学的空间后方交会算法,可实现三维坐标的测量和重建。
这种方法是将已知物体的照片,通过对像点的提取及校准,得出像点坐标系下的物体的三维坐标系下的坐标。
这种算法的基本思路是:利用像点坐标系下的物体三维坐标系下的坐标关系,构建一个误差最小的方程组,通过矩阵的求解,得到物体三维坐标系下的坐标。
数字相机是一种基于CCD或CMOS成像器材料的成像设备,根据数字信号的处理能力,合成电子图像。
数字相机的性能主要包括分辨率、感光度、曝光控制、焦距、光圈等参数。
使用数字相机拍摄时,应根据拍摄对象的光线条件、距离、尺寸、景深等因素,进行调节。
4. 实验过程(1)利用数字相机拍摄三张已知高度物体的照片,并在样本上面贴标记,用尺子测算实际高度。
(2)利用图像处理软件MATLAB,对照片进行像点识别和校准,得到像点坐标系下的坐标。
(3)根据相片中已知物体的测高值及像点坐标系下的坐标值,通过MATLAB编写空间后方交会的程序算法,得出物体的三维坐标系下的坐标。
(4)对得出的坐标值进行检验及探讨,分析误差来源及部分工具库的使用方法。
5. 实验结果与分析本实验所得出的三维坐标值,原本应是在一个确定点之间展开的点集。
知道参数计算不全或精度不够是常有的事情(尤其在没有精密测量器具的条件下),这种情况我们应该考虑从给出的角度和图像来看和计算得到位置。
摄影测量学单像空间后方交会编程实习报告
摄影测量学单像空间后方交会编程实习报告本次实习中,我使用编程语言进行了单像空间后方交会的实现,并取得了一定的成果。
首先,我了解了单像空间后方交会的基本原理。
根据光线在透镜上的成像规律,可以推导出物体点在像平面上的坐标与图像点在像平面上的坐标之间的关系式。
通过已知的摄像机内外方位元素和图像点坐标,可以反求得物体点的坐标。
在程序编写过程中,我采用了Python编程语言。
首先,我定义了一个类,用于存储摄像机的内外方位元素和图像点坐标。
然后,我编写了一个函数,用于计算物体点的坐标。
该函数根据已知的内外方位元素和图像点坐标,使用逆向投影的方式反求物体点的坐标。
最后,我编写了一个主函数,通过读取输入文件中的数据,调用计算函数,并将结果保存到输出文件中。
在实现的过程中,我遇到了一些问题。
首先,由于摄像机的内外方位元素需要提前获取,因此我通过测量方法获得了实际的内外方位元素。
然而,测量的过程中存在一定的误差,因此在计算物体点坐标时可能存在一定的误差。
其次,图像坐标与物体点坐标之间的关系式中存在一些参数,如焦距、主点坐标等,这些参数也需要提前获取。
在程序中,我将这些参数作为输入参数,通过外部文件进行输入。
在实习的过程中,我充分运用了自己所学的摄影测量学知识,并将其与编程技能相结合。
在实现过程中,我遇到了一些难题,但通过查阅资料和与老师的讨论,最终得以解决。
通过编程实习,我深入理解了单像空间后方交会的原理,并通过实际操作提高了自己的计算能力。
总的来说,本次实习使我对摄影测量学有了更深入的认识,也提升了我的计算和编程能力。
通过此次实习,我对摄影测量学的兴趣更加浓厚,也更加期待在今后的学习和研究中能够进一步深入探索。
摄影测量学空间后方交会实验报告测绘101徐斌
摄影测量学空间后方交会实验报告测绘101徐斌摄影测量学实验报告实验一、单像空间后方交会学院: 建测学院班级: 测绘101姓名: 徐斌学号: 26一( 实验目的1.深入了解单像空间后方交会的计算过程;2.加强空间后方交会基本公式和误差方程式,法线方程式的记忆;3.通过上机调试程序加强动手能力的培养。
二(实验原理以单幅影像为基础,从该影像所覆盖地面范围内若干控制点和相应点的像坐标量测值出发,根据共线条件方程,求解该影像在航空摄影时刻的相片外方位元素。
三(实验内容1.程序图框图2.实验数据(1)已知航摄仪内方位元素f,153.24mm,Xo,Yo,0。
限差0.1秒(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 4 10.46 64.43 40426.54 30319.81 757.313.实验程序Form1.cs 程序using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace 后方交会1{public partial class Form1 : Form {public Form1(){InitializeComponent();}public doublef,m,Xs, Ys, Zs,a1, a2, a3, b1, b2, b3, c1, c2, c3, q, w, k;public static int N,s;public double[] x = new double[4];public double[] y = new double[4];public double[] X = new double[4];public double[] Y = new double[4];public double[] Z = new double[4];public double[,] L = new double[N*2, 1];string output="外方位元素\t\n";Matrix XX;string[] a =File.ReadAllLines("d:\\控制点.txt");public void 计算N(){int cnt;using (StreamReader sr = new StreamReader(@"d:\控制点.txt")) {cnt = 0;while (sr.ReadLine() != null){cnt++;}// 这个cnt就是行数}N = cnt/5;}public void 计算初始值(){double temp=0;for (int i = 0; i <N; i++){temp+=X[i];}Xs =temp/ N;double tmp = 0;for (int i = 0; i < N; i++){tmp += Y[i];}Ys =tmp/ N;Zs = m*f;}public void 求改正数(){a1 = Math.Cos(q) * Math.Cos(k) - Math.Sin(q) * Math.Sin(w) * Math.Sin(k);a2 = -Math.Cos(q) * Math.Sin(k) - Math.Sin(q) * Math.Sin(w) * Math.Cos(k);a3 = -Math.Sin(q) * Math.Cos(w);b1 = Math.Cos(w) * Math.Sin(k);b2 = Math.Cos(w) * Math.Cos(k);b3 = -Math.Sin(w);c1 = Math.Sin(q) * Math.Cos(k) + Math.Cos(q) * Math.Sin(w) * Math.Sin(k);c2 = -Math.Sin(q) * Math.Sin(k) + Math.Cos(q) * Math.Sin(w) * Math.Cos(k);c3 = Math.Cos(q) * Math.Cos(w);int p = 0;int j = p;for (p = 0; p < a.Length; p += 5){x[j] = double.Parse(a[p])/1000;y[j] = double.Parse(a[p + 1])/1000;X[j] = double.Parse(a[p + 2]);Y[j] = double.Parse(a[p + 3]);Z[j] = double.Parse(a[p+ 4]);j++;}Matrix A = new Matrix(N*2, 6);int i = 0;int b = i;for (i = 0; i < N; i++){A.m_data[b, 0] = (a1 * f + a3 * x[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b, 1] = (b1 * f + b3 * x[i]) / (a3 * (X[i] - Xs) + b3 *(Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b, 2] = (c1 * f + c3 * x[i]) / (a3 * (X[i] - Xs) + b3 *(Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b, 3] = y[i] * Math.Sin(w) - (x[i] / f * (x[i] * Math.Cos(k) - y[i] * Math.Sin(k)) + f * Math.Cos(k)) * Math.Cos(w);A.m_data[b, 4] = -f * Math.Sin(k) - x[i] / f * (x[i] * Math.Sin(k) + y[i] * Math.Cos(k));A.m_data[b, 5] = y[i];A.m_data[b + 1, 0] = (a2 * f + a3 * y[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b + 1, 1] = (b2 * f + b3 * y[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b + 1, 2] = (c2 * f + c3 * y[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b + 1, 3] = -x[i] * Math.Sin(w) - (y[i] / f * (x[i] *Math.Cos(k) - y[i] * Math.Sin(k)) - f * Math.Sin(k)) * Math.Cos(w);A.m_data[b + 1, 4] = -f * Math.Cos(k) - y[i] / f * (x[i] *Math.Sin(k) + y[i] * Math.Cos(k));A.m_data[b + 1, 5] = -x[i];b += 2;}Matrix T = new Matrix(6, N*2);T = A.Transpose();Matrix AT = T * A;Matrix AA = AT.Inverse();Matrix P = AA * T;Matrix L = new Matrix(N*2, 1);int v = 0;int m = v;for (v = 0; v < N; v++){L.m_data[m, 0] = x[v] + f * (a1 * (X[v] - Xs) + b1 * (Y[v] - Ys) + c1 * (Z[v]- Zs)) / (a3 * (X[v] - Xs) + b3 * (Y[v] - Ys) + c3 * (Z[v] - Zs));L.m_data[m + 1, 0] = y[v] + f * (a2 * (X[v] - Xs) + b2 * (Y[v] - Ys) + c2 * (Z[v]- Zs)) / (a3 * (X[v] - Xs) + b3 * (Y[v] - Ys) + c3 * (Z[v] - Zs));m += 2;}XX = P * L;//计算外方位元素Xs += XX[0, 0];Ys += XX[1, 0];Zs += XX[2, 0];q += XX[3, 0];w += XX[4, 0];k += XX[5, 0];}public void 迭代(){求改正数();for (int i = 0; i < 6; i++){for (int j = 0; j < 1; j++){output += XX[i, j] + "\t\n";}}if (Math.Abs(XX[3, 0]) >= 0.000029 && Math.Abs(XX[4, 0]) >= 0.000029 && Math.Abs(XX[5,0]) >= 0.000029){for (int d = 1; d < s; d++){求改正数();for (int i = 0; i < 6; i++){for (int j = 0; j < 1; j++){output += XX[i, j]+ "\t\n";}}if (Math.Abs(XX[3, 0]) <= 0.000029 && Math.Abs(XX[4, 0]) <= 0.000029 &&Math.Abs(XX[5, 0]) <= 0.000029){输出();break;}}if (Math.Abs(XX[3, 0]) >= 0.000029 || Math.Abs(XX[4, 0]) >= 0.000029 ||Math.Abs(XX[5, 0]) >= 0.000029){MessageBox.Show("已达到指定迭代次数,迭代结束!!!");MessageBox.Show(output, "后方交会", MessageBoxButtons.OK,rmation);}}else{输出();}}public void 输出(){_Xs.Text = Xs.ToString();_Ys.Text = Ys.ToString();_Zs.Text = Zs.ToString();_q.Text = q.ToString();_w.Text = w.ToString();_k.Text = k.ToString();}private void button1_Click(object sender, EventArgs e) {try{f = double.Parse(textBox1.Text);}catch{MessageBox.Show("请先输入主距");}s = int.Parse(textBox2.Text);m = int.Parse(textBox3.Text);计算N();int i=0;int j = i;for ( i = 0; i < a.Length; i += 5){x[j] = double.Parse(a[i]);y[j] = double.Parse(a[i + 1]);X[j] = double.Parse(a[i + 2]);Y[j] = double.Parse(a[i + 3]);Z[j] = double.Parse(a[i + 4]);j++;}计算初始值();}private void button2_Click(object sender, EventArgs e){迭代();}private void button3_Click(object sender, EventArgs e){MessageBox.Show("请将点坐标文件保存到d盘根目录并保存为\"控制点 .txt\"\n要求每行一个值,五行表示一个点\n测绘101徐斌");}}}添加Matrix.cs类程序using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 后方交会1{public class Matrix{//构造方阵public Matrix(int row){m_data = new double[row, row]; }public Matrix(int row, int col) {m_data = new double[row, col]; }//复制构造函数public Matrix(Matrix m){int row = m.Row;int col = m.Col;m_data = new double[row, col]; for (int i = 0; i < row; i++) for (int j = 0; j < col; j++) m_data[i, j] = m.m_data[i, j];}//设为单位阵public void SetUnit(){for (int i = 0; i < m_data.GetLength(0); i++) for (int j = 0; j < m_data.GetLength(1); j++) m_data[i, j] = ((i == j) ? 1 : 0);}//设置元素值public void SetValue(double d){for (int i = 0; i < m_data.GetLength(0); i++) for (int j = 0; j < m_data.GetLength(1); j++) m_data[i, j] = d;}//返中行数public int Row{get{return m_data.GetLength(0);}}//返回列数public int Col{get{return m_data.GetLength(1);}}//重载索引 ,存取数据成员public double this[int row, int col] {get{return m_data[row, col];}set{m_data[row, col] = value;}}//初等变换对调两行:ri<-->rjpublic Matrix Exchange(int i, int j) {double temp;for (int k = 0; k < Col; k++){temp = m_data[i, k];m_data[i, k] = m_data[j, k];m_data[j, k] = temp;}return this;}//初等变换第index 行乘以mulMatrix Multiple(int index, double mul){for (int j = 0; j < Col; j++){m_data[index, j] *= mul;}return this;}//初等变换第src行乘以mul加到第index行Matrix MultipleAdd(int index, int src, double mul) {for (int j = 0; j < Col; j++){m_data[index, j] += m_data[src, j] * mul;}return this;}//transpose 转置public Matrix Transpose(){Matrix ret = new Matrix(Col, Row);for (int i = 0; i < Row; i++)for (int j = 0; j < Col; j++){ret[j, i] = m_data[i, j];}return ret;}//矩阵乘public static Matrix operator *(Matrix lhs, Matrix rhs){if (lhs.Col != rhs.Row) //异常{System.Exception e = new Exception("相乘的两个矩阵的行列数不匹配"); throw e;}Matrix ret = new Matrix(lhs.Row, rhs.Col);double temp;for (int i = 0; i < lhs.Row; i++){for (int j = 0; j < rhs.Col; j++){temp = 0;for (int k = 0; k < lhs.Col; k++){temp += lhs[i, k] * rhs[k, j];}ret[i, j] = temp;}}return ret;}//功能:返回列主元素的行号//参数:row为开始查找的行号//说明:在行号[row,Col)范围内查找第row列中绝对值最大的元素,返回所在行号int Pivot(int row){int index = row;for (int i = row + 1; i < Row; i++){if (m_data[i, row] > m_data[index, row])index = i;}return index;}//逆阵:使用矩阵的初等变换,列主元素消去法public Matrix Inverse(){if (Row != Col) //异常,非方阵{System.Exception e = new Exception("求逆的矩阵不是方阵");throw e;}Matrix tmp = new Matrix(this);Matrix ret = new Matrix(Row); //单位阵ret.SetUnit();int maxIndex;double dMul;for (int i = 0; i < Row; i++){maxIndex = tmp.Pivot(i);if (tmp.m_data[maxIndex, i] == 0){System.Exception e = new Exception("求逆的矩阵的行列式的值等于0,"); throw e;}if (maxIndex != i) //下三角阵中此列的最大值不在当前行,交换{tmp.Exchange(i, maxIndex);ret.Exchange(i, maxIndex);}ret.Multiple(i, 1 / tmp[i, i]); tmp.Multiple(i, 1 / tmp[i, i]); for (int j = i + 1; j < Row; j++) {dMul = -tmp[j, i] / tmp[i, i]; tmp.MultipleAdd(j, i, dMul);ret.MultipleAdd(j, i, dMul);}}for (int i = Row - 1; i > 0; i--) {for (int j = i - 1; j >= 0; j--) {dMul = -tmp[j, i] / tmp[i, i]; tmp.MultipleAdd(j, i, dMul);ret.MultipleAdd(j, i, dMul);}}return ret;}//是方阵吗,public bool IsSquare(){return Row == Col;}//是对称阵吗,public bool IsSymmetric(){if (Row != Col)return false;for (int i = 0; i < Row; i++)for (int j = i + 1; j < Col; j++) if (m_data[i, j] != m_data[j, i]) return false;return true;}//公有数据成员public double[,] m_data;}}4(实验结果四(实验总结此次实验让我深入了解单像空间后方交会的计算过程,加强了对空间后方交会基本公式和误差方程式,法线方程式的记忆。
单像空间后方交会实习报告
单像空间后方交会实习报告单像空间后方交会实习报告一、引言空间后方交会是摄影测量学中的一项重要内容,它能通过对已知控制点的旁边影像进行分析和计算,确定未知控制点的空间坐标,这在地图制作、城市规划、工程测量等领域有着广泛的应用。
本次实习旨在通过实际操作掌握空间后方交会的方法和技巧,进一步加深对摄影测量学的理解,并提升实际操作能力。
二、实习目的1. 学习空间后方交会的理论知识,了解其基本原理和计算方法。
2. 掌握使用数字相机采集控制点及待测控制点影像的技巧。
3. 熟练使用后方交会软件进行影像的处理和计算,得到待测控制点的空间坐标。
4. 分析实际数据的精度和误差,评估后方交会结果的可靠性。
三、实习过程1. 准备工作在实习开始前,我们需要准备好数字相机、相机标定板以及控制点和待测控制点的影像。
同时还需要安装并熟悉后方交会软件,以便后续处理和计算。
2. 影像采集首先,在实地选取控制点和待测控制点,并采用全站仪等测量仪器获取其地面坐标。
接着,通过相机标定板进行相机标定,获取相机内外参数。
然后,使用数字相机对控制点和待测控制点进行影像采集。
为了减小误差,我们要保证相机的光心与全站仪的标尺中心对准,并使用三脚架固定相机。
3. 影像的处理和计算将采集到的影像导入到后方交会软件中,根据相机内外参数和控制点的地面坐标,进行畸变校正和像点坐标的提取。
接下来,通过自动或手动方法选取控制点和待测控制点进行像点匹配。
通过匹配的像点坐标和已知控制点的地面坐标,利用后方交会公式进行计算,得到待测控制点的空间坐标。
4. 结果分析和评估对得到的结果进行精度分析,并评估其可靠性。
通过对比实测控制点的地面坐标与计算得到的空间坐标,计算精度检查,进一步评估后方交会结果的准确性。
同时,还要检查影像的质量和匹配的像点之间的差异,排除控制点标定、像点提取或匹配过程中出现的问题。
四、实习总结通过这次实习,我对空间后方交会的理论知识和实际操作有了更深入的了解。
摄影测量学实习报告4篇
摄影测量学实习报告摄影测量学实习报告精选4篇(一)实习报告:摄影测量学一、实习目的本次实习的主要目的是通过实际操作,了解摄影测量学的基本原理和方法,掌握航空摄影测量的流程和技术。
二、实习内容1. 学习基本理论知识通过课堂学习,了解摄影测量学的基本原理,学习航空摄影测量的相关知识,包括像空间、像对空间、光束法平差等。
2. 实地观摩航空摄影测量现场参观航空摄影测量实地测量现场,了解航空摄影测量的航摄设备和测量仪器的使用方法,观摩航摄过程,了解数据采集的流程。
3. 学习数据处理软件学习使用摄影测量数据处理软件,包括航空摄影测量数据处理软件和地理信息系统软件,学习数据处理的流程和方法。
4. 实际操作摄影测量针对实际问题,使用航空摄影测量设备进行实地测量,采集数据,并使用数据处理软件进行数据处理和分析,得出测量结果。
三、主要收获通过本次实习,我对摄影测量学有了更深入的了解和认识,掌握了航空摄影测量的基本原理和方法。
我学会了使用航空摄影测量设备进行实地测量,并熟练运用数据处理软件进行数据处理和分析。
在实践中,我进一步了解了数据采集的流程和数据处理的要点,提高了解决实际问题的能力。
四、存在问题在实习过程中,我发现自己在实际操作中出现了一些问题,比如摄影测量设备的操作不熟练,数据处理软件的使用不熟悉等。
这些问题需要进一步加强学习和实践,提高操作的熟练程度。
五、总结通过本次实习,我深入了解了摄影测量学的基本原理和方法,学会了使用航空摄影测量设备进行实地测量,并运用数据处理软件进行数据处理和分析。
这次实习加深了我对摄影测量学的理解,提高了解决实际问题的能力,并为今后的工作打下了坚实的基础。
摄影测量学实习报告精选4篇(二)在摄影测量实习期间,我有幸能够参与实践,并且从中获得了许多宝贵的经验和体会。
首先,实习期间我学会了如何使用各种摄影测量仪器和设备。
我了解了测量仪器的工作原理,并且学会了准确地操作它们。
通过实际操作,我对测量仪器的性能和特点有了更深入的了解,这对于我今后的工作会有很大帮助。
单向空间后方交会实习报告
一、实习目的本次实习的主要目的是通过单张影像的空间后方交会算法,掌握摄影测量学中的基本原理和方法,培养实际操作能力和理论联系实际的能力。
通过实习,要求学生了解空间后方交会的概念、原理和计算方法,熟练运用相关软件进行空间后方交会的实际操作,并对结果进行分析和评定。
二、实习内容1. 了解空间后方交会的基本概念:空间后方交会是一种摄影测量方法,通过分析单张影像上若干个控制点的地面坐标和像坐标,利用共线条件方程,求解影像的外方位元素。
2. 学习空间后方交会的原理:影像上的控制点与相机镜头中心形成共线方程,通过最小二乘法求解影像的外方位元素。
外方位元素包括六个参数:三个表示相机在三维空间中的位置,三个表示相机在三维空间中的姿态。
3. 掌握空间后方交会的计算方法:利用共线条件方程,通过最小二乘法求解外方位元素。
计算过程中需要注意控制点的选择、权重的分配和迭代求解的精度。
4. 熟悉空间后方交会的实际操作:使用相关软件(如MATLAB、ERDAS IMAGINE等)进行空间后方交会的实际操作,包括数据的输入、参数的设置和结果的输出。
5. 结果分析和评定:对空间后方交会的结果进行分析和评定,包括计算精度、误差分析和结果的可信度。
三、实习过程1. 理论学习和讨论:在学习空间后方交会的基本概念和原理的基础上,进行小组讨论,理解并掌握空间后方交会的计算方法。
2. 软件操作练习:在老师的指导下,使用相关软件进行空间后方交会的实际操作,熟悉软件的操作界面和功能。
3. 数据处理和计算:根据实习提供的数据,进行空间后方交会的计算,包括控制点的选择、权重的分配和迭代求解的过程。
4. 结果分析和评定:对空间后方交会的结果进行分析和评定,计算精度、误差分析和结果的可信度。
四、实习总结通过本次实习,我对空间后方交会的基本概念、原理和计算方法有了更深入的了解,掌握了相关软件的操作方法,并能够进行空间后方交会的实际操作。
在实习过程中,我学会了如何选择控制点、分配权重和判断迭代求解的精度。
后方交会实验报告
摄影测量学实验报告实验名称:空间后方交会班级:测绘工程12-1一.实验目的掌握运用空间后方交会求解外方元素的过程。
学会运用空间后方交会的原理,根据所给控制点的地面摄影测量坐标系坐标以及相应的像平面坐标系中的坐标,利用已知公式和计算机编程语言实现空间后方交会的过程,完成外方位元素的求解。
二.实验工具个人电脑,visual basic 6.0三.实验源代码Private Sub Command1_Click()Dim c(), kx(), ky(), l(), aa(), a11(), a12(), a13(), a14(), a15(), a16(), a21(), a22(), a23(), a24(), a25()Dim a26(), v(), mm(5)nn = Val(Text2.Text)nnt = nn - 1ReDim c(nnt, 5), kx(nnt), ky(nnt), l(2 * nnt + 1, 0), aa(2 * nnt + 1, 5), a11(nnt), a12(nnt), a13(nnt), a14(nnt), a15(nnt), a16(nnt), a21(nnt), a22(nnt), a23(nnt), a24(nnt), a25(nnt)ReDim a26(nnt)f = Val(Text1.Text)fei = 0#w = 0#k = 0#If Label2.Caption = "" ThenMsgBox "尚未读取文本", , "提示信息"Elsea = Split(Label2.Caption, vbCrLf)For i = 0 To nnthh = Split(a(i), " ")For j = 0 To 5c(i, j) = Val(hh(j))Next jNext im1 = (c(0, 1) - c(1, 1)) ^ 2 + (c(0, 2) - c(1, 2)) ^ 2 m2 = (c(0, 3) - c(1, 3)) ^ 2 + (c(0, 4) - c(1, 4)) ^ 2 m = Sqr(m2 / m1)zs = m * fxs = 0ys = 0For i = 0 To nntxs = xs + c(i, 3)ys = xs + c(i, 4)Next ixs = xs / nnys = ys / nnDoa1 = Cos(fei) * Cos(k) - Sin(fei) * Sin(w) * Sin(k)a2 = -Cos(fei) * Sin(k) - Sin(fei) * Sin(w) * Cos(k)a3 = -Sin(fei) * Cos(w)b1 = Cos(w) * Sin(k)b2 = Cos(w) * Cos(k)b3 = -Sin(w)c1 = Sin(fei) * Cos(k) + Cos(fei) * Sin(w) * Sin(k)c2 = -Sin(fei) * Sin(k) + Cos(fei) * Sin(w) * Cos(k)c3 = Cos(fei) * Cos(w)For i = 0 To nntkx(i) = -f * (a1 * (c(i, 3) - xs) + b1 * (c(i, 4) - ys) + c1 * (c(i, 5) - zs)) / (a3 * (c(i, 3) - xs) + b3 * (c(i, 4) - ys) + c3 * (c(i, 5) - zs))ky(i) = -f * (a2 * (c(i, 3) - xs) + b2 * (c(i, 4) - ys) + c2 * (c(i, 5) - zs)) / (a3 * (c(i, 3) - xs) + b3 * (c(i, 4) - ys) + c3 * (c(i, 5) - zs))Next iFor i = 0 To nntl(i * 2, 0) = c(i, 1) - kx(i)l(i * 2 + 1, 0) = c(i, 2) - ky(i)Next iFor i = 0 To nntzb = (a3 * (c(i, 3) - xs) + b3 * (c(i, 4) - ys) + c3 * (c(i, 5) - zs))a11(i) = (a1 * f + a3 * c(i, 1)) / zba12(i) = (b1 * f + b3 * c(i, 1)) / zba13(i) = (c1 * f + c3 * c(i, 1)) / zba21(i) = (a2 * f + a3 * c(i, 2)) / zba22(i) = (b2 * f + b3 * c(i, 2)) / zba23(i) = (c2 * f + c3 * c(i, 2)) / zba14(i) = c(i, 2) * Sin(w) - (c(i, 1) * (c(i, 1) * Cos(k) - c(i, 2) * Sin(k)) / f + f * Cos(k)) * Cos(w)a15(i) = -f * Sin(k) - c(i, 1) / f * (c(i, 1) * Sin(k) + c(i, 2) * Cos(k))a16(i) = c(i, 2)a24(i) = -c(i, 1) * Sin(w) - (c(i, 2) * (c(i, 1) * Cos(k) - c(i, 2) * Sin(k)) / f - f * Sin(k)) * Cos(w)a25(i) = -f * Cos(k) - c(i, 2) / f * (c(i, 1) * Sin(k) + c(i, 2) * Cos(k))a26(i) = -c(i, 1)Next iFor i = 0 To nntaa(2 * i, 0) = a11(i)aa(2 * i, 1) = a12(i)aa(2 * i, 2) = a13(i)aa(2 * i, 3) = a14(i)aa(2 * i, 4) = a15(i)aa(2 * i, 5) = a16(i)aa(2 * i + 1, 0) = a21(i)aa(2 * i + 1, 1) = a22(i)aa(2 * i + 1, 2) = a23(i)aa(2 * i + 1, 3) = a24(i)aa(2 * i + 1, 4) = a25(i)aa(2 * i + 1, 5) = a26(i)Next iReDim at(5, 2 * nnt + 1), ata(5, 5), nata(5, 5), nataat(5, 2 * nnt + 1), detx(5, 0)at = zhuanzhi(aa)ata = cheng(at, aa)nata = qiuni(ata)nataat = cheng(nata, at)detx = cheng(nataat, l)xs = xs + detx(0, 0)ys = ys + detx(1, 0)zs = zs + detx(2, 0)fei = fei + detx(3, 0)w = w + detx(4, 0)k = k + detx(5, 0)Loop Until Abs(detx(0, 0)) < 0.000001 And Abs(detx(1, 0)) < 0.000001 And Abs(detx(2, 0)) < 0.000001 And Abs(detx(3, 0)) <0.000001 And Abs(detx(4, 0)) < 0.000001 And Abs(detx(5, 0)) < 0.000001ReDim v(2 * nnt + 1, 0), ax(2 * nnt + 1, 0)ax = cheng(aa, detx)v = jian(ax, l)vv = 0For i = 0 To 2 * nnt + 1vv = v(i, 0) ^ 2 + vvNext imo = Sqr(vv / (2 * nn - 6))For i = 0 To 5mm(i) = mo * Sqr(nata(i, i))Next itxtshow.Text = txtshow.Text & "外方元素为中误差为" & vbCrLf & "Xs " & xs & " " & mm(0) & vbCrLf & "Ys " & ys & " " & mm(1) & vbCrLf & "Zs " & zs & " " & mm(2) & vbCrLf & "Φ" & fei & " " & mm(3) & vbCrLf & "W " & w & " " & mm(4) & vbCrLf & "K " & k & " " & mm(5) & vbCrLf & vbCrLftxtshow.Text = txtshow.Text & " 报告时间:" & Year(Date) & Format(Month(Date), "00") & Format(Day(Date), "00") & vbCrLftxtshow.Text = txtshow.Text & " 审批人签字:"End IfEnd SubPrivate Sub Command2_Click()CommonDialog1.Filter = "文档|*.txt"CommonDialog1.ShowOpenLabel1.Caption = CommonDialog1.FileNameEnd SubPrivate Sub Command3_Click()Label2.Caption = ""Dim mylineIf Label1.Caption <> "" ThenOpen Label1.Caption For Input As #1Do While Not EOF(1)Line Input #1, mylineLabel2.Caption = Label2.Caption + myline + vbCrLfLoopClose #1End SubPrivate Sub Command4_Click()CommonDialog1.DialogTitle = "保存文件" CommonDialog1.Filter = "文档|*.doc" CommonDialog1.Action = 2If CommonDialog1.FileName <> "" ThenOpen CommonDialog1.FileName For Output As #1Print #1, txtshow.TextClose #1End IfEnd SubPrivate Sub Command5_Click()txtshow.Text = ""End SubPrivate Sub Command6_Click()If MsgBox("确认退出程序?", 68, "提示信息") = 6 Then EndEnd IfEnd SubPublic Function cheng(a(), b())ReDim s(UBound(a, 1), UBound(b, 2))If UBound(a, 2) <> UBound(b, 1) Then MsgBox "不符合乘法要求"EndElseFor i = 0 To UBound(s, 1)For j = 0 To UBound(s, 2)s(i, j) = 0For Q = 0 To UBound(a, 2)s(i, j) = Val(s(i, j)) + Val(a(i, Q)) * Val(b(Q, j)) Next QNext jNext icheng = sEnd IfEnd FunctionPublic Function zhuanzhi(a())Dim sReDim s(UBound(a, 2), UBound(a, 1))For i = 0 To UBound(a, 1)For j = 0 To UBound(a, 2)s(j, i) = a(i, j)Next jNext izhuanzhi = sEnd FunctionPublic Function qiuni(m())Dim s()If UBound(m, 1) <> UBound(m, 2) Then MsgBox ("求逆错误")EndElsen = UBound(m, 1)Dim e(), m1, m2, m3ReDim e(n, 2 * n + 1)ReDim s(n, 2 * n + 1)For i = 0 To nFor j = 0 To ne(i, j) = m(i, j)Next jNext iFor i = 0 To nFor j = n + 1 To 2 * n + 1e(i, j) = 0Next jNext iFor i = 0 To ne(i, n + i + 1) = 1 Next iFor t = 0 To nIf e(t, t) = 0 ThenFor i = t + 1 To nFor j = 0 To 2 * n + 1 s(i, j) = e(i, j)e(i, j) = e(t, j)e(t, j) = s(t, j)Next jIf e(t, t) <> 0 Then GoTo daima1End IfNext iIf e(t, t) = 0 Then MsgBox ("求逆错误") EndGoTo lastlineEnd Ifdaima1:m1 = e(t, t)For j = 0 To 2 * n + 1e(t, j) = e(t, j) / m1Next jFor i = t + 1 To nm2 = e(i, t)For j = 0 To 2 * n + 1e(i, j) = e(i, j) - m2 * e(t, j) Next jNext iNext tFor t = 0 To n - 1For i = t + 1 To nm3 = e(t, i)For j = 0 To 2 * n + 1e(t, j) = e(t, j) - m3 * e(i, j) Next jNext iNext tReDim c(n, n)For i = 0 To nFor j = 0 To nc(i, j) = Round(e(i, j + n + 1), 2)Next jNext iqiuni = cEnd Iflastline:End FunctionPublic Function jian(a(), b())Dim s, tReDim s(UBound(a, 1), UBound(a, 2))If UBound(a, 1) <> UBound(b, 1) Or UBound(a, 2) <> UBound(b, 2) ThenMsgBox "不符合减法要求"EndElseFor i = 0 To UBound(a, 1)For j = 0 To UBound(a, 2)s(i, j) = Val(a(i, j)) - Val(b(i, j))Next jNext ijian = sEnd IfEnd FunctionPrivate Sub Form_Load()Form1.Image1.Top = 0Form1.Image1.Left = 0Form1.Image1.Width = Form1.Width Form1.Image1.Height = Form1.Height End SubPrivate Sub Form_Resize()Form1.Image1.Top = 0Form1.Image1.Left = 0Form1.Image1.Width = Form1.Width Form1.Image1.Height = Form1.Height End Sub四.实验框图获取已知数据量测控制点的像点坐标确定未知数初始值五.实验数据1 -0.08615 -0.06899 36589.41 25273.32 2195.172 -0.05340 0.08221 37631.08 31324.51 728.693 -0.01478 -0.07663 39100.97 24934.98 2386.54 0.01046 0.06443 40426.54 30319.81 757.31 六.实验截图七.实验心得此次实验让我更加了解空间后方交会的计算过程,加强了对空间后方交会基本公式和误差方程式,法线方程式的记忆。
空间后方交会实验报告
空间后方交会实验报告1. 引言空间后方交会是一种常用的测量手段,用于确定目标在空间中的坐标位置。
本实验旨在通过空间后方交会实验,了解空间测量的基本原理和方法,并锻炼我们的观察、计算和推理能力。
2. 实验目的- 学习和掌握空间后方交会实验的基本原理和步骤;- 熟悉使用测量仪器和处理数据的方法;- 锻炼团队合作和问题解决能力。
3. 实验原理空间后方交会利用多个测量设备,通过测量目标物体在不同位置上的观测数据,计算出目标物体的空间坐标。
主要基于以下原理:- 多点定位原理:通过多次测量目标物体在不同位置上的观测数据,可以确定目标物体的坐标位置;- 观测误差校正原理:由于观测仪器的误差存在,需要对观测数据进行误差校正,以提高测量精度。
4. 实验步骤4.1 实验准备- 确定实验区域,搭建固定的测量基准点;- 使用全站仪对测量基准点进行校准,确保测量精度;- 准备至少三个可移动的晶体棱镜,用于固定在目标物体上;- 准备笔记本电脑和相应的测量软件,用于数据处理和计算。
4.2 实验操作1. 将晶体棱镜固定在目标物体上,并确定测量的起始位置;2. 使用全站仪测量目标物体在不同位置上的观测数据,包括水平角、垂直角和斜距;3. 将观测数据导入计算软件,并进行误差校正;4. 根据误差校正后的观测数据,计算目标物体的空间坐标;5. 重复步骤2至4,获得更多的观测数据,以提高计算精度;6. 对多次观测结果进行平均计算,得到最终的目标物体空间坐标;7. 将计算结果进行分析和评估,确定测量精度和可靠度。
5. 实验结果与讨论经过实验操作和数据处理,获得了目标物体的空间坐标。
通过对测量结果的分析和比较,可以得出以下结论:- 目标物体的空间坐标可以通过空间后方交会实验进行测量和计算;- 观测数据的误差校正对测量结果的精度和可靠度具有重要影响;- 重复观测和平均计算可以提高测量结果的准确性。
6. 实验总结空间后方交会实验是一种常用的测量手段,可以用于测量目标物体在空间中的坐标位置。
摄影测量实验报告(空间后方交会—前方交会)
摄影测量实验报告(空间后⽅交会—前⽅交会)空间后⽅交会-空间前⽅交会程序编程实验⼀.实验⽬的要求掌握运⽤空间后⽅交会-空间前⽅交会求解地⾯点的空间位置。
学会运⽤空间后⽅交会的原理,根据所给控制点的地⾯摄影测量坐标系坐标以及相应的像平⾯坐标系中的坐标,利⽤计算机编程语⾔实现空间后⽅交会的过程,完成所给像对中两张像⽚各⾃的外⽅位元素的求解。
然后根据空间后⽅交会所得的两张像⽚的内外⽅位元素,利⽤同名像点在左右像⽚上的坐标,求解其对应的地⾯点在摄影测量坐标系中的坐标,并完成精度评定过程,利⽤计算机编程语⾔实现此过程。
⼆.仪器⽤具计算机、编程软件(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));输⼊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%%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;save '左⽚外⽅位元素为.txt' WF -ascii %将计算所得的外⽅位元素存⼊到.txt% ⽂件中for i=1:cg1(i,1)=g1(i,1)+V1(2*i-1);g1(i,2)=g1(i,2)+V1(2*i);endsave '左⽚像点坐标.txt' g1 -asciixs0=(G(2,1)+G(4,1))/2;ys0=(G(2,2)+G(4,2))/2;[Xs2,Ys2,Zs2,q2,w2,k2 R]=houfangjh(g2,xs0,ys0); %对右⽚调⽤后⽅交会函数R2=R; V2=V;WF2=WF;QXX2=QXX;save '右⽚外⽅位元素为.txt' WF –ascii %将计算所得的外⽅位元素存⼊到.txt% ⽂件中for i=1:cg2(i,1)=g2(i,1)+V2(2*i-1);g2(i,2)=g2(i,2)+V2(2*i);endsave '右⽚像点坐标.txt' g2 -asciiX1=zeros(a,3);X2=zeros(a,3);xx=zeros(3,1);xxx=zeros(3,1);for i=1:ass=[b1(i,1);b1(i,2);-f];dd=[b2(i,1);b2(i,2);-f];xx=R1*ss;X1(i,:)=xx';xxx=R2*dd;X2(i,:)=xxx';endglobal Xs1 Xs2 Ys1 Ys2 Zs1 Zs2;BX=Xs2-Xs1;BY=Ys2-Ys1;BZ=Zs2-Zs1;global N1 N2;N1=zeros(1,a);N2=zeros(1,a);for i=1:aN1(1,i)=(BX*X2(i,3)-BZ*X2(i,1))/(X1(i,1)*X2(i,3)-X2(i,1)*X1(i,3));N2(1,i)=(BX*X1(i,3)-BZ*X1(i,1))/(X1(i,1)*X2(i,3)-X2(i,1)*X1(i,3));end %计算投影系数,并计算五点的三维坐标global XYZ;XYZ=zeros(a,3);for i=1:aXYZ(i,1)=Xs1+N1(1,i)*X1(i,1);XYZ(i,2)=((Ys1+N1(1,i)*X1(i,2))+(Ys2+N2(1,i)*X2(i,2)))/2;enddisp('左⽚外⽅位元素为:Xs Ys Zs ψωκ');disp(WF1);disp('左⽚外⽅位元素协因素阵为:');disp(QXX1);disp('左⽚像点坐标为:')disp(g1)disp('右⽚外⽅位元素为:Xs Ys Zs ψωκ');disp(WF2);disp('右⽚外⽅位元素协因素阵为:')disp(QXX2)disp('右⽚像点坐标为:')disp(g2)disp('计算所得点摄影测量坐标(X,Y,Z)为:');disp(XYZ);save 'XYZ.txt' XYZ -ascii %将计算所得结果保存到XYZ.txt⽂件中%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [Xs,Ys,Zs,q,w,k R]=houfangjh(g1,Xs0,Ys0) %计算像⽚外⽅位元素%%%%%%%%%%global f G m c b1 b2;f=0.152;Xs=Xs0;Ys=Ys0;Zs=m*f+G(1,3);q=0;w=0;k=0;while 1 %实现⼀个永真循环,是改正数⼩于限差以后跳出循环a1=cos(q)*cos(k)-sin(q)*sin(w)*sin(k);a2=-cos(q)*sin(k)-sin(q)*sin(w)*cos(k);a3=-sin(q)*cos(w);b1_=cos(w)*sin(k);b2_=cos(w)*cos(k);b3=-sin(w);c1=sin(q)*cos(k)+cos(q)*sin(w)*sin(k);c2=-sin(q)*sin(k)+cos(q)*sin(w)*cos(k);c3=cos(q)*cos(w);R=[a1,a2,a3;b1_,b2_,b3;c1,c2,c3];for i=1:caX(i)=a1*(G(i,1)-Xs)+b1_*(G(i,2)-Ys)+c1*(G(i,3)-Zs);aY(i)=a2*(G(i,1)-Xs)+b2_*(G(i,2)-Ys)+c2*(G(i,3)-Zs);aZ(i)=a3*(G(i,1)-Xs)+b3*(G(i,2)-Ys)+c3*(G(i,3)-Zs);endxj=[];yj=[];for i=1:cxj(i)=-f*aX(i)/aZ(i);yj(i)=-f*aY(i)/aZ(i);enda11=[];a12=[];a13=[];a14=[];a15=[];a16=[];a21=[];a22=[];a23=[];a24=[];a25=[];a26=[];for i=1:ca11(i)=(a1*f+a3*g1(i,1))/aZ(i);a12(i)=(b1_*f+b3*g1(i,1))/aZ(i);a13(i)=(c1*f+c3*g1(i,1) )/aZ(i);a21(i)=(a2*f+a3*g1(i,2))/aZ(i);a22(i)=(b2_*f+b3*g1(i,2))/aZ(i);a23(i)=(c2*f+c3*g1(i,2) )/aZ(i);a14(i)=g1(i,2)*sin(w)-(g1(i,1)*(g1(i,1)*cos(k)-g1(i,2)*sin(k))/f+f*cos(k))*cos(w);a15(i)=-f*sin(k)-g1(i,1)*(g1(i,1)*sin(k)+g1(i,2)*cos(k))/f;a16(i)=g1(i,2);a24(i)=-g1(i,1)*sin(w)-(g1(i,2)*(g1(i,1)*cos(k)-g1(i,2)*sin(k))/f-f*sin(k))*cos(w);a25(i)=-f*cos(k)-g1(i,2)*(g1(i,1)*sin(k)+g1(i,2)*cos(k))/f;a26(i)=-g1(i,1);endlx=[];ly=[];for i=1:clx(i)=g1(i,1)-xj(i);ly(i)=g1(i,2)-yj(i);endA=zeros(2*c,6);for i=1:cA(2*i-1,1)=a11(i);A(2*i-1,2)=a12(i);A(2*i-1,3)=a13(i);A(2*i-1,4)=a14(i);A(2*i-1,5)=a15 (i);A(2*i-1,6)=a16(i); A(2*i,1)=a21(i); A(2*i,2)=a22(i); A(2*i,3)=a23(i); A(2*i,4)=a24(i); A(2*i,5)=a25(i); A(2*i,6)=a26(i);endL=zeros(2*c,1);for i=1:cL(2*i-1,1)=lx(i);endX=inv((A')*A)*(A')*L;Xs=Xs+X(1,1);Ys=Ys+X(2,1);Zs=Zs+X(3,1);q=q+X(4,1);w=w+X(5,1);k=k+X(6,1);Xabs=abs(X);aaa=max(Xabs);if aaa<0.00003 %当改正数中绝对值最⼤的改正数⼩于限差0.00003 break; %后跳出循环,计算结果已经收敛endendglobal V;V=L';global WF QXX;WF(1)=Xs;WF(2)=Ys;WF(3)=Zs;WF(4)=q;WF(5)=w;WF(6)=k;QXX=A'*A;六.实验结果左⽚外⽅位元素Xs,Ys,Zs,ψ、ω、κ、为:5.0001950e+003 5.0007250e+003 2.0201583e+003 -7.2888190e-005 2.8193877e-002 9.5130388e-002左⽚外⽅位元素协因素阵为:4.0166895e-008 -3.7263703e-010 1.3218695e-008 7.0720033e-005 1.0001730e-007 -2.5748604e-006-3.7263703e-010 4.0032797e-008 2.6568407e-009 -2.1103715e-007 7.7772275e-005 1.9993587e-0051.3218695e-0082.6568407e-009 1.7931301e-0083.1008915e-005 6.6697659e-006 5.6403374e-0077.0720033e-005 -2.1103715e-007 3.1008915e-005 1.3087511e-001 1.0148977e-003 -1.9981396e-003 1.0001730e-007 7.7772275e-005 6.6697659e-006 1.0148977e-003 1.5539404e-001 3.0264331e-002-2.5748604e-006 1.9993587e-005 5.6403374e-007 -1.9981396e-003 3.0264331e-002 4.0721943e-002左⽚外⽅位元素Xs,Ys,Zs,ψ、ω、κ、为:5.8967023e+003 5.0687355e+003 2.0506347e+003 1.4337709e-002 4.6257617e-0021.1037952e-001右⽚外⽅位元素协因素阵为:3.9305329e-0084.9400147e-010 -1.0339207e-008 6.8065940e-005 -4.2504770e-007 1.8461496e-0064.9400147e-010 3.9051893e-008 3.3958896e-011 -3.9945442e-008 7.6312421e-005 -1.6453951e-005-1.0339207e-008 3.3958896e-011 1.5155886e-008 -2.3705097e-005 3.5940467e-007 -7.3527082e-007 6.8065940e-005 -3.9945442e-008 -2.3705097e-005 1.2229164e-001 -2.3449223e-003 4.8281474e-003-4.2504770e-007 7.6312421e-005 3.5940467e-007 -2.3449223e-003 1.5233230e-001 -2.5374659e-0022.5374659e-0023.6794789e-002GCP在左⽚和右⽚改正后的坐标(x,y)为:1.6019582e-002 7.9954660e-002 -7.3934212e-002 7.8699356e-0028.8559633e-002 8.1141190e-002 -5.2455612e-003 7.8187184e-0021.3352398e-002 -7.9378247e-002 -7.9125440e-002 -7.8877760e-0028.2242309e-002 -8.0017749e-002 -9.8858970e-003 -8.0086832e-002单位权中误差为:±1.515610577029578e-005所求地⾯点的三维坐标(X, Y, Z)为:5.4310348e+003 5.8851463e+003 5.4831646e+0025.1473645e+003 5.0555934e+003 4.8499600e+0025.4957931e+003 5.0826911e+003 5.0668967e+0025.8442434e+003 5.1098033e+003 5.3025650e+0025.5603279e+003 4.2870779e+003 4.6536459e+002七.⼼得体会经过三周的努⼒,这个当初看来艰巨的任务终于在我的不懈努⼒下圆满的完成了。
摄影测量学空间后交-前交实验报告
中南大学本科生课程设计(实践)任务书、设计报告(摄影测量与遥感概论)题目:空间后方交会-前交院系:地球科学与信息物理学院班级:测绘1201班********学号:***********名:***二零一四年十一月一、实验目的通过对数字影像空间后交前交的程序设计实验,要求我们进一步理解和掌握影像外方位元素的有关理论、原理和方法。
利用计算机程序设计语言编写摄影测量空间交会软件进行快速确定影响的外方位元素及其精度,然后通过求得的外方位元素求解位置点的地面摄影测量坐标,达到通过摄影测量量测地面地理坐标的目的。
二、实验要求1.用C、VB、C++或MA TLAB语言编写空间后方交会-空间前方交会程序2.提交实习报告:程序框图、程序源代码、计算结果、体会3.计算结果:像点坐标、地面坐标、单位权中误差、外方位元素及其精度4.完成时间:11月11日前完成三、实验数据四、实验思路➢利用后方交会得出两张相片各自的外方位元素1)获取已知数据影响比例尺m,,内方位元素x0 、y0 、f ,控制点的地面摄影测量坐标Xtp, Ytp, Ztp2)量测控制点左片和右片的像点坐标 x,y3)确定未知数初值 Xs0, Ys0, Zs0, ω,φ,κ(线元素可用控制点均值代替,角元素可用0初始化),即:∑=Xtp X 41s0,∑=Ytp Y 41s0,f Z *m s =ω=0,φ=0,κ=0 4)计算旋转矩阵R5)利用共线方程逐点计算像点坐标的近似值 6)组成误差方程式并法化 7)解求外方位元素改正数8)检查迭代是否收敛(改正值是否小于某一特定常数) ➢ 利用解出的外方位元素进行前方交会1)获取已知数据x0 , y0 , f, XS1, YS1, ZS1,φ1,ω1,κ1 , XS2, YS2, ZS2,φ2,ω2,κ22)量测像点坐标 x1,y1 ,x2,y23)由外方位线元素计算基线分量BX, BY, BZ4)由外方位角元素计算像空间辅助坐标 X1, Y1, Z1 , X2, Y2, Z2 5)计算点投影系数 N1 , N2 6)计算地面坐标 XA, YA, ZA五、实验过程➢ 程序流程图此过程完成空间后方交会求解像片的外方位元素,其中改正数小于限差(0.00003,相当于0.1的角度值)为止。
摄影测量实习报告-单片空间后方交会8页word文档
摄影测量实习报告实习内容:单片空间后方交会编程实习者:李友兵学号:0810050121指导老师:张金平老师实习时间:2019.05.30——2019.06.03一、实习目的与任务此次摄影测量实习主要是要自主编程实现单像空间后方交会,通过已知的内方位元素和控制点像点坐标和地面坐标求解六个外方位元素,在此过程中深入理解单像空间后方交会的原理和对编程的熟悉和理解(我用的是C语言编程),和对时间的合理运用,对知识的综合运用,培养理论的实际运用能力,任务是在一个星期内自主完成。
二、单片空间后方交会理论基础单像空间后方交会:是通过以像点平面坐标为观测值,以控制点坐标为已知值,利用共线条件方程和最小二乘原理,运用间接平差方法,通过迭代求解6个外方位元素。
程序设计的思路与流程三、程序设计的思路与流程(编程框架和步骤)1、根据内方位元素和已知的数据将控制点的框标坐标转换为像平面坐标系坐标:x=x′-x0,y=y′-y02、确定未知数的初始值:角元素初始值κ0=ω0=Φ0=0;线元素初始值Zs0=H=mf,Xs0=(X1+X2+X3+X4)/4,Ys0=(Y1+Y2+Y3+Y4)/43、利用角元素初始值计算方向余弦值组成旋转矩阵Ra1=cosΦ*cosκ-sinΦ*sinω*sinκ,a2=-cosΦ*sinκ-sinΦ*sin ω*cosκ,a3=-sinΦ*cosωb1=cosω*sinκ,b2=cosω*cosκ,b3=-sinωc1=sinΦ*cosκ+cosΦ*sinω*sinκ,c2=-sinΦ*sinκ+cosΦ*sin ω*cosκ,c3=cosΦ*cosω4、逐点计算控制点的像点坐标的近似值,共线方程为:x=(-f*(a1*(X-Xs)+b1*(Y-Ys)+c1*(Z-Zs)))/(a3*(X-Xs)+b3*(Y-Ys) +c3*(Z-Zs))y=(-f*(a2*(X-Xs)+b2*(Y-Ys)+c2*(Z-Zs)))/(a3*(X-Xs)+b3*(Y-Ys) +c3*(Z-Zs))(x)=(-f*(a1*(X-Xs)+b1*(Y-Ys)+c1*(Z-Zs)))/(a3*(X-Xs)+b3*(Y-Y s)+c3*(Z-Zs))(y)=(-f*(a2*(X-Xs)+b2*(Y-Ys)+c2*(Z-Zs)))/(a3*(X-Xs)+b3*(Y-Y s)+c3*(Z-Zs))5、组成误差方程:Vx=a11*dXs+a12*dYs+a13*dZs+a14*dΦ+a15*dω+a16*dκ+(x)-xVy=a21*dXs+a22*dYs+a23*dZs+a24*dΦ+a25*dω+a26*dκ+(y)-y系数求解(是共线方程分别外方位元素求导,是共线方程线性化的系数):变量代换A= a1*(X-Xs)+b1*(Y-Ys)+c1*(Z-Zs)B= a2*(X-Xs)+b2*(Y-Ys)+c2*(Z-Zs)C= a3*(X-Xs)+b3*(Y-Ys)+c3*(Z-Zs)a11=(a1*f+a3*x)/C,a12=(b1*f+b3*x)/C,a13=(c1*f+c3*f)/C,a14=y *sinω-((x*(x*cosκ-y*sinκ))/f+f*cosκ)cosω,a15=-f*sin κ-(x*(x*sinκ+y*cosκ)/f),a16=ya21=(a2*f+a3*x)/C,a22=(b2*f+b3*x)/C,a23=(c2*f+c3*x)/C,a24=-xsinω-((x*(x*cosκ-y*sinκ))/f-f*sinκ)cosω,a25=-f*cosκ-(y*(x*sinκ+y*cosκ)/f),a26 =-x 误差方程的常系数(是像点坐标观测值与计算的近似值的差值):lx=x-(x) ,ly=y-(y)6、组成法方程,解求外方位元素改正数X=(A T A)-1A T L(A为误差方程的系数矩阵,L为误差方程的常系数矩阵,通过步骤5求得,此处先求A T A再求矩阵的逆矩阵,解得的改正数加上相应的近似值得到外方位元素新的近似值)7、检查计算是否收敛:将求得的外方位元素改正数与规定的限差比较,大于限差继续迭代,小于限差则终止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摄影测量学空间后方交会实验报告测绘101徐斌摄影测量学实验报告实验一、单像空间后方交会学院: 建测学院班级: 测绘101姓名: 徐斌学号: 26一( 实验目的1.深入了解单像空间后方交会的计算过程;2.加强空间后方交会基本公式和误差方程式,法线方程式的记忆;3.通过上机调试程序加强动手能力的培养。
二(实验原理以单幅影像为基础,从该影像所覆盖地面范围内若干控制点和相应点的像坐标量测值出发,根据共线条件方程,求解该影像在航空摄影时刻的相片外方位元素。
三(实验内容1.程序图框图2.实验数据(1)已知航摄仪内方位元素f,153.24mm,Xo,Yo,0。
限差0.1秒(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 4 10.46 64.43 40426.54 30319.81 757.313.实验程序Form1.cs 程序using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace 后方交会1{public partial class Form1 : Form {public Form1(){InitializeComponent();}public doublef,m,Xs, Ys, Zs,a1, a2, a3, b1, b2, b3, c1, c2, c3, q, w, k;public static int N,s;public double[] x = new double[4];public double[] y = new double[4];public double[] X = new double[4];public double[] Y = new double[4];public double[] Z = new double[4];public double[,] L = new double[N*2, 1];string output="外方位元素\t\n";Matrix XX;string[] a =File.ReadAllLines("d:\\控制点.txt");public void 计算N(){int cnt;using (StreamReader sr = new StreamReader(@"d:\控制点.txt")) {cnt = 0;while (sr.ReadLine() != null){cnt++;}// 这个cnt就是行数}N = cnt/5;}public void 计算初始值(){double temp=0;for (int i = 0; i <N; i++){temp+=X[i];}Xs =temp/ N;double tmp = 0;for (int i = 0; i < N; i++){tmp += Y[i];}Ys =tmp/ N;Zs = m*f;}public void 求改正数(){a1 = Math.Cos(q) * Math.Cos(k) - Math.Sin(q) * Math.Sin(w) * Math.Sin(k);a2 = -Math.Cos(q) * Math.Sin(k) - Math.Sin(q) * Math.Sin(w) * Math.Cos(k);a3 = -Math.Sin(q) * Math.Cos(w);b1 = Math.Cos(w) * Math.Sin(k);b2 = Math.Cos(w) * Math.Cos(k);b3 = -Math.Sin(w);c1 = Math.Sin(q) * Math.Cos(k) + Math.Cos(q) * Math.Sin(w) * Math.Sin(k);c2 = -Math.Sin(q) * Math.Sin(k) + Math.Cos(q) * Math.Sin(w) * Math.Cos(k);c3 = Math.Cos(q) * Math.Cos(w);int p = 0;int j = p;for (p = 0; p < a.Length; p += 5){x[j] = double.Parse(a[p])/1000;y[j] = double.Parse(a[p + 1])/1000;X[j] = double.Parse(a[p + 2]);Y[j] = double.Parse(a[p + 3]);Z[j] = double.Parse(a[p+ 4]);j++;}Matrix A = new Matrix(N*2, 6);int i = 0;int b = i;for (i = 0; i < N; i++){A.m_data[b, 0] = (a1 * f + a3 * x[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b, 1] = (b1 * f + b3 * x[i]) / (a3 * (X[i] - Xs) + b3 *(Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b, 2] = (c1 * f + c3 * x[i]) / (a3 * (X[i] - Xs) + b3 *(Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b, 3] = y[i] * Math.Sin(w) - (x[i] / f * (x[i] * Math.Cos(k) - y[i] * Math.Sin(k)) + f * Math.Cos(k)) * Math.Cos(w);A.m_data[b, 4] = -f * Math.Sin(k) - x[i] / f * (x[i] * Math.Sin(k) + y[i] * Math.Cos(k));A.m_data[b, 5] = y[i];A.m_data[b + 1, 0] = (a2 * f + a3 * y[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b + 1, 1] = (b2 * f + b3 * y[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b + 1, 2] = (c2 * f + c3 * y[i]) / (a3 * (X[i] - Xs) + b3 * (Y[i] - Ys) + c3 * (Z[i] - Zs));A.m_data[b + 1, 3] = -x[i] * Math.Sin(w) - (y[i] / f * (x[i] *Math.Cos(k) - y[i] * Math.Sin(k)) - f * Math.Sin(k)) * Math.Cos(w);A.m_data[b + 1, 4] = -f * Math.Cos(k) - y[i] / f * (x[i] *Math.Sin(k) + y[i] * Math.Cos(k));A.m_data[b + 1, 5] = -x[i];b += 2;}Matrix T = new Matrix(6, N*2);T = A.Transpose();Matrix AT = T * A;Matrix AA = AT.Inverse();Matrix P = AA * T;Matrix L = new Matrix(N*2, 1);int v = 0;int m = v;for (v = 0; v < N; v++){L.m_data[m, 0] = x[v] + f * (a1 * (X[v] - Xs) + b1 * (Y[v] - Ys) + c1 * (Z[v]- Zs)) / (a3 * (X[v] - Xs) + b3 * (Y[v] - Ys) + c3 * (Z[v] - Zs));L.m_data[m + 1, 0] = y[v] + f * (a2 * (X[v] - Xs) + b2 * (Y[v] - Ys) + c2 * (Z[v]- Zs)) / (a3 * (X[v] - Xs) + b3 * (Y[v] - Ys) + c3 * (Z[v] - Zs));m += 2;}XX = P * L;//计算外方位元素Xs += XX[0, 0];Ys += XX[1, 0];Zs += XX[2, 0];q += XX[3, 0];w += XX[4, 0];k += XX[5, 0];}public void 迭代(){求改正数();for (int i = 0; i < 6; i++){for (int j = 0; j < 1; j++){output += XX[i, j] + "\t\n";}}if (Math.Abs(XX[3, 0]) >= 0.000029 && Math.Abs(XX[4, 0]) >= 0.000029 && Math.Abs(XX[5,0]) >= 0.000029){for (int d = 1; d < s; d++){求改正数();for (int i = 0; i < 6; i++){for (int j = 0; j < 1; j++){output += XX[i, j]+ "\t\n";}}if (Math.Abs(XX[3, 0]) <= 0.000029 && Math.Abs(XX[4, 0]) <= 0.000029 &&Math.Abs(XX[5, 0]) <= 0.000029){输出();break;}}if (Math.Abs(XX[3, 0]) >= 0.000029 || Math.Abs(XX[4, 0]) >= 0.000029 ||Math.Abs(XX[5, 0]) >= 0.000029){MessageBox.Show("已达到指定迭代次数,迭代结束!!!");MessageBox.Show(output, "后方交会", MessageBoxButtons.OK,rmation);}}else{输出();}}public void 输出(){_Xs.Text = Xs.ToString();_Ys.Text = Ys.ToString();_Zs.Text = Zs.ToString();_q.Text = q.ToString();_w.Text = w.ToString();_k.Text = k.ToString();}private void button1_Click(object sender, EventArgs e) {try{f = double.Parse(textBox1.Text);}catch{MessageBox.Show("请先输入主距");}s = int.Parse(textBox2.Text);m = int.Parse(textBox3.Text);计算N();int i=0;int j = i;for ( i = 0; i < a.Length; i += 5){x[j] = double.Parse(a[i]);y[j] = double.Parse(a[i + 1]);X[j] = double.Parse(a[i + 2]);Y[j] = double.Parse(a[i + 3]);Z[j] = double.Parse(a[i + 4]);j++;}计算初始值();}private void button2_Click(object sender, EventArgs e){迭代();}private void button3_Click(object sender, EventArgs e){MessageBox.Show("请将点坐标文件保存到d盘根目录并保存为\"控制点 .txt\"\n要求每行一个值,五行表示一个点\n测绘101徐斌");}}}添加Matrix.cs类程序using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 后方交会1{public class Matrix{//构造方阵public Matrix(int row){m_data = new double[row, row]; }public Matrix(int row, int col) {m_data = new double[row, col]; }//复制构造函数public Matrix(Matrix m){int row = m.Row;int col = m.Col;m_data = new double[row, col]; for (int i = 0; i < row; i++) for (int j = 0; j < col; j++) m_data[i, j] = m.m_data[i, j];}//设为单位阵public void SetUnit(){for (int i = 0; i < m_data.GetLength(0); i++) for (int j = 0; j < m_data.GetLength(1); j++) m_data[i, j] = ((i == j) ? 1 : 0);}//设置元素值public void SetValue(double d){for (int i = 0; i < m_data.GetLength(0); i++) for (int j = 0; j < m_data.GetLength(1); j++) m_data[i, j] = d;}//返中行数public int Row{get{return m_data.GetLength(0);}}//返回列数public int Col{get{return m_data.GetLength(1);}}//重载索引 ,存取数据成员public double this[int row, int col] {get{return m_data[row, col];}set{m_data[row, col] = value;}}//初等变换对调两行:ri<-->rjpublic Matrix Exchange(int i, int j) {double temp;for (int k = 0; k < Col; k++){temp = m_data[i, k];m_data[i, k] = m_data[j, k];m_data[j, k] = temp;}return this;}//初等变换第index 行乘以mulMatrix Multiple(int index, double mul){for (int j = 0; j < Col; j++){m_data[index, j] *= mul;}return this;}//初等变换第src行乘以mul加到第index行Matrix MultipleAdd(int index, int src, double mul) {for (int j = 0; j < Col; j++){m_data[index, j] += m_data[src, j] * mul;}return this;}//transpose 转置public Matrix Transpose(){Matrix ret = new Matrix(Col, Row);for (int i = 0; i < Row; i++)for (int j = 0; j < Col; j++){ret[j, i] = m_data[i, j];}return ret;}//矩阵乘public static Matrix operator *(Matrix lhs, Matrix rhs){if (lhs.Col != rhs.Row) //异常{System.Exception e = new Exception("相乘的两个矩阵的行列数不匹配"); throw e;}Matrix ret = new Matrix(lhs.Row, rhs.Col);double temp;for (int i = 0; i < lhs.Row; i++){for (int j = 0; j < rhs.Col; j++){temp = 0;for (int k = 0; k < lhs.Col; k++){temp += lhs[i, k] * rhs[k, j];}ret[i, j] = temp;}}return ret;}//功能:返回列主元素的行号//参数:row为开始查找的行号//说明:在行号[row,Col)范围内查找第row列中绝对值最大的元素,返回所在行号int Pivot(int row){int index = row;for (int i = row + 1; i < Row; i++){if (m_data[i, row] > m_data[index, row])index = i;}return index;}//逆阵:使用矩阵的初等变换,列主元素消去法public Matrix Inverse(){if (Row != Col) //异常,非方阵{System.Exception e = new Exception("求逆的矩阵不是方阵");throw e;}Matrix tmp = new Matrix(this);Matrix ret = new Matrix(Row); //单位阵ret.SetUnit();int maxIndex;double dMul;for (int i = 0; i < Row; i++){maxIndex = tmp.Pivot(i);if (tmp.m_data[maxIndex, i] == 0){System.Exception e = new Exception("求逆的矩阵的行列式的值等于0,"); throw e;}if (maxIndex != i) //下三角阵中此列的最大值不在当前行,交换{tmp.Exchange(i, maxIndex);ret.Exchange(i, maxIndex);}ret.Multiple(i, 1 / tmp[i, i]); tmp.Multiple(i, 1 / tmp[i, i]); for (int j = i + 1; j < Row; j++) {dMul = -tmp[j, i] / tmp[i, i]; tmp.MultipleAdd(j, i, dMul);ret.MultipleAdd(j, i, dMul);}}for (int i = Row - 1; i > 0; i--) {for (int j = i - 1; j >= 0; j--) {dMul = -tmp[j, i] / tmp[i, i]; tmp.MultipleAdd(j, i, dMul);ret.MultipleAdd(j, i, dMul);}}return ret;}//是方阵吗,public bool IsSquare(){return Row == Col;}//是对称阵吗,public bool IsSymmetric(){if (Row != Col)return false;for (int i = 0; i < Row; i++)for (int j = i + 1; j < Col; j++) if (m_data[i, j] != m_data[j, i]) return false;return true;}//公有数据成员public double[,] m_data;}}4(实验结果四(实验总结此次实验让我深入了解单像空间后方交会的计算过程,加强了对空间后方交会基本公式和误差方程式,法线方程式的记忆。