前方后方空间交会实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学
本科生课程设计(实践)任务书、设计报告 (摄影测量与遥感概论)
题目空间后方-前方交会
学生姓名
指导教师邹峥嵘
学院地球科学与信息物理学院
专业班级测绘0902班
学生学号
一、实验目的
通过对数字影像空间后交前交的程序设计实验,要求我们进一步理解和掌握影像外方位元素的有关理论、原理和方法。利用计算机程序设计语言编写摄影测量空间交会软件进行快速确定影像的外方位元素及其精度,然后通过求得的外方位元素求解未知点的地面摄影测量坐标,达到通过摄影测量量测地面地理数据的目的。
二、实验要求
➢用C、VB或者Matlab编写空间后方交会-前方交会计算机程序。➢提交实验报告:程序框图,程序源代码、计算结果及体会。
➢计算结果:地面点坐标、外方位元素及精度。
➢完成时间:2011年11月17日。
三、实验数据
214.618-0.231-76.0060.036
349.88-0.782-42.201-1.022
486.14-1.346-7.706-2.112
548.035-79.962-44.438-79.736
f=150.000mm,x0=0,y0=0
四、实验思路
➢利用后方交会得出两张像片各自的外方位元素
1)获取已知数据:从摄影资料中插曲像片比例尺、平均航高、内
方位元素以及控制点的地面摄影测量坐标及对应的像点坐标。
2)确定未知数的初始值:在竖直摄影的情况下,胶原素的初始值
为0,线元素其中Zs=m*f+,Xs=,Ys=。
3)计算旋转矩阵R。
4)逐点计算像点坐标的近似值:利用共线方程。
5)组成误差方程并法化。
6)解求外方位元素。
7)检查计算是否收敛。
➢利用解求出的外方位元素进行前方交会
1)用各自像片的角元素计算出左右像片的旋转矩阵R1和R2。
2)根据左右像片的外方位元素计算摄影基线分量Bx,By,Bz。
3)逐点计算像点的空间辅助坐标。
4) 计算投影系数。
5) 计算未知点的地面摄影测量坐标。
6) 重复以上步骤完成所有点的地面坐标的计算。
五、 实验过程
➢ 程序流程框图
不满足限差则重复计算
➢程序中的主要函数设计
子函数(矩阵求积multiply,计算函数Resection,矩阵转置transpose,矩阵求逆inMerse1,输出函数shuchu,左片的外方位元素求解函数zuobian。右片的外方位元素求解函数youbian。)➢程序源代码
#include "stdio.h"
#include "math.h"
double Xs1,Xs2,Ys1,Ys2,Zs1,Zs2,p01,p02,w01,w02,k01,k02;
//求矩阵a的转置矩阵b,a为m行、n列
void transpose(double *a, double *b, int m, int n);
//矩阵a乘以矩阵b,结果存储在c中,a为m×n大小,b为n×l大小
void multiply(double *a, double *b, double *c, int m, int n, int l);
//求矩阵a的逆
int inMerse1(double *a, int n);
//输出m行、n列的矩阵a
void shuchu(double *a, int m, int n);
//计算并输出左片的外方位元素
void zuobian();
//计算并输出右片的外方位元素
void youbian();
void zuobian()
{
FILE *fp = NULL;
FILE *fp1 = NULL;
if((fp=fopen("F:\image.txt","r")) == NULL)
{
printf("Open file error!");
return;
}
if((fp1=fopen("F:\ground.txt","r")) == NULL)
{
printf("Open file error!");
return;
}
//像点坐标和地面点坐标
double imagecontrol[4][2]={0.0};
double groundcontrol[4][3]={0.0};
//摄影比例尺分母
double m = 9943;
double f=0.15;
long i,j,k;
for(i=0; i<4; i++)
{
for(j=0; j<2; j++)
{
fscanf(fp, "%lf", &imagecontrol[i][j]);
imagecontrol[i][j] /= 1000.0;
}
for(k=0; k<3; k++)
{
fscanf(fp1, "%lf", &groundcontrol[i][k]);
}
}
fclose(fp);
fclose(fp1);
//计算外方位元素初始值
for( i=0;i<4;i++)
{
Xs1+=groundcontrol[i][0];
Ys1+=groundcontrol[i][1];
Zs1+=groundcontrol[i][2];
}
Xs1/=4.0;