当前位置:文档之家› 作业4--空间后方交会

作业4--空间后方交会

作业4--空间后方交会
作业4--空间后方交会

作业报告

空间后方交会

专业:测绘工程

班级: 2008级(1)班姓名:陈闻亚

指导教师:陈强

2010 年 4 月16 日

1 作业任务------------------------------------------------------------------------------------ 3

2 作业思想--------------------------------------------------------------------------------------- 3

3 作业条件及数据-------------------------------------------------------------------- 3

4 作业过程--------------------------------------------------------------------------- 3

5 源程序----------------------------------------------------------------------------- 4

6 计算结果--------------------------------------------------------------------------- 1

7 7心得体会与建议----------------------------------------------------------------------------- 17

1 作业任务

计算近似垂直摄影情况下后方交会解。即利用摄影测量空间后方交会的方法,获取相片的6个外方位元素。限差为0.1。

2作业思想

利用摄影测量空间后方交会的方法求解。该方法的基本思想是利用至少三个一直地面控制点的坐标A(X A,Y A,Z A)、B(X B,Y B,Z B)C(X C,Y C,Z C),与其影像上对应的三个像点的影像坐标a(x a,y a)、b(x b,y b)、c(x c,y c),根据共线方程,反求该相片的外方位元素X S、Y S、Z S、φ、ω、κ。

3作业条件及数据

已知摄影机主距f=153.24mm,四对点的像点坐标与相应的地面坐标列入下表:

表1

4作业过程

4.1 获取已知数据

相片比例尺1/m=1:10000,内方位元素f=153.24mm,x0,y0;获取控制点的地面测量坐标X t、Y t、Z t。

4.2 量测控制点的像点坐标:

本次作业中为已知。见表1。

4.3 确定未知数的初始值:

在近似垂直摄影情况下,胶原素的初始值为0,即φ0 = ω0 = κ0=0;线元素中,Z S0=H=mf=1532.4m,X S0、Y S0的取值可用四个控制点坐标的平均值,即:

X S0= 1

4

4

i

i1

X

=

∑=38437.00

Y S0= 1

4

4

i

i1

Y

=

∑=89106.62

4.4 计算旋转矩阵R:

利用胶原素的近似值计算方向余弦值,组成R阵。

4.5 逐点计算像点坐标的近似值:

利用未知数的近似值按共线方程式计算控制点像点坐标的近似值(x)(y)。4.6 组成误差方程:

逐点计算误差方程式的系数和常数项。

4.7 组成法方程式:

计算法方程的系数矩阵A T A与常数项A T L。

4.8 求解外方位元素:

根据法方程,由式X=(A t A)-1 A T L解求外方位元素改正数,并与相应的近似值求和,得到外方位元素新的近似值。

4.9 求解外方位元素:

将求得的外方位元素的改正数与规定的限差(0.1)比较,小于限差则计算终止,否则用新的近似值重复第4.4至4.8步骤的计算,知道满足要求为止。

5 源程序

#include

#include

#include

const double PRECISION=1e-5;

typedef double DOUBLE[5];

int InputData(int &Num, DOUBLE *&Data,double &m,double &f);

int Resection(const int &Num,const DOUBLE *&Data,const double &m,const double &f);

int InverseMatrix(double *matrix,const int &row);

int main(int argc, char* argv[])

{

DOUBLE *Data=NULL;

int Num;

double f(0),m(0);

if(InputData(Num,Data,m,f))

{

if (Data!=NULL)

{

delete []Data;

}

return 1;

}

if(Resection(Num,Data,m,f))

{

if (Data!=NULL)

{

delete []Data;

}

return 1;

}

if (Data!=NULL)

{

delete []Data;

}

printf("解算完毕...\n");

do{

printf("计算结果保存于\"结果.txt\"文件中\n"

"请选择操作(输入P打开结果数据,R打开原始数据,其它退出程序):");

fflush(stdin); //刷新输入流

char order=getchar();

if ('P'==order || 'p'==order)

{

system("结果.txt");

}

else if ('R'==order || 'r'==order)

{

system("data.txt");

}

else

break;

system("cls");

}while(1);

system("PAUSE");

return 0;

}

/**********************************************

*函数名:InputData

*函数介绍:从文件(data.txt)中读取数据,

*文件格式如下:

*点数m(未知写作0)

* 内方位元素(f x0 y0)

*编号x y X Y Z

*实例:

4 0

153.24 0 0

1 -86.15 -68.99 36589.41 25273.3

2 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.31

*参数:(in/out)Num(点数),

*(in/out)Data(存放数据),m,f,x0,y0

*返回值:int ,0成功,1文件打开失败,2控制点个

*数不足,3文件格式错误

**********************************************/

