单像空间后方交会编程实习报告

时间:2025-05-10

空间后方交会

实习报告

学号 2010302590232

姓名 李雷

指导老师

实习目的

1、掌握空间后方交会的定义和实现算法

(1) 定义:空间后方交会是以单幅影像为基础,从该影像所覆盖地面范围内若干控制点

的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影

时刻的外方位元素Xs,Ys,Zs,φ,ω,κ。

(2) 算法:由于每一对像方和物方共轭点可列出2个方程,因此若有3个已知地面坐标

的控制点,则可列出6个方程,解求6个外方位元素的改正数△Xs,△Ys,△Zs,△φ,

△ω,△κ。实际应用中为了提高解算精度,常有多余观测方程,通常是在影像的四个角上

选取4个或均匀地选择更多的地面控制点,因而要用最小二乘平差方法进行计算。

2、了解摄影测量平差的基本过程

(1) 获取已知数据。从摄影资料中查取影像比例尺1/m,平均摄影距离(航空摄影的航高)、

内方位元素x0,y0,f;获取控制点的空间坐标Xt,Yt,Zt。

(2) 量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。

(3) 确定未知数的初始值。单像空间后方交会必须给出待定参数的初始值,在竖直航空

摄影且地面控制点大体对称分布的情况下,Xs0和Ys0为均值,Zs0为航高,φ、ω、κ的

初值都设为0。或者κ的初值可在航迹图上找出或根据控制点坐标通过坐标正反变换求出。

(4) 计算旋转矩阵R。利用角元素近似值计算方向余弦值,组成R阵。

(5) 逐点计算像点坐标的近似值。利用未知数的近似值按共线条件式计算控制点像点坐

标的近似值(x),(y)。

(6) 逐点计算误差方程式的系数和常数项,组成误差方程式。

(7) 计算法方程的系数矩阵ATA与常数项ATL,组成法方程式。

(8) 解求外方位元素。根据法方程,解求外方位元素改正数,并与相应的近似值求和,

得到外方位元素新的近似值。

(9) 检查计算是否收敛。将所求得的外方位元素的改正数与规定的限差比较,通常对φ,

ω,κ的改正数△φ,△ω,△κ给予限差,通常为0.1′,当3个改正数均小于0.1′时,

迭代结束。否则用新的近似值重复(4)~(8)步骤的计算,直到满足要求为止。

(10)流程图

一、程序源代码

typedef struct data{

int no;

double x;

double y;

double X;

double Y;

double Z;

}data;

#include <iostream.h>

#include<math.h>

#include <iomanip.h>

#include "fstream"

#include "HEADFile.h"

double** zhuan(double** a,int n,int m) //矩阵转置

{

double** p=new double*[m];

for(int i=0;i!=m;i++)

p[i]=new double[n];

for(i=0;i<m;i++)

for(int j=0;j<n;j++)

{

p[i][j]=a[j][i];

}

return p;

}

double **MatrixMul(double **m1,int i1,int j1,double **m2,int i2,int j2) //矩阵相乘(矩

阵1,行数,列数,矩阵2,行数,列数),函数内已开僻内存,直接返回给定义指针

{

if(i2!=j1)

{

cout<<"error!两矩阵不满足相乘条件!"<<endl;

return NULL;

}

int i,j,k;

double **p;

p=new double*[i1];

for(i=0;i<i1;i++)

p[i]=new double[j2];

for(i=0;i<i1;i++)

for(j=0;j<j2;j++)

{

p[i][j]=0.0;

for(k=0;k<j1;k++)

p[i][j]+=m1[i][k]*m2[k][j];

}

return p;

}

double **InverseMatrix(double** p,int n) //矩阵求逆函数

{

int i,j,k,row,col;

double temp,temp0,kb,kc,kd;

double **e=new double*[n];

for (i=0;i<n;i++) //构造单位矩阵

{

e[i]=new double[n];

for (j=0;j<n;j++)

{

if(i==j)

e[i][j]=1;

else

e[i][j]=0;

}

}

for(i=0;i<n;i++) //逐个找对角线上的元素,并把该元

素所在列上的本行以下元素化为0

{

int i0=i;

while(i0<n-1 && p[i0][i]==0 ) //找出某列上第一个不为零的

行数

{

i0++;

}

if (p[i0][i]==0)

{

cout<<"The square have no inverse matrix!"<<endl;

break;

}

for (j=0;j<n;j++) //当前行与该行交换

{

temp=p[i0][j];

p[i0][j]=p[i][j];

p[i][j]=temp;

temp0=e[i0][j];

e[i0][j]=e[i][j];

e[i][j]=temp0;

}

kc=p[i][i];

for (j=0;j<n;j++) //交换后的当前行首元素p[i][i]化为1

{

p[i][j]/=kc;

e[i][j]/=kc;

}

if(i<n-1) //若当前行不是矩阵的最后一行,则使当前

行以下各行减去本行首元素与当前行的积

{

for(row=i+1;row<n;row++)

{

kb=p[row][i];

for (col=0;col<n;col++)

{

p[row][col]-=kb*(p[i][col]);

e[row][col]-=kb*(e[i][col]);

}

}

}

}

for (i=n-2;i>=0;i--)

{

for(k=i+1;k<n;k++)

{

kd=p[i][k];

for (j=0;j<n;j++)

{

p[i][j]-=kd*p[k][j];

e[i][j]-=kd*e[k][j];

}

}

}

return e;

}

void main()

{

int M,num,i,j;

FILE *fp;

double f;

fp=fopen("E:\\后方交 …… 此处隐藏:3607字,全部文档内容请下载后查看。喜欢就下载吧 ……

单像空间后方交会编程实习报告.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219