后方交会求外方位元素.docx

上传人:b****6 文档编号:8826458 上传时间:2023-02-02 格式:DOCX 页数:14 大小:225.75KB
下载 相关 举报
后方交会求外方位元素.docx_第1页
第1页 / 共14页
后方交会求外方位元素.docx_第2页
第2页 / 共14页
后方交会求外方位元素.docx_第3页
第3页 / 共14页
后方交会求外方位元素.docx_第4页
第4页 / 共14页
后方交会求外方位元素.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

后方交会求外方位元素.docx

《后方交会求外方位元素.docx》由会员分享,可在线阅读,更多相关《后方交会求外方位元素.docx(14页珍藏版)》请在冰豆网上搜索。

后方交会求外方位元素.docx

后方交会求外方位元素

 

西南交通大学

摄影测量学课程设计报告

单像空间后方交会

求解外方位元素

目录:

作业任务…………………………………………………………3

计算原理…………………………………………………………3

算法流程…………………………………………………………6

源程序……………………………………………………………7

计算结果…………………………………………………………12

结果分析…………………………………………………………13

心得体会…………………………………………………………13

作业任务:

已知条件

摄影机主距f=153.24mm,x0=0,y0=0,像片比例尺为1:

40000,有四对点的像点坐标与相应的地面坐标如下表。

点号

像点坐标

地面坐标

 

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

以单像空间后方交会方法,求解该像片的外方位元素。

计算原理:

如图所示,物点A和摄影中心S在地面摄影测量坐标系中的坐标依次是(X,Y,Z)、(XS,YS,ZS);像点a在像空间坐标系中的坐标是(x,y,-f)。

那么由共线条件方程知,

其中ai,bi,ci是只含三个独立参数ψ,ω,κ的九个方向余弦。

在方程中共有六个未知参数XS,YS,ZS,ψ,ω,κ,所以有三个不在一条直线上的已知地面点坐标就可以求出像片的这六个外方位元素。

由于共线条件方程是非线性方程,为了便于迭代计算,需要把方程用泰勒级数展开,取一次项得到线型表达式,有

用新的符号表示各偏导数后为

其中(x)、(y)是函数近似值,

是外方位元素近似值的改正数,它们的系数为函数的偏导数。

为了便于推导,令

=

=

=

那么有

对于系数,其严密算法(以

为例)如下:

对于竖直摄影而言,像片的角方位元素都是小值,因而各系数的近似值为

为了提高精度和可靠性,通常需要测量四个或更多的地面控制点和对应的像点坐标,采用最小二乘平差方法解算。

此时像点坐标(x,y)作为观测值,加入相应的偶然误差改正数

,可列出每个点的误差方程式

用矩阵表示为

那么由

算法流程:

Ø获取已知数据m,x0,y0,f,Xtp,Ytp,Ztp

Ø量测控制点像点坐标x,y

Ø确定未知数初值Xs0,Ys0,Zs0,0,0,0

Ø组成误差方程式并法化

Ø解求外方位元素改正数

Ø检查迭代是否收敛

具体的流程程序框图如下:

 

否否

 

 

源程序:

程序代码:

#include

#include

usingnamespacestd;

constintN=4;

constintn=6;

/*---------------矩阵相乘---------------------*/

voidmult(double*m1,double*m2,double*result,inti_1,intj_12,intj_2)