int InputData(int &Num, DOUBLE *&Data,double &m,double &f) {

double x0,y0;

FILE *fp_input;

if (!(fp_input=fopen("data.txt","r")))

{

return 1;

}

fscanf(fp_input,"%d%lf",&Num,&m);

if (Num<4)

{

return 2;

}

fscanf(fp_input,"%lf%lf%lf",&f,&x0,&y0);

f/=1000;

if (m<0 || f<0)

{

return 3;

}

Data=new DOUBLE[Num];

double *temp= new double[Num-1];

double scale=0;

int i;

for (i=0;i

{

//读取数据,忽略编号

if(fscanf(fp_input,"%*d%lf%lf%lf%lf%lf",

&Data[i][0],&Data[i][1],&Data[i][2],

&Data[i][3],&Data[i][4])!=5)

{

return 3;

}

//单位换算成m

Data[i][0]/=1000.0;

Data[i][1]/=1000.0;

}

//如果m未知则归算其值

if (0==m)

{

for (i=0;i

{

temp[i]=(Data[i][2]-Data[i+1][2])/(Data[i][0]-Data[i+1][0])+ (Data[i][3]-Data[i+1][3])/(Data[i][1]-Data[i+1][1]);

scale+=temp[i]/2.0;

}

m=scale/(Num-1);

}

fclose(fp_input);

delete []temp;

return 0;

}

/**********************************************

*函数名:MatrixMul

*函数介绍:求两个矩阵的积,

*参数:Jz1(第一个矩阵),row(第一个矩阵行数),

*Jz2(第二个矩阵),row(第二个矩阵列数),com(第一个

*矩阵列数),(out)JgJz(存放结果矩阵)

*返回值:void

**********************************************/

void MatrixMul(double *Jz1,const int &row,double *Jz2, const int &line,const int &com,double *JgJz)

{

for (int i=0;i

{

for (int j=0;j

{

double temp=0;

for (int k=0;k

{

temp+=*(Jz1+i*com+k)*(*(Jz2+k*line+j));

}

*(JgJz+i*line+j)=temp;

}

}

}

/**********************************************

*函数名:OutPut

*函数介绍:向结果.txt文件输出数据

*参数:Q协因数阵,m精度,m0单位权中误差,6个外

*方位元素,旋转矩阵

*返回值:int,0成功,1失败

**********************************************/

int OutPut(const double *&Q,const double *&m,const double &m0, const double &Xs,const double &Ys,const double &Zs,

const double &Phi,const double &Omega,

const double &Kappa,const double *R)

{

FILE *fp_out;

if (!(fp_out=fopen("结果.txt","w")))

{

return 1;

}

FILE *fp_input;

if (!(fp_input=fopen("data.txt","r")))

{

return 1;

}

fprintf(fp_out,"**************************************"

"**************************************"

"**************************************"

"*********************************\n");

fprintf(fp_out,"\n空间后方交会程序(C\\C++)\n测绘一班\n"

"学号:20080729\n姓名:陈闻亚\n\n");

fprintf(fp_out,"**************************************"

"**************************************"

"**************************************"

"*********************************\n");

fprintf(fp_out,"已知数据:\n\n已知点数:");

int num;double temp,x,y;

fscanf(fp_input,"%d%lf",&num,&temp);

fprintf(fp_out,"%d\n",num);

fprintf(fp_out,"摄影比例尺(0表示其值位置):");

fprintf(fp_out,"%10.0lf\n",temp);

fprintf(fp_out,"内方位元素(f x0 y0):");

fscanf(fp_input,"%lf%lf%lf",&temp,&x,&y);

fprintf(fp_out,"%10lf\t%10lf\t%10lf\n",temp,x,y);

for (int i=0;i

{

double temp[5];

fscanf(fp_input,"%*d%lf%lf%lf%lf%lf",

&temp[0],&temp[1],&temp[2],&temp[3],&temp[4]);

fprintf(fp_out,"%3d\t%10lf\t%10lf\t%10lf\t%10lf\t%10lf\n", i+1,temp[0],temp[1],temp[2],temp[3],temp[4]);

}

fclose(fp_input);

fprintf(fp_out,"**************************************"

"**************************************"

"**************************************"

"*********************************\n");

fprintf(fp_out,"计算结果如下:\n\n外方位元素:\n");

fprintf(fp_out,"\tXs=%10lf\n",Xs);

fprintf(fp_out,"\tYs=%10lf\n",Ys);

fprintf(fp_out,"\tZs=%10lf\n",Zs);

fprintf(fp_out,"\tPhi=%10lf\n",Phi);

fprintf(fp_out,"\tOmega=%10lf\n",Omega);

fprintf(fp_out,"\tKappa=%10lf\n\n",Kappa);

fprintf(fp_out,"旋转矩阵:\n");

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

{

fprintf(fp_out,"\t");

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

{

fprintf(fp_out,"%10lf\t",*(R+i*3+j));

}

fprintf(fp_out,"\n");

}

fprintf(fp_out,"\n单位权中误差:%10lf\n\n",m0);

fprintf(fp_out,"协因数阵:\n");

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

{

fprintf(fp_out,"\t");

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

{

fprintf(fp_out,"%20lf\t",*(Q+i*6+j));

}

fprintf(fp_out,"\n");

}

fprintf(fp_out,"\n外方位元素精度:");

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

{

fprintf(fp_out,"%10lf\t",m[i]);

}

fprintf(fp_out,"\n");

fprintf(fp_out,"**************************************"

"**************************************"

"**************************************"

"*********************************\n");

fclose(fp_out);

return 0;

}

/**********************************************

*函数名:Resection

*函数介绍:计算

*参数:Num(点数),Data(数据),m,,f(焦距),x0,y0

*返回值:int,0成功,其它失败

**********************************************/

int Resection(const int &Num,const DOUBLE *&Data,const double &m, const double &f)

{

double Xs=0,Ys=0,Zs=0;

int i,j;

//设置初始值

for (i=0;i

{

Xs+=Data[i][2];

Ys+=Data[i][3];

}

Xs/=Num;

Ys/=Num;

Zs=m*f;

double Phi(0),Omega(0),Kappa(0);

double R[3][3]={0.0};

double *L=new double[2*Num];

typedef double Double6[6];

Double6 *A=new Double6[2*Num];

double *AT=new double[2*Num*6];

double *ATA=new double[6*6];

double *ATL=new double[6];

double *Xg=new double[6];

//迭代计算

do

{

//旋转矩阵

R[0][0]=cos(Phi)*cos(Kappa)-sin(Phi)*sin(Omega)*sin(Kappa);

R[0][1]=-cos(Phi)*sin(Kappa)-sin(Phi)*sin(Omega)*cos(Kappa);

R[0][2]=-sin(Phi)*cos(Omega);

R[1][0]=cos(Omega)*sin(Kappa);

R[1][1]=cos(Omega)*cos(Kappa);

R[1][2]=-sin(Omega);

R[2][0]=sin(Phi)*cos(Kappa)+cos(Phi)*sin(Omega)*sin(Kappa);

R[2][1]=-sin(Phi)*sin(Kappa)+cos(Phi)*sin(Omega)*cos(Kappa);

R[2][2]=cos(Phi)*cos(Omega);

for (i=0;i

{

double X=R[0][0]*(Data[i][2]-Xs)+R[1][0]*(Data[i][3]-Ys)+

R[2][0]*(Data[i][4]-Zs);

double Y=R[0][1]*(Data[i][2]-Xs)+R[1][1]*(Data[i][3]-Ys)+

R[2][1]*(Data[i][4]-Zs);

double Z=R[0][2]*(Data[i][2]-Xs)+R[1][2]*(Data[i][3]-Ys)+

R[2][2]*(Data[i][4]-Zs);

double xxx,yyy;

xxx=-f*X/Z;

yyy=-f*Y/Z;

//常数项

L[2*i]=Data[i][0]-(-f*X/Z);

L[2*i+1]=Data[i][1]-(-f*Y/Z);

A[2*i][0]=(R[0][0]*f+R[0][2]*(xxx))/Z;

A[2*i][1]=(R[1][0]*f+R[1][2]*(xxx))/Z;

A[2*i][2]=(R[2][0]*f+R[2][2]*(xxx))/Z;

A[2*i][3]=(yyy)*sin(Omega)-(((xxx)/f)*

((xxx)*cos(Kappa)-(yyy)*sin(Kappa))+

f*cos(Kappa))*cos(Omega);

A[2*i][4]=-f*sin(Kappa)-((xxx)/f)*((xxx)*

sin(Kappa)+(yyy)*cos(Kappa));

A[2*i][5]=(yyy);

A[2*i+1][0]=(R[0][1]*f+R[0][2]*(yyy))/Z;

A[2*i+1][1]=(R[1][1]*f+R[1][2]*(yyy))/Z;

A[2*i+1][2]=(R[2][1]*f+R[2][2]*(yyy))/Z;

A[2*i+1][3]=-(xxx)*sin(Omega)-(((yyy)/f)*

((xxx)*cos(Kappa)-(yyy)*sin(Kappa))-

f*sin(Kappa))*cos(Omega);

A[2*i+1][4]=-f*cos(Kappa)-((yyy)/f)*((xxx)*

sin(Kappa)+(yyy)*cos(Kappa));

A[2*i+1][5]=-(xxx);

}

//求矩阵A的转置矩阵AT

for (i=0;i<2*Num;i++)

{

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

{

*(AT+j*2*Num+i)=A[i][j];

}

}

//求ATA

MatrixMul(AT,6,&A[0][0],6,2*Num,ATA);

if(InverseMatrix(ATA,6))

return 1;

MatrixMul(AT,6,L,1,2*Num,ATL);

MatrixMul(ATA,6,A TL,1,6,Xg);

Xs+=Xg[0];

Ys+=Xg[1];

Zs+=Xg[2];

Phi+=Xg[3];

Omega+=Xg[4];

Kappa+=Xg[5];

} while(fabs(Xg[0])>=PRECISION ||fabs(Xg[1])>=PRECISION || fabs(Xg[2])>=PRECISION ||fabs(Xg[3])>=PRECISION ||

fabs(Xg[4])>=PRECISION || (Xg[5])>=PRECISION);

//注:协因数阵,旋转矩阵等计算本应该使用最后外方位元素值,//由于变换很小忽略

double *Q=ATA;

double *V=new double[2*Num];

MatrixMul(&A[0][0],2*Num,Xg,1,6,V);

double VTV=0;

for(i=0;i<2*Num;i++)

{

V[i]-=L[i];

VTV+=V[i]*V[i];

}

double m0=sqrt(VTV/(2*Num-6));

double *mm=new double[6];

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

{

mm[i]=sqrt(*(Q+i*6+i))*m0;

}

OutPut(Q,mm,m0,Xs,Ys,Zs,Phi,Omega,Kappa,&R[0][0]);

delete []L;

delete []A;

delete []AT;

delete []ATA;

delete []ATL;

delete []Xg;

delete []mm;

delete []V;

return 0;

}

void swap(double &a,double &b)

{

double temp=a;

a=b;

b=temp;

}

/**********************************************

*函数名:InverseMatrix

*函数介绍:求矩阵的逆(高斯-约当法)

*输入参数:(in/out)matrix(矩阵首地址),

*(in)row(矩阵阶数)

*输出参数:matrix(原矩阵的逆矩阵)

*返回值:int ,0成功,1失败

*调用函数:swap(double&,double&)

**********************************************/ int InverseMatrix(double *matrix,const int &row)

{

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

double *ptemp,*pt=m;

int i,j;

ptemp=matrix;

for (i=0;i

{

for (j=0;j

{

*pt=*ptemp;

ptemp++;

pt++;

}

}

int k;

int *is=new int[row],*js=new int[row];

for (k=0;k

{

double max=0;

//全选主元

//寻找最大元素

for (i=k;i

{

for (j=k;j

{

if (fabs(*(m+i*row+j))>max)

{

max=*(m+i*row+j);

is[k]=i;

js[k]=j;

}

}

}

if (0 == max)

{

return 1;

}

//行交换

if (is[k]!=k)

{

for (i=0;i

{

swap(*(m+k*row+i),*(m+is[k]*row+i));

}

}

//列交换

if (js[k]!=k)

{

for (i=0;i

{

swap(*(m+i*row+k),*(m+i*row+js[k]));

}

}

*(m+k*row+k)=1/(*(m+k*row+k));

for (j=0;j

{

if (j!=k)

{

*(m+k*row+j)*=*((m+k*row+k));

}

}

for (i=0;i

{

if (i!=k)

{

for (j=0;j

{

if(j!=k)

{

*(m+i*row+j)-=*(m+i*row+k)**(m+k*row+j);

}

}

}

for (i=0;i

{

if(i!=k)

{

*(m+i*row+k)*=-(*(m+k*row+k));

}

}

}

int r;

//恢复行列

for (r=row-1;r>=0;r--)

{

if (js[r]!=r)

{

for (j=0;j

{

swap(*(m+r*row+j),*(m+js[r]*row+j));

}

}

if (is[r]!=r)

{

for (i=0;i

{

swap(*(m+i*row+r),*(m+i*row+is[r]));

}

}

}

ptemp=matrix;

pt=m;

for (i=0;i

{

for (j=0;j

{

*ptemp=*pt;

ptemp++;

pt++;

}

}

delete []js;

delete []m;

return 0;

}

6 计算结果

外方位元素:

Xs=39795.452297

Ys=27476.462210

Zs=7572.685927

φ = - 0.003987

ω= 0.002114

κ= - 0.067578

旋转矩阵:

0.997709 0.067534 0.003987

-0.067526 0.997715 -0.002114

-0.004121 0.001840 0.999990

单位权中误差:0.000007

7 心得体会与建议

有挑战才会有激情,成功了便更有满足感。此次作业,便是又一次的挑战。总体来说,空间后方交会的知识,在学习时就有点懵,后来自己下来又看书加深了理解,把它弄懂了。而编程方面所面临的问题就比较多了,上一学期就有过一个类似的作业,当时没有攻破编程这一题,便用的Excel解决,但事后也没有继续研究,实为遗憾。直到遇到这次作业,又是同样的问题,才后悔当初没有继续学习把它解决了。其实主要总结起来就一个比较难的点:编程实现矩阵的运算尤其是矩阵求逆。搜集资料时,在网上搜索到了一些矩阵求逆的代码,但是有些也不能实现,找到合适的后,也要考虑把它运用到主程序的问题。不断调试,不断改进,这个过程还是有些难度的,最后还实现了用文本导入数据计算及文本输出结果。此次作业虽然比较波折,但是收获还是很大,也解决了一个可以算是拖延了很久的问题。虽然有些地方是效仿的,不过也是自己要弄懂以后,再试着自己一步步理出来。对自己可以说是又一次提高。

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

空间后方交会编程实习报告 一实习目的 用程序设计语言(Visual C++或者C语言)编写一个完整的单片空间后方交会程序,通过对提供的试验数据进行计算,输出像片的外方位元素并评定精度。本实验的目的在于让学生深入理解单片空间后方交会的原理,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强学生综合运用所学知识解决实际问题的能力。 二实习内容 利用一定数量的地面控制点,根据共线条件方程求解像片外方位元素。 三实习数据 已知航摄仪的内方位元素:f k =153.24mm,x =y =0.0mm,摄影比例尺为1:50000; 4个地面控制点的地面坐标及其对应像点的像片坐标: 四实习原理 如果我们知道每幅影像的6个外方位元素,就能确定被摄物体与航摄影像的关系。因此,如何获取影像的外方位元素,一直是摄影测量工作者所探讨的问题。可采取的方法有:利用雷达、全球定位系统(GPS)、惯性导航系统(INS)以及星相摄影机来获取影像的外方位元素;也可以利用影像覆盖范围内一定数量的控制点的空间坐标与摄影坐标,根据共线条件方程,反求该影像的外方位元素,这种方法称为单幅影像的空间后方交会。 单像空间后方交会的基本思想是:以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,t,w,k。 五实习流程 (1)获取已知数据。从摄影资料中查取影像比例尺1/m,平均摄影距离(航空摄影的航高、内方位元素x0,y0,f;获取控制点的空间坐标Xt,Yt,Zt。 (2)量测控制点的像点坐标并进行必要的影像坐标系统误差改正,得到像点坐标。 (3)确定未知数的初始值。单像空间后方交会必须给出待定参数的初始值,在竖直航空摄影且地面控制点大体对称分布的情况下,可按如下方法确定初始值:

空间后方交会的解算

空间后方交会的解算 一. 空间后方交会的目的 摄影测量主要利用摄影的方法获取地面的信息,主要是是点位信息,属性信息,因此要对此进行空间定位和建模,并首先确定模型的参数,这就是空间后方交会的目的,用以求出模型外方位元素。 二. 空间后方交会的原理 空间后方交会的原理是共线方程。 共线方程是依据相似三角形原理给出的,其形式如下 111333222333()()() ()()() ()()()()()()A S A S A S A S A S A S A S A S A S A S A S A S a X X b Y Y c Z Z x f a X X a Y Y a Z Z a X X b Y Y c Z Z y f a X X a Y Y a Z Z -+-+-=--+-+--+-+-=--+-+- 上式成为中心投影的构线方程, 我们可以根据几个已知点,来计算方程的参数,一般需要六个方程,或者要三个点,为提高精度,可存在多余观测,然后利用最小二乘求其最小二乘解。 将公式利用泰勒公式线性化,取至一次项,得到其系数矩阵A ;引入改正数(残差)V ,则可将其写成矩阵形式: V AX L =- 其中 111333222333[,]()()()()()()()()()()()()()()T x y A S A S A S x A S A S A S A S A S A S y A S A S A S L l l a X X b Y Y c Z Z l x x x f a X X a Y Y a Z Z a X X b Y Y c Z Z l y y y f a X X a Y Y a Z Z =-+-+-=-=+-+-+--+-+-=-=+-+-+- 则1()T T X A A A L -= X 为外方位元素的近似改正数, 由于采用泰勒展开取至一次项,为减少误差,要将的出的值作为近似值进行迭代,知道小于规定的误差 三. 空间后方交会解算过程 1. 已知条件 近似垂直摄影

摄影测量后方交会

单张相片后方交会

目录 ●作业任务 (3) ●解算原理 (3) ●具体过程 (4) ●算法描述及程序流程 (4) ●计算结果 (7) ●结果分析 (8) ●心得体会及建议 (8) ●参考文献 (9)

一,作业任务 已知摄影机主距f=153.24mm,四对点的像点坐标与相应地面坐标列入下表: 表1-1 计算近似垂直摄影情况下后方交会解。 二,解算原理 【关键词1】中心投影构像方程 在摄影测量学中,最重要的方程就是中心投影构像方程(图2-1)。这个方程 将地面点在地面摄影测量坐标系中的坐标(物方坐标)和地面点对应像点的像平 面坐标联系起来。在解析摄影测量与数字摄影测量中是极其有用的。在以后将要 学习到的双像摄影测量光束法、解析测图仪原理及数字影像纠正等都要用到该 式。 图2-1 在上述公式中:x和y分别为以像主点为原点的像点坐标,相应地面点坐标 为X,Y,Z,相片主距f以及外方位元素Xs,Ys,Zs,ψ,ω,κ。 而在此次作业中,就是已知四个地面控制点的坐标以及其对应的像点坐标, 通过间接平差原理来求解此张航片的外方位元素。 【关键词2】间接平差 在一个平差问题中,当所选的独立参数X的个数等于必要观测值t时,可将 每个观测值表达成这t个参数的函数,组成观测方程,然后依据最小二乘原理求 解,这种以观测方程为函数模型的平差方法,就是间接平差方法 间接平差的函数模型为: 随机模型为: 平差准则为:VtPV=min 【关键词3】单像空间后方交会 利用至少三个已知地面控制点的坐标A(Xa,Ya,Za)、B(Xb,Yb,Zb)、Z(Xc,

Yc,Zc),与其影像上对应的三个像点的影像坐标a(xa,ya)、b(xb,yb)、c(xc,yc),根据共线方程,反求该像点的外方位元素Xs,Ys,Zs,ψ,ω,κ。这种解算方法是以单张像片为基础,亦称单像空间后方交会。 在此次作业中,就是已知四个控制点在地面摄影测量坐标系中的坐标和对应的像点坐标。由此可以列出8个误差方程,存在两个多余观测数,则n=2。故可利用间接平差里,依据最小二乘法则,进行求解。由于共线条件方程是非线性函数模型,为了便于计算,需把非线性函数表达式用泰勒公式展开成现行形式,即“线性化”。而又因为仅取泰勒级数展开式的一次项,未知数的近似值改正是粗略的,所以必须计算采用逐渐趋近法,解求过程需要反复趋近,直至改正值小于限差为止。 三,具体过程 1,获取已知点数据:从摄影资料中查取像片比例尺1/m,平均航高,内方元素x0,y0,f;从外业测量成果中,获取控制点的地面测量坐标Xt,Yt,Zt,并转换成摄影测量坐标X,Y,Z。 2,量测控制点的像点坐标:将控制点标刺在像片上,利用立体坐标量测仪量测控制点的像框坐标,并经像点坐标改正,得到像点坐标x,y。 3,确定未知数的初始值:在竖直摄影测量情况下,角元素的初始值为0,及ψ=ω=κ=0; 线元素中,Zso =m*f+(Z[0]+Z[1]+Z[2]+Z[3])/4,Xso,Yso的取值可用四个角点上制点坐标的平均值,即:Xso=(X[0]+X[1]+X[2]+X[3])/4;Yso=(Y[0]+Y[1]+Y[2]+Y[3])/4;4,计算旋转矩阵R:利用角元素的近似值计算方向余弦,组成R阵。公式如下:R[0][0]=cos(ψ)*cos(k)-sin(ψ)*sin(w)*sin(k); R[0][1]=-cos(ψ)*sin(k)-sin(ψ)*sin(w)*cos(k); R[0][2]=-sin(ψ)*cos(w); R[1][0]=cos(w)*sin(k); R[1][1]=cos(w)*cos(k); R[1][2]=-sin(w); R[2][0]=sin(ψ)*cos(k)+cos(ψ)*sin(w)*sin(k); R[2][1]=-sin(ψ)*sin(k)+cos(ψ)*sin(w)*cos(k); R[2][2]=cos(ψ)*cos(w); 5,逐点计算像点坐标的近似值:利用未知数的近似值按共线方程计算控制点像点坐标的近似值(x)、(y); 6,组成误差方程式:参照教材(5-8)式、(5-9b)式、(5-4)式逐点计算误差方程的系数阵和常数项。 7,组成法方程:计算法方程的系数矩阵与常数项。 8,解求外方位元素:根据法方程,按间接平差原理解求外方位元素改正值,并与相应的近似值求和,得到外方位元素的新的近似值。 9,检查计算是否收敛:将求得的外方位元素的改正值与规定的限差比较,小于限差则计算终止,否则用新的近似值重复第4至第8步骤计算,直至满足要求为止。 四,算法描述及程序流程。 算法描述(图4-1):

全站仪后方交会操作过程

全站仪放样,作为施工过程中一项重要环节,对技术员已上升为必须擅长的仪器操作内容。全站仪建站一般有两种方法,即极坐标法建站和后方交会法建站。现以尼康全站仪为例,讲述全站仪后方交会法建站、放样全过程。(其他品牌全站仪可参考进行) 一、建站 1.将仪器架于两已知点均可通视,且可完全看到放样目标点位置的高处。尽量保证视线夹角在60度左右,仪器架设高度适中,三脚架腿踩实,不可出现放样过程中架腿松动现象。(注意:整个放样过程中仪器附近不应有人来回走动,且放样人员应尽量站在一点不动,减少因人员走动导致仪器震动偏移。) 2.固定仪器,上下松动架腿大致调整圆水准器气泡基本居中,按下电源键开机,上下左右转动一下,按下“0”键,进入精平模式。 将水准管放于平行于两螺旋连线方向,关注屏幕上数值,“”过大,便同时向内或向外转动平行方向两螺旋至数值符合要求(一般数值处于5"以内即可);“”过大,便左转或右转垂直方向螺旋至数值符合要求。旋转60度,检查,若仍有些许偏差,再按上述调整。再旋转60度继续检查至完成。 3.按下“确定”键记录,按“建站”键进入建站模式,选择“后方交会法”按“确定”。①若全站仪内已有建站点坐标,可在“PT”栏输入点名(“MODE”键可切换数字与字母),按“确定”键自动跳出坐标,再输入棱镜高(本项目为1.35m和1.2m两种);②若全站仪内无建站点坐标,于“PT”处按“确定”键进入坐标输入界面,XYZ

输完后,按“确定”回到界面,再输入仪器高。 CD数值暂时不输,按“确定”跳过进而记录,进入瞄准后视点1界面,视线内横竖丝卡住棱镜头“横竖尖头”(一般要求:竖向从镜杆底部瞄起,再翻转上去;横向以卡住两边尖为准),瞄准后,点击“测量1”(一般仪器内部设置“测量1”为棱镜模式且双频,“测量2”为免棱镜模式且单频,具体设置可内部调节变动)测量,待响两声后,在不转动仪器前按“确定”键记录,重复“PT”输入点坐标和棱镜高进行后视点2的瞄准,按“测量1”测量(若发现测量时后视瞄准有移动,再瞄准再按“测量1”测量)。 4.确定无误后,按“确定”键记录,自动开始计算建站误差,一般要求建站误差在5mm以内。(考虑仪器自身状态和其他情况,计算出结果有几种不正常情况:①建站误差过大,处理办法为按一次“ESC 键”返回测量后视点2,再次瞄准,测量,再计算,若还是很大,重新建站;②出现“输入第三个点”,处理办法为检查输入点坐标是否输入有误,确定无误,再次测量,若不行,重新建站) 建站误差符合要求后,按“确定”键记录,重新输入点名,其他可按“确定”或“”键跳过,最后“确定”键完成建站。 二、放样 点击“放样”键,按“确定”或“”键跳过界面,至下一个坐标输入界面,输入坐标,瞄准,“测量1”测量,按指示告知架镜人员左右前后移动至定点位置,通知定点。 一次“ESC”键返回,再按“确定”或“”键跳过界面,进入下

全站仪后方交会法步骤和高程测量步骤

全站仪后方交会法步骤和 高程测量步骤 Revised final draft November 26, 2020

1、角度测量(angleobservation) (1)功能:可进行水平角、竖直角的测量。 (2)方法:与经纬仪相同,若要测出水平角∠AOB,则: 1)当精度要求不高时: 瞄准A点——置零(0SET)——瞄准B点,记下水平度盘HR的大小。 2)当精度要求高时:——可用测回法(methodofobservationset)。 操作步骤同用经纬仪操作一样,只是配置度盘时,按“置盘”(HSET)。 2、距离测量(distancemeasurement) PSM、PPM的设置——测距、测坐标、放样前。 1)棱镜常数(PSM)的设置。 一般:PRISM=0(原配棱镜),-30mm(国产棱镜) 2)大气改正数(PPM)(乘常数)的设置。 输入测量时的气温(TEMP)、气压(PRESS),或经计算后,输入PPM的值。 (1)功能:可测量平距HD、高差VD和斜距SD(全站仪镜点至棱镜镜点间高差及斜距) (2)方法:照准棱镜点,按“测量”(MEAS)。 3、坐标测量(coordinatemeasurement) (1)功能:可测量目标点的三维坐标(X,Y,H)。 (2)测量原理任意架仪器,先设置仪器高为0,棱镜高是多少就是多少,棱镜拿去直接放在已知点上测高差,测得的高差为棱镜头到仪器视线的高差,当然,有正有负了,然后拿出计算器用已

知点加上棱镜高,再加上或减去(因为有正有负)测得的高差就是仪器的视线高啊,因为仪器高为0,所以这个数字就是你的测站点高程,进测站点把它改成这个数字就行了,改完测站点了一般情况下都要打一下已知点复核一下。。。 若输入:方位角,测站坐标(,);测得:水平角和平距。则有: 方位角: 坐标: 若输入:测站S高程,测得:仪器高i,棱镜高v,平距,竖直角,则有: 高程: (3)方法: 输入测站S(X,Y,H),仪器高i,棱镜高v——瞄准后视点B,将水平度盘读数设置为——瞄准目标棱镜点T,按“测量”,即可显示点T的三维坐标。 4、点位放样(Layout) (1)功能:根据设计的待放样点P的坐标,在实地标出P点的平面位置及填挖高度。 (2)放样原理 1)在大致位置立棱镜,测出当前位置的坐标。 2)将当前坐标与待放样点的坐标相比较,得距离差值dD和角度差dHR或纵向差值ΔX和横向差值ΔY。 3)根据显示的dD、dHR或ΔX、ΔY,逐渐找到放样点的位置。

单像空间后方交会和双像解析空间后方-前方交会的算法程序实现

单像空间后方交会和双像解析空间后方-前 方交会的算法程序实现 遥感科学与技术 摘要:如果已知每张像片的6个外方位元素,就能确定被摄物体与航摄像片的关系。因此,利用单像空间后方交会的方法,可以迅速的算出每张像片的6个外方位元素。而前方交会的计算,可以算出像片上点对应于地面点的三维坐标。基于这两点,利用计算机强大的运算能力,可以代替人脑快速的完成复杂的计算过程。 关键词:后方交会,前方交会,外方位元素,C++编程 0.引言: 单张像片空间后方交会是摄影测量基本问题之一,是由若干控制点及其相应像点坐标求解摄站参数(X S,Y S,ZS,ψ、ω、κ)。单像空间后方交会主要有三种方法:基于共线条件方程的平差解法、角锥法、基于直接线性变换的解法。而本文将介绍第一种方法,基于共线条件方程反求象片的外方位元素。 而空间前方交会先以单张像片为单位进行空间后方交会,分别求出两张像片的外方位元素,再根据待定点的一对像点坐标,用空间前方交会的方法求解待定点的地面坐标。可以说,这种求解地面点的坐标的方法是以单张像片空间后方交会为基础的,因此,单张像片空间后方交会成为解决这两个问题以及算法程序实现的关键。

1.单像空间后方交会的算法程序实现: (1)空间后方交会的基本原理:对于遥感影像,如何获取像片的外方位元素,一直是摄影测量工作者探讨的问题,其方法有:利用雷达(Radar)、全球定位系统(GPS)、惯性导航系统(I N S)以及星像摄影机来获取像片的外方位元素;也可以利用一定数量的地面控制点,根据共线方程,反求像片的外方位元素,这种方法称为单像空间后方交会(如图1所示)。 图中,地面坐标X i、Yi、Zi和对应的像点坐标x i、yi是已知的,外方位元素XS、Y S、ZS(摄站点坐标),ψ、ω、κ(像片姿态角)是待求的。 (2)空间后方交会数学模型:空间后方交会的数学模型是共线方程, 即中心投影的构像方程: 式中X、Y、Z是地面某点在地面摄影测量坐标系中的坐标,x,y是该地面点在像片上的构像点的像片坐标,对 于空间后方交会而言它们是已知的,还有主距f是已知的。而9个方向余弦a 1,a 2,a3;b1,b 2,b 3;c 1,c2,c 3是未知的,具体表达式可以取

后方交会测量步骤

18.后方交会测量 后方交会通过对多个已知点的测量定出测站点的坐 标。 输入值或观测值 输出值 Ni.Ei.Zi:已知点的坐标值No.Eo.Zo:测站点的坐标值 Hi :水平角观测值 Vi :垂直角观测值 Di :距离观测值 已知点(P1) 已知点(P2) 测站点(P0) 已知点(P4) 已知点(P3) BTS-800 通过观测2-10 已知点便可计算出测站点的坐标。 当观测的已知点超过 2 个,计算N、E 坐标时将采用最小二乘法进行平差,并给出平差结果的不确定度。而Z 坐标则通过计算平均值求取。因此,观测的已知点越多,计算所得的坐标精度也就越高。 后方交会测量也可在菜单模式下选取“后方交会”来进行。 使用“后方交会”,已知点输入应按顺时针顺序输入,否则计算结果可能不准确。

49

18.1 测量两已知点求取测站坐标 操作过程操作键 1.在测量模式第三页下按【后交】进入 显示 后方交会测量功能,显示已知点坐标 输入屏幕。 在菜单模式下选取“3.后方交会”也 可以进入后方交会测量 2.输入已知点1 的坐标,每输入一行数据 按【】,输入完成后,照准已知点 1 棱镜,按【测量】进行测量。 3.测量完成后,显示测量结果,并要求输 入已知点棱镜高。【后交】 【测量】 【输入测量已知点1】 N﹤m﹥: E﹤m﹥: Z﹤m﹥: 【后方交会】 S: 557.259m ZA: 97°31′05″ HAR: 351°15′06″ 连续测量模式需按【停止】停止测量。 4.按【确定】,进入已知点2 坐标输入及测 量。 重复2-3 完成已知点2 的输入及测量。 【确定】 50

后方交会程序实现(c语言版)

#include #include #include #include #include #define N 4 #define T 1.41421 void turn(double *A,double A2[],int m,int n) //计算矩阵的转置 { int i,j; for(i=0;i

for(l=0;ld) { d=p; is[k]=i; js[k]=j; } } if (d+1.0==1.0) { free(is); free(js); printf("error not inv\n");

全站仪后方交会法步骤和高程测量步骤

1、角度测量(angle observation) (1)功能:可进行水平角、竖直角的测量。 (2)方法:与经纬仪相同,若要测出水平角∠AOB ,则: 1)当精度要求不高时: 瞄准A 点——置零(0 SET )——瞄准B 点,记下水平度盘HR 的大小。 2)当精度要求高时:——可用测回法(method of observation set )。 操作步骤同用经纬仪操作一样,只是配置度盘时,按“置盘”(H SET )。 2、距离测量(distance measurement ) PSM 、PPM 的设置——测距、测坐标、放样前。 1)棱镜常数(PSM )的设置。 一般:PRISM=0 (原配棱镜),-30mm (国产棱镜) 2)大气改正数(PPM )(乘常数)的设置。 输入测量时的气温(TEMP )、气压(PRESS ),或经计算后,输入PPM 的值。(1)功能:可测量平距HD 、高差VD 和斜距SD (全站仪镜点至棱镜镜点间高差及斜距) (2)方法:照准棱镜点,按“测量”(MEAS )。 3、坐标测量(coordinate measurement ) (1)功能:可测量目标点的三维坐标(X ,Y ,H )。 (2)测量原理任意架仪器,先设置仪器高为0,棱镜高是多少就是多少,棱镜拿去直接放在已知点上测高差,测得的高差为棱镜头到仪器视线的高差,当然,有正有负了,然后拿出计算器用已知点加上棱镜高,再加上或减去(因为有正有负)测得的高差就是仪器的视线高啊,因为仪器高为0,所以这个数字就是你的测站点高程,进测站点把它改成这个数字就行了,改完测站点了一般情况下都要打一下已知点复核一下。。。 若输入:方位角,测站坐标(,);测得:水平角和平距。则有: 方位角: 坐标: 若输入:测站S 高程,测得:仪器高i ,棱镜高v ,平距,竖直角,则有: 高程: (3)方法: 输入测站S (X ,Y ,H ),仪器高i ,棱镜高v ——瞄准后视点B ,将水平度盘读数设置为——瞄准目标棱镜点T ,按“测量”,即可显示点T 的三维坐标。 4、点位放样(Layout) (1)功能:根据设计的待放样点P 的坐标,在实地标出P 点的平面位置及填挖高度。(2)放样原理 1)在大致位置立棱镜,测出当前位置的坐标。 2)将当前坐标与待放样点的坐标相比较,得距离差值dD 和角度差dHR 或纵向差值Δ X 和横向差值Δ Y 。 3)根据显示的dD 、dHR 或ΔX 、ΔY ,逐渐找到放样点的位置。 5、程序测量(programs ) (1)数据采集(data collecting) (2)坐标放样(layout) (3)对边测量(MLM)、悬高测量(REM)、面积测量(AREA)、后方交会(RESECTION) 等。

摄影测量程序汇总(后方交会+前方交会+单模型光束法平差)

程序运行环境为Visual Studio2010.运行前请先将坐标数据放在debug 下。 1.单像空间后方交会 C语言程序: #include #include #include double *readdata(); void savedata(int hang,double *data,double *xishuarray,double *faxishu,double *l,int i,double xs,double ys,double zs,double fai,double oumiga,double kapa); void transpose(double *m1,double *m2,int m,int n); void inverse(double *a,int n); void multi(double *mat1,double * mat2,double * result,int a,int b,int c); void inverse(double *a,int n)/*正定矩阵求逆*/ { int i,j,k; for(k=0;k

摄影测量学单像空间后方交会程序设计作业

{ System; System.Collections.Generic; System.Linq; System.Text; namespace 单像空间后方交会 { class Program { static void Main( string [] args) for (j = 0; j < 5; j++) if (j < 3) "请输入第 {0} 个点的第 {1} 个地面坐标: ", i + 1, j + 1); double .Parse( Console .ReadLine()); "请输入第 {0} 个点的第 {1} 个像点 坐标: ", i + 1, j - 2); double .Parse( Console .ReadLine()); Console .WriteLine(); // 归算像点坐标 (i = 0; i < 4; i++) for (j = 3; j < 5; j++) if (j == 3) zuobiao[i, j] = zuobiao[i, j] - x0; else zuobiao[i, j] = zuobiao[i, j] - y0; // 计算和确定初值 double zs0 = m * f, xs0 = 0, ys0 = 0; for (i = 0; i < 4; i++) else using using using using x0 = y0 = int x0, y0, i, j; double f, m; Console .Write( " 请输入像片比例尺: "); double .Parse( Console .ReadLine()); Console .Write( " 请输入像片的内方位元素 x0:" ); // 均以毫米为单 位 int .Parse( Console .ReadLine()); Console .Write( " 请输入像片的内方位元素 y0:" ); int .Parse( Console .ReadLine()); Console .Write( " 请输入摄影机主距 f:" ); double .Parse( Console .ReadLine()); Console .WriteLine(); // 输入坐标数据 double [,] zuobiao = new double [4, 5]; (i = 0; i < 4; i++) for Console .Write( zuobiao[i, j] = Console .Write( zuobiao[i, j] = for

作业4--空间后方交会

作业报告 空间后方交会 专业:测绘工程 班级:2008级(1)班姓名:陈闻亚 指导教师:陈强 2010 年 4 月16 日

1 作业任务------------------------------------------------------------------------------------ 3 2 作业思想 --------------------------------------------------------------------------------------- 3 3 作业条件及数据 -------------------------------------------------------------------- 3 4 作业过程--------------------------------------------------------------------------- 3 5 源程序----------------------------------------------------------------------------- 4 6 计算结果--------------------------------------------------------------------------- 17 7心得体会与建议----------------------------------------------------------------------------- 17

1 作业任务 计算近似垂直摄影情况下后方交会解。即利用摄影测量空间后方交会的方法,获取相片的6个外方位元素。限差为0.1。 2作业思想 利用摄影测量空间后方交会的方法求解。该方法的基本思想是利用至少三个一直地面控制点的坐标A(X A,Y A,Z A)、B(X B,Y B,Z B)C(X C,Y C,Z C),与其影像上对应的三个像点的影像坐标a(x a,y a)、b(x b,y b)、c(x c,y c),根据共线方程,反求该相片的外方位元素X S、Y S、Z S、φ、ω、κ。 3作业条件及数据 已知摄影机主距f=153.24mm,四对点的像点坐标与相应的地面坐标列入下表: 4作业过程 4.1 获取已知数据 相片比例尺1/m=1:10000,内方位元素f=153.24mm,x0,y0;获取控制点的地面测量坐标X t、Y t、Z t。 4.2 量测控制点的像点坐标: 本次作业中为已知。见表1。

空间后方交会程序

一. 实验目的: 掌握摄影测量空间后方交会的原理,利用计算机编程语言实现空间后方交会外方位元素的解算。 二. 仪器用具及已知数据文件: 计算机windows xp 系统,编程软件(VISUAL C++6.0),地面控制点在摄影测量坐标系中的坐标及其像点坐标文件shuju.txt 。 三. 实验内容: 单张影像的空间后方交会:利用已知地面控制点数据及相应像点坐标根据共线方程反求影像的外方位元素。 数学模型:共线条件方程式: )(3)(3)(3)(1)(1)(1Zs Z c Ys Y b Xs X a Zs Z c Ys Y b Xs X a f x -+-+--+-+--= )(3)(3)(3)(2)(2)(2Zs Z c Ys Y b Xs X a Zs Z c Ys Y b Xs X a f y -+-+--+-+--= 求解过程: (1)获取已知数据。从航摄资料中查取平均航高与摄影机主距;获取控制点的地面测量坐标并转换为地面摄影测量坐标。 (2)量测控制点的像点坐标并做系统改正。 (3)确定未知数的初始值。在竖直摄影且地面控制点大致分布均匀的情况下,按如下方法确定初始值,即: n X X S ∑=0,n Y Y S ∑=0,n Z mf Z S ∑=0 φ =ω=κ=0 式中;m 为摄影比例尺分母;n 为控制点个数。 (4)用三个角元素的初始值,计算个方向余弦,组成旋转矩阵R 。 (5)逐点计算像点坐标的近似值。利用未知数的近似值和控制点的地面 坐标代入共线方程式,逐点计算像点坐标的近似值(x )、(y )。 (6)逐点计算误差方程式的系数和常数项,组成误差方程式。 (7)计算法方程的系数矩阵A A T 和常数项l A T ,组成法方程式。 (8)解法方程,求得外方位元素的改正数dXs ,S dY ,s dZ ,d φ,d ω,d κ。 (9)用前次迭代取得的近似值,加本次迭代的改正数,计算外方位元素 的新值。

空间后方交会程序

空间后方交会程序

————————————————————————————————作者:————————————————————————————————日期: ?

一. 实验目的: 掌握摄影测量空间后方交会的原理,利用计算机编程语言实现空间 后方交会外方位元素的解算。 二. 仪器用具及已知数据文件: 计算机wind ows xp 系统,编程软件(VI SUA L C ++6.0),地面控 制点在摄影测量坐标系中的坐标及其像点坐标文件shu ju.txt 。 三. 实验内容: 单张影像的空间后方交会:利用已知地面控制点数据及相应像点坐标根据 共线方程反求影像的外方位元素。 数学模型:共线条件方程式: ) (3)(3)(3) (1)(1)(1Zs Z c Ys Y b Xs X a Zs Z c Ys Y b Xs X a f x -+-+--+-+--= ) (3)(3)(3)(2)(2)(2Zs Z c Ys Y b Xs X a Zs Z c Ys Y b Xs X a f y -+-+--+-+--= 求解过程: (1)获取已知数据。从航摄资料中查取平均航高与摄影机主距;获取 控制点的地面测量坐标并转换为地面摄影测量坐标。 (2)量测控制点的像点坐标并做系统改正。 (3)确定未知数的初始值。在竖直摄影且地面控制点大致分布均匀 的情况下,按如下方法确定初始值,即: n X X S ∑=0,n Y Y S ∑=0,n Z mf Z S ∑=0 φ =ω=κ=0 式中;m为摄影比例尺分母;n为控制点个数。 (4)用三个角元素的初始值,计算个方向余弦,组成旋转矩阵R 。 (5)逐点计算像点坐标的近似值。利用未知数的近似值和控制点的地面坐标代入共 线方程式,逐点计算像点坐标的近似值(x )、(y )。 (6)逐点计算误差方程式的系数和常数项,组成误差方程式。 (7)计算法方程的系数矩阵A A T 和常数项l A T ,组成法方程式。 (8)解法方程,求得外方位元素的改正数dXs ,S dY ,s dZ ,d φ,dω,d κ。 (9)用前次迭代取得的近似值,加本次迭代的改正数,计算外方位元素的新值。

空间后交-前交程序设计实验报告

空间后交-前交程序设计 (实验报告) 姓名: 班级: 学号: 时间:

空间后交-前交程序设计 一、实验目的 用 C 、VB或MATLAB语言编写空间后方交会-空间前方交会程序 ⑴提交实习报告:程序框图、程序源代码、计算结果、体会 ⑵计算结果:像点坐标、地面坐标、单位权中误差、外方位元素及其精度 二、实验数据 f=150.000mm,x0=0,y0=0 三、实验思路 1.利用空间后方交会求左右像片的外方位元素 (1).获取m(于像片中选取两点,于地面摄影测量坐标系中选取同点,分别计算距离,距离比值即为m),x,y,f,X,Y,Z (2).确定未知数初始值Xs,Ys,Zs,q,w,k (3).计算旋转矩阵R (4).逐点计算像点坐标的近似值(x),(y)

(5).组成误差方程式 (6).组成法方程式 (7).解求外方位元素 (8).检查是否收敛,即将求得的外方位元素的改正数与规定限差比较,小于限差即终止;否则用新的近似值重复步骤(3)-(7) 2.利用求出的外方位元素进行空间前交,求出待定点地面坐标(1).用各自像片的角元素计算出左、右像片的方向余弦值,组成旋转矩阵R1,R2 (2).根据左、右像片的外方位元素,计算摄影基线分量Bx,By,Bz (3).计算像点的像空间辅助坐标(X1,Y1,Z1)和(X2,Y2,Z2) (4).计算点投影系数N1和N2 (5).计算未知点的地面摄影测量坐标 四、实验过程 ⑴程序框图 函数AandL %求间接平差时需要的系数

%%%已知 %a=像点坐标x,b=像点坐标y,f内方位元素主距 %φ=q,ψ=w,κ=k %像空间坐标系X,Y,Z %地面摄影测量坐标系Xs,Ys,Zs function [A1,L1,A2,L2]=AandL(a,b,f,q,w,k,X,Y,Z,Xs,Ys,Zs) %%%%%%%%%%%选择矩阵元素 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); %%%%%%%共线方程的分子分母 X_=a1*(X-Xs)+b1*(Y-Ys)+c1*(Z-Zs); Y_=a2*(X-Xs)+b2*(Y-Ys)+c2*(Z-Zs); Z_=a3*(X-Xs)+b3*(Y-Ys)+c3*(Z-Zs); %%%%%%%近似值 x=-f*X_/Z_; y=-f*Y_/Z_; %%%%%%%A组成L组成 a11=1/Z_*(a1*f+a3*x); a12=1/Z_*(b1*f+b3*x); a13=1/Z_*(c1*f+c3*x); a21=1/Z_*(a2*f+a3*y); a22=1/Z_*(b2*f+b3*y); a23=1/Z_*(c2*f+c3*y); a14=y*sin(w)-(x/f*(x*cos(k)-y*sin(k))+f*cos(k))*cos(w); a15=-f*sin(k)-x/f*(x*sin(k)+y*cos(k)); a16=y; a24=-x*sin(w)-(y/f*(x*cos(k)-y*sin(k))-f*sin(k))*cos(w); a25=-f*cos(k)-y/f*(x*sin(k)+y*cos(k)); a26=-x; lx=a-x; ly=b-y; %%%%%%%%%组成一个矩阵,并返回 A1=[a11,a12,a13,a14,a15,a16]; A2=[a21,a22,a23,a24,a25,a26]; L1=lx; L2=ly; 函数deg2dms

空间后方交会的直接解

空间后方交会的直接解 空间后方交会,即由物方已知若干个控制点以及相应的像点坐标,解求摄站的坐标与影像的方位,这是一个摄影测量的基本问题。通常采用最小二乘解算,由于原始的观测值方程是非线性的,因此,一般空间后方交会必须已知方位元素的初值,且解算过程是个迭代解算过程。但是,在实时摄影测量的某些情况下,影像相对于物方坐标系的方位是任意的,且没有任何初值可供参考。这时常规的空间后方交会最小二乘算法就无法处理,而必须建立新的空间后方交会的直接解法。 直接解法的基本思想是将它分成两步:先求出三个已知点i P 到摄站S 的距离i S ;然后求出摄站S 的坐标和影像方位。 物方一已知点()i i i i ,Z ,Y X P 在影像上的成像()i i i ,y x p ,根据影像已知的内方位元素()0 ,y f,x 可求得从摄站()S S S S ,Z ,Y X 到已知点i P 的观测方向i ,βαi 。 () ??? ????-+-= -=2 020 tan tan x x f y y βf x x αi i i i i (1) 距离方程组可以写成如下形式: ?? ??? =+++=+++=+++020202312 1133123232 3322322122 2211221b x x x a x b x x x a x b x x x a x (2) 其中()j ;i ,,i,j S ,b a ij ij ij ij ≠===321cos ?。因此,解算摄站S 到三个 控制点的距离问题,被归结为解算一个三元二次联立方程组的问题。这个方程组的解算方法选用迭代法。 迭代计算公式可写成:

全站仪后方交会法的具体操作步骤+++(优选.)

最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改 全站仪后方交会法的具体操作步骤 开机后先按S.O 键,输入文件名(也可跳过),确定,再按 S.O 键下翻,F2 键选择新点,再按F2 选择后方交会法,再选择一个文件,确定,自定义点名(可跳过),再F1 距离后方交会,输入仪高,确定,在No1#界面里面选择坐标,输入第一个已知点的坐标,在已知点上架好凌镜,测量,再用同样的方法进行第二个点的操作。然后再看残差大不大,不大可以进行计算,后面的就进行定位放线。 以南方全站仪为例: 放样---新点----后方交会法----输入点号---回车----输入仪高---回车---输入A 点已知坐标-----输入棱镜高---测量距离---自动保存-----输入B 点坐标---输入棱高----测量距离----自动保存----计算----记录---(完成) 说的挺多,其实挺简单的,你可以上网下一本说明书,说明书里说的很祥细.网上有很多的.希望对你有帮助. 全站仪后方交会的操作方法请告诉我全站仪后方交会法跟极坐标法的原理是一样的,都要有两个已知条件。极坐标法有两个已知坐标或者一个坐标一个方向就可以了,后方交汇要有两个坐标。步骤:在仪器里面找到后方交汇,有的叫交会测量,有的叫新点。每个仪器不同都不一样。有的一起要输入两个坐标后在测距,有的是输一个测一

个。反正就是输入坐标,然后测距,然后按计算,定向就可以了,后交有条件限制的。交会角度不能小于15 度和大于165 度、更不能再一条直线上。要不然仪器就不能计算出结果。无法交会。对交会距离也有一定限制,得慢慢摸索,总之比极坐标法好用但是精度差点,可以交会2 个坐标,也可以交会很多坐标。坐标都精度高。 最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改

摄影测量——后方交会(matlab)

3.用matlab编程结果 function [XS,YS,ZS,p,w,k]=hfjh x_o=[-0.08615;-0.06899;-0.05340;0.08211;-0.01478;-0.07663;0.01064;0.0 6443]; X=[36589.641,25273.32,2195.17;37631.08,31324.51,728.69; 39100.97,24934.98,2386.50;40426.54,30319.81,757.31]; f=0.15324;m=40000;XS=38437;YS=27963.155;ZS=f*m+1516.9175; p=0;w=0;k=0; R=zeros(3,3); num=1; dx=zeros(6,1); while num==1||abs(dx(4,1)*206225)>6||abs(dx(5,1)*206225)>6||abs(dx(6,1)*206 265)>6; R(1,1)=cos(p)*cos(k)-sin(p)*sin(w)*sin(k); R(1,2)=-cos(p)*cos(k)-sin(p)*sin(w)*sin(k); R(1,3)=-sin(p)*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(p)*cos(k)+cos(p)*sin(w)*sin(k); R(3,2)=-sin(p)*sin(k)+cos(p)*sin(w)*cos(k); R(3,3)=cos(p)*cos(w); x_s=zeros(8,1); x_s(1,1)=-f*(R(1,1)*(X(1,1)-XS)+R(2,1)*(X(1,2)-YS)+R(3,1)*(X(1,3)-ZS) )/(R(1,3)*(X(1,1)-XS)+R(2,3)*(X(1,2)-YS)+R(3,3)*(X(1,3)-ZS)); x_s(2,1)=-f*(R(1,2)*(X(1,1)-XS)+R(2,2)*(X(1,2)-YS)+R(3,2)*(X(1,3)-ZS) )/(R(1,3)*(X(1,1)-XS)+R(2,3)*(X(1,2)-YS)+R(3,3)*(X(1,3)-ZS)); x_s(3,1)=-f*(R(1,1)*(X(2,1)-XS)+R(2,1)*(X(2,2)-YS)+R(3,1)*(X(2,3)-ZS) )/(R(1,3)*(X(2,1)-XS)+R(2,3)*(X(2,2)-YS)+R(3,3)*(X(2,3)-ZS)); x_s(4,1)=-f*(R(1,2)*(X(2,1)-XS)+R(2,2)*(X(2,2)-YS)+R(3,2)*(X(1,3)-ZS) )/(R(1,3)*(X(2,1)-XS)+R(2,3)*(X(2,2)-YS)+R(3,3)*(X(2,3)-ZS)); x_s(5,1)=-f*(R(1,1)*(X(3,1)-XS)+R(2,1)*(X(3,2)-YS)+R(3,1)*(X(1,3)-ZS) )/(R(1,3)*(X(3,1)-XS)+R(2,3)*(X(3,2)-YS)+R(3,3)*(X(3,3)-ZS)); x_s(6,1)=-f*(R(1,2)*(X(3,1)-XS)+R(2,2)*(X(3,2)-YS)+R(3,2)*(X(1,3)-ZS) )/(R(1,3)*(X(3,1)-XS)+R(2,3)*(X(3,2)-YS)+R(3,3)*(X(3,3)-ZS)); x_s(7,1)=-f*(R(1,1)*(X(4,1)-XS)+R(2,1)*(X(4,2)-YS)+R(3,1)*(X(1,3)-ZS) )/(R(1,3)*(X(4,1)-XS)+R(2,3)*(X(4,2)-YS)+R(3,3)*(X(4,3)-ZS)); x_s(8,1)=-f*(R(1,2)*(X(4,1)-XS)+R(2,2)*(X(4,2)-YS)+R(3,2)*(X(1,3)-ZS) )/(R(1,3)*(X(4,1)-XS)+R(2,3)*(X(4,2)-YS)+R(3,3)*(X(4,3)-ZS)); a=zeros(8,6); for i=1:4 Z=(R(1,3)*(X(i,1)-XS)+R(2,3)*(X(i,2)-YS)+R(3,3)*(X(i,3)-ZS));

相关主题
文本预览
相关文档 最新文档