{

inti,j,k;

for(i=0;i

for(j=0;j

{

result[i*j_2+j]=0.0;

for(k=0;k

result[i*j_2+j]+=m1[i*j_12+k]*m2[j+k*j_2];

}

return;

}

/*---------------矩阵求逆---------------------*/

voidinverse(doublec[n][n])

{inti,j,h,k;

doublep;

doubleq[n][12];

for(i=0;i

for(j=0;j

q[i][j]=c[i][j];

for(i=0;i

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

{if(i+6==j)

q[i][j]=1;

else

q[i][j]=0;}

for(h=k=0;k

for(i=k+1;i

{if(q[i][h]==0)

continue;

p=q[k][h]/q[i][h];

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

{q[i][j]*=p;

q[i][j]-=q[k][j];

}

}

for(h=k=n-1;k>0;k--,h--)//消去对角线以上的数据

for(i=k-1;i>=0;i--)

{if(q[i][h]==0)

continue;

p=q[k][h]/q[i][h];

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

{q[i][j]*=p;

q[i][j]-=q[k][j];}}

for(i=0;i

{p=1.0/q[i][i];

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

q[i][j]*=p;}

for(i=0;i

for(j=0;j

c[i][j]=q[i][j+6];

}

/*---------------矩阵转置---------------------*/

voidtranspose(double*m1,double*m2,intm,intn)//矩阵转置

{

inti,j;

for(i=0;i

for(j=0;j

m2[j*m+i]=m1[i*n+j];

return;

}

voidmain()

{

doubleXs,Ys,Zs,q,w,k;

doublea[3],b[3],c[3];

doublex0,y0,f;

doublex[N],y[N];

doubleX[N],Y[N],Z[N];

doublex1[N],y1[N];

doublem;

doubleL[2*N];

doubleXX[6];

doubleA[2*N][6];

doubleX0[N],Y0[N],Z0[N],At[6][2*N],result1[6][6],result2[6][1];

inti,n=0;

doublesum=0,m0;

/*---------------输入点地面坐标---------------------*/

X[0]=36589.41;X[1]=37631.08;X[2]=39100.97;X[3]=40426.54;

Y[0]=25273.32;Y[1]=31324.51;Y[2]=24934.98;Y[3]=30319.81;

Z[0]=2195.17;Z[1]=728.69;Z[2]=2386.50;Z[3]=757.31;

/*---------------输入点像片坐标---------------------*/

x[0]=-86.15;x[1]=-53.40;x[2]=-14.78;x[3]=10.46;

y[0]=-68.99;y[1]=82.21;y[2]=-76.63;y[3]=64.43;

cout<

/*-----------------设定外方位元素初始值--------------*/

x0=0;y0=0;f=153.24;m=40000;

Xs=0;Ys=0;Zs=f*m/1000;

q=0;w=0;k=0;

XX[3]=1;

/*------------------迭代计算--------------------------*/

while((XX[3]>6/206265||XX[4]>6/206265||XX[5]>6/206265)&&n<100)

{

/*----------------旋转矩阵R-----------------------*/

a[0]=cos(q)*cos(k)-sin(q)*sin(w)*sin(k);

a[1]=-cos(q)*sin(k)-sin(q)*sin(w)*cos(k);

a[2]=-sin(q)*cos(w);

b[0]=cos(w)*sin(k);

b[1]=cos(w)*cos(k);

b[2]=-sin(w);

c[0]=sin(q)*cos(k)+cos(q)*sin(w)*sin(k);

c[1]=-sin(q)*sin(k)+cos(q)*sin(w)*cos(k);

c[2]=cos(q)*cos(w);

/*-----------------像点坐标计算值------------------*/

for(i=0;i

{

X0[i]=a[0]*(X[i]-Xs)+b[0]*(Y[i]-Ys)+c[0]*(Z[i]-Zs);

Y0[i]=a[1]*(X[i]-Xs)+b[1]*(Y[i]-Ys)+c[1]*(Z[i]-Zs);

Z0[i]=a[2]*(X[i]-Xs)+b[2]*(Y[i]-Ys)+c[2]*(Z[i]-Zs);

x1[i]=x0-f*X0[i]/Z0[i];

y1[i]=y0-f*Y0[i]/Z0[i];

}

/*-------------误差方程中各偏导数的值--------------*/

for(i=0;i

{

A[2*i][0]=((a[0]*f+a[2]*(x[i]-x0)))/Z0[i];

A[2*i][1]=((b[0]*f+b[2]*(x[i]-x0)))/Z0[i];

A[2*i][2]=((c[0]*f+c[2]*(x[i]-x0)))/Z0[i];

A[2*i][3]=(y[i]-y0)*sin(w)-((x[i]-x0)*((x[i]-x0)*cos(k)-y[i]*sin(k))/f+f*cos(k))

*cos(w);

A[2*i][4]=-f*sin(k)-(x[i]-x0)*((x[i]-x0)*sin(k)+(y[i]-y0)*cos(k))/f;

A[2*i][5]=y[i]-y0;

L[2*i]=x[i]-x1[i];

A[1+2*i][0]=((a[1]*f+a[2]*(y[i]-y0)))/Z0[i];

A[1+2*i][1]=((b[1]*f+b[2]*(y[i]-y0)))/Z0[i];

A[1+2*i][2]=((c[1]*f+c[2]*(y[i]-y0)))/Z0[i];

A[1+2*i][3]=-(x[i]-x0)*sin(w)-((y[i]-y0)*((x[i]-x0)*cos(k)-(y[i]-y0)*sin(k))/f-f*sin(k))

*cos(w);

A[1+2*i][4]=-f*cos(k)-(y[i]-y0)*((x[i]-x0)*sin(k)+(y[i]-y0)*cos(k))/f;

A[1+2*i][5]=-x[i]+x0;

L[1+2*i]=y[i]-y1[i];

}

/*-------------------解法方程--------------------*/

transpose(&A[0][0],&At[0][0],2*N,6);

mult(&At[0][0],&A[0][0],&result1[0][0],6,2*N,6);

inverse(result1);

mult(&At[0][0],L,&result2[0][0],6,2*N,1);

mult(&result1[0][0],&result2[0][0],&XX[0],6,6,1);

Xs+=XX[0];

Ys+=XX[1];

Zs+=XX[2];

q+=XX[3];

w+=XX[4];

k+=XX[5];

n++;

}

/*----------------旋转矩阵R-----------------------*/

cout<<"迭代次数为:

"<

printf("\n像片外方位元素的解\n");

cout<<"航向顷角q:

"<

cout<<"旁向倾角w:

"<

cout<<"像片旋角k:

"<

cout<<"Xs"<

cout<<"Ys"<

cout<<"Zs"<

cout<

cout<<"所有坐标已经内置,所以不显示了"<

计算结果:

XS=39795.5

YS=27476.5

ZS=7572.69

ψ=-0.00398694

ω=0.00211388

κ=-0.067578

结果分析:

由计算结果可知,最后的计算结果是符合6秒的限差要求的。

由于其中误差未计算,所以精度指标还不明确。

心得体会:

这次的单张航片后方交会计算外方位元素的实习让我对后方交会的原理和解算过程有了更深入的了解,同时对与之相关的一系列知识进行了一个回顾复习。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1