摄影测量与遥感课程设计B11090507.docx

上传人:b****3 文档编号:10504788 上传时间:2023-05-26 格式:DOCX 页数:15 大小:92.09KB
下载 相关 举报
摄影测量与遥感课程设计B11090507.docx_第1页
第1页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第2页
第2页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第3页
第3页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第4页
第4页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第5页
第5页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第6页
第6页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第7页
第7页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第8页
第8页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第9页
第9页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第10页
第10页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第11页
第11页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第12页
第12页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第13页
第13页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第14页
第14页 / 共15页
摄影测量与遥感课程设计B11090507.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

摄影测量与遥感课程设计B11090507.docx

《摄影测量与遥感课程设计B11090507.docx》由会员分享,可在线阅读,更多相关《摄影测量与遥感课程设计B11090507.docx(15页珍藏版)》请在冰点文库上搜索。

摄影测量与遥感课程设计B11090507.docx

摄影测量与遥感课程设计B11090507

课程设计报告

(2013/2014学年第一学期)

 

题目:

立体像对的前方交会

 

专业测绘工程

学生姓名丁玉堃

班级学号B11090507

指导教师杨立君

指导单位地理与生物信息学院

日期2013年12月29日

 

1、内容与要求

(1)以读文本文件的形式读取立体像对的外方位元素值;

(2)以读取文本文件的形式读取同名像点坐标;

(3)计算投影系数,像空间辅助坐标系坐标及地面摄影测量坐标系坐标;

(4)首先自己设计好界面和算法,解算中间参数及成果应通过窗口或对话框进行显示;

(5)界面友好,可操作性强,输入信息符合专业规范;

(6)必须完成所要求的各基本功能;

(7)程序设计语言可根据个人情况进行选择,建议使用IDL交互式程序设计语言。

2、基本原理

立体像对与所摄影地面存在着一定几何关系,这种关系可以用数学表达式来描述,若在S1,S2两个摄站点对地面摄影,获取一个立体像对,任一地面点A在该像对的左右相片上的构象为a1,a2。

现已知这两张相片的内外方位元素,设想将该相片按内外方位元素值置于摄影时的位置,显然同名射线S1a1与S2a2必然交于地面点A。

这种由立体像对中两张像片的内,外方位元素和像点坐标来确定相应地面点的地面坐标的方法,称为空间前方交会。

空间前方交会基本关系式:

要确定像点与其对应的地面点的数学表达式,要设定D-XYZ地面摄影测量坐标系,S1-U1V1W1及S2-U2V2W2分别为左右相片的相空间辅助坐标系,且两个像空间辅助坐标系的三个轴系分别与D-XYZ三轴平行。

设地面点A在D-XYZ坐标系中的坐标为(X,Y,Z),地面点A在S1-U1V1W1及S2-U2V2W2中的坐标分别为(U1,V1,W1)及(U2,V2.W2),A点相应像点a1,a2的像空间坐标为(x1,y1,-f),(x2,y2,-f),像点的像空间辅助坐标为(u1,v1,w1),(u2,v2,w2),则有:

(1-1)

式中的R1,R2为由已知的外方位角元素计算的左右像片的旋转矩阵,右摄影站点S2,在S1-U1V1W1中的坐标,即摄影基线B的三个分量Bu,Bv,Bw,可由外方位元素计算:

Bu=Xs2-Xs1

Bv=Ys2-Ys1(1-2)

Bw=Zs2-Zs1

因左右像空间辅助坐标系及D-XYZ相互平行,且设站点,像点,地面三点共线,由此可得出:

(1-3)

式中的N1,N2分别称为左右像点的投影系数。

U1,V1,W1为地面点A在S1-U1V1W1中的坐标;U2,V2,W2为地面点A在S2-U2V2W2中的坐标,

(1-4)

最后得出计算地面点坐标公式:

X=Xs1+U1=Xs2+U2

Y=Ys1+V1=Ys2+V2(1-5)

Z=Zs1+W1=Zs2+W2

一般地,在计算地面点Y坐标时,应取值,即

Y=0.5[(Ys1+N1v1)+(Ys2+N2v2)]

由此可得求投影系数的计算式为:

;(1-6)

上述公式即为立体像对前方交会基本公式。

3、程序设计思路

 

 

 

程序设计思路:

建立顶级tlb控件,在上面添加读取文件和计算结果的按钮。

分别为按钮添加event响应事件,建立全局指针便于不同事件间数值的传递。

具体计算结果的函数可以事先写好,并保证运行正确。

4、源程序代码

PROExitProcedure,event;退出程序

WIDGET_CONTROL,event.TOP,/DESTROY

end

;菜单系统响应事件

PROOpenProcedure,event

Result=DIALOG_MESSAGE('File->OpenSelected!

',/INFORMATION)

END

PROSaveProcedure,event

Result=DIALOG_MESSAGE('File->SaveSelected!

',/INFORMATION)

END

PROCopyProcedure,event

Result=DIALOG_MESSAGE('Edit->CopySelected!

',/INFORMATION)

END

PROPasteProcedure,event

Result=DIALOG_MESSAGE('Edit->PasteSelected!

',/INFORMATION)

END

PROContentsProcedure,event

Result=DIALOG_MESSAGE('Help->ContentsSelected!

',/INFORMATION)

END

PROFunctionProcedure,event

Result=DIALOG_MESSAGE('Help->Topic->FunctionSelected!

',/INFORMATION)

END

PROAboutProcedure,event

Result=DIALOG_MESSAGE('摄影测量双向前方交会',/INFORMATION)

END

protestDialog,event;读入外方位元素值

widget_control,event.TOP,get_Uvalue=pState

file1=dialog_pickfile($

title='选择一个TXT',$

path='e:

',$

filter='*.txt')

nlines=file_lines(file1)

N=strtrim(STRING(nlines/2),2)

tmp=''

;打开文件

openr,lun,file1,/get_lun

readf,lun,tmp

var=double(strsplit(tmp,/extract))

rownum=N_elements(var)

Wf=DINDGEN(rowNum,nLines-1)

readf,lun,Wf

Wf=[[var],[Wf]]

Wf=strtrim(STRING(Wf),2)

(*pState).Wf=Wf

;result-dialog_message('ilove'+STRING(13b)+'you')

;13b是ascii码的回车符

;10b是ascii码的换行符

WIDGET_CONTROL,(*pState).MyLabel,SET_VALUE='成功读入了'+n+'组外方位元素值'$

+STRING(10b)

widget_control,event.TOP,set_Uvalue=pState

;mystring='成功读取外方位元素值'

;Result=Dialog_message(mystring,/information)

end

protestDialog2,event;读取同名像点文件

widget_control,event.TOP,get_Uvalue=pState

file1=dialog_pickfile($

title='选择一个TXT',$

path='e:

',$

filter='*.txt')

nlines=file_lines(file1)

N=strtrim(STRING(nlines),2)

tmp=''

;打开文件

openr,lun,file1,/get_lun

readf,lun,tmp

var=double(strsplit(tmp,/extract))

rownum=N_elements(var)

Tm=DINDGEN(rowNum,nLines-1)

readf,lun,Tm

(*pState).Tm=[[var],[Tm]]

;mystring='成功读取同名像点坐标值'

;Result=Dialog_message(mystring,/information)

WIDGET_CONTROL,(*pState).MyLabel,SET_VALUE='成功读入了'+n+'组同名像点坐标值'

widget_control,event.TOP,set_Uvalue=pState

end

prophoto,event

widget_control,event.TOP,get_Uvalue=pState

print,(*pState).Wf

print,(*pState).Tm

Wf=(*pState).Wf

Tm=(*pState).Tm

pi=3.1415926

Wf[*,2:

3]=Wf[*,2:

3]/180.0*pi

;外方位

R1=DINDGEN(3,3)

R2=DINDGEN(3,3)

Fuzhu1=DINDGEN(1,3)

Fuzhu2=DINDGEN(1,3);像空间辅助坐标系

a1=double(cos(Wf[0,3])*cos(Wf[2,3])-sin(Wf[0,3])*sin(Wf[1,3])*sin(Wf[2,3]))

a2=double(-cos(Wf[0,3])*sin(Wf[2,3])-sin(Wf[0,3])*sin(Wf[1,3])*cos(Wf[2,3]))

a3=double(-sin(Wf[0,3])*cos(Wf[1,3]))

b1=double(cos(Wf[1,3])*sin(Wf[2,3]))

b2=double(cos(Wf[1,3])*cos(Wf[2,3]))

b3=double(-sin(Wf[1,3]))

c1=double(sin(Wf[0,3])*cos(Wf[2,3])+cos(Wf[0,3])*sin(Wf[1,3])*sin(Wf[2,3]))

c2=double(-sin(Wf[0,3])*sin(Wf[2,3])+cos(Wf[0,3])*sin(Wf[1,3])*cos(Wf[2,3]))

c3=double(cos(Wf[0,3])*cos(Wf[1,3]))

;

a11=double(cos(Wf[0,2])*cos(Wf[2,2])-sin(Wf[0,2])*sin(Wf[1,2])*sin(Wf[2,2]))

a22=double(-cos(Wf[0,2])*sin(Wf[2,2])-sin(Wf[0,2])*sin(Wf[1,2])*cos(Wf[2,2]))

a33=double(-sin(Wf[0,2])*cos(Wf[1,2]))

b11=double(cos(Wf[1,2])*sin(Wf[2,2]))

b22=double(cos(Wf[1,2])*cos(Wf[2,2]))

b33=double(-sin(Wf[1,2]))

c11=double(sin(Wf[0,2])*cos(Wf[2,2])+cos(Wf[0,2])*sin(Wf[1,2])*sin(Wf[2,2]))

c22=double(-sin(Wf[0,2])*sin(Wf[2,2])+cos(Wf[0,2])*sin(Wf[1,2])*cos(Wf[2,2]))

c33=double(cos(Wf[0,2])*cos(Wf[1,2]))

R2=[[a1,b1,c1],[a2,b2,c2],[a3,b3,c3]]

R1=[[a11,b11,c11],[a22,b22,c22],[a33,b33,c33]]

Fuzhu1=R1##transpose(Tm[*,0])

Fuzhu2=R2##transpose(Tm[*,1])

Bu=Tm[0,1]-Tm[0,0]

Bv=Tm[1,1]-Tm[1,0]

Bw=Tm[2,1]-Tm[2,0]

N1=(Bu*Fuzhu2[0,2]-Bw*Fuzhu2[0,0])/(Fuzhu1[0,0]*Fuzhu2[0,2]$

-Fuzhu2[0,0]*Fuzhu1[0,2])

N2=(Bu*Fuzhu1[0,2]-Bw*Fuzhu1[0,0])/(Fuzhu1[0,0]*Fuzhu2[0,2]$

-Fuzhu2[0,0]*Fuzhu1[0,2])

DX=Tm[0,0]+N1*Fuzhu1[0,0]

DY=0.5*((Tm[1,0]+N1*Fuzhu1[0,1])+(Tm[1,1]+N2*Fuzhu2[0,1]))

DZ=Tm[2,0]+N1*Fuzhu1[0,2]

Dm=[Dx,Dz,Dy]

Openw,lun,'E:

\testdata.txt',/get_lun

printf,lun,Dm

;Openu,lun,'E:

\testdata.txt',/get_lun

;printf,lun,N1

free_lun,lun

mystring='计算出的坐标值已保存到“testdata.txt”中'

Result=Dialog_message(mystring,/information)

widget_control,event.TOP,set_Uvalue=pState

end

propphoto

tlb=widget_base($

xsize=500,$

ysize=400,$

xoffset=500,$

yoffset=100,$

mbar=SystemMenuBase,$;创建菜单系统

;/column,$

title='摄影测量学')

FileMenu=WIDGET_BUTTON(SystemMenuBase,VALUE='&File',/MENU)

MyOpen=WIDGET_BUTTON(FileMenu,VALUE='&Open',EVENT_PRO='OpenProcedure')

MySave=WIDGET_BUTTON(FileMenu,VALUE='&Save',EVENT_PRO='SaveProcedure')

MyExit=WIDGET_BUTTON(FileMenu,VALUE='&Exit',EVENT_PRO='ExitProcedure',/SEPARATOR)

EditMenu=WIDGET_BUTTON(SystemMenuBase,VALUE='&Edit',/MENU)

Mycopy=WIDGET_BUTTON(EditMenu,VALUE='&Copy',EVENT_PRO='CopyProcedure')

MyPaste=WIDGET_BUTTON(EditMenu,VALUE='&Paste',EVENT_PRO='PasteProcedure')

HelpMenu=WIDGET_BUTTON(SystemMenuBase,VALUE='&Help',/MENU)

MyContents=WIDGET_BUTTON(HelpMenu,VALUE='C&ontents',EVENT_PRO='ContentsProcedure')

MyTopic=WIDGET_BUTTON(HelpMenu,VALUE='&Topic',/MENU)

MyFunction=WIDGET_BUTTON(MyTopic,VALUE='&Function',EVENT_PRO='FunctionProcedure')

MyAbout=WIDGET_BUTTON(MyTopic,VALUE='&About',EVENT_PRO='AboutProcedure')

widget_control,tlb,/realize

;wText=WIDGET_TEXT(tlb,/EDITABLE,XSIZE=90)

wyButton4=WIDGET_BUTTON(tlb,VALUE='导入外方位数据',$

EVENT_PRO='testDialog',XSIZE=100,YSIZE=40,$

XOFFSET=380,YOFFSET=50)

wButton3=WIDGET_BUTTON(tlb,VALUE='导入同名像点数据',$

EVENT_PRO='testDialog2',XSIZE=100,YSIZE=40,$

XOFFSET=380,YOFFSET=100)

wButton2=WIDGET_BUTTON(tlb,VALUE='计算地面点坐标',$

EVENT_PRO='photo',XSIZE=100,YSIZE=40,$

XOFFSET=380,YOFFSET=150)

wButton1=WIDGET_BUTTON(tlb,VALUE='EXIT',/align_center,$

EVENT_PRO='ExitProcedure',XSIZE=100,YSIZE=40,$

XOFFSET=380,YOFFSET=200)

;MyText1=WIDGET_TEXT(tlb,XOFFSET=0,SCR_XSIZE=500,$

;YOFFSET=4,SCR_YSIZE=4)

;MyText2=WIDGET_TEXT(tlb,XOFFSET=0,SCR_XSIZE=500,$

;YOFFSET=42,SCR_YSIZE=4)

MyLabel=WIDGET_LABEL(tlb,XOFFSET=10,SCR_XSIZE=300,$

YOFFSET=50,SCR_YSIZE=200,/SUNKEN_FRAME,$

VALUE='欢迎使用摄影测量应用程序',/ALIGN_CENTER)

pState=Ptr_new({$;创建指针结构变量

;wButton2:

wButton2,$

;wButton3:

wButton3,$

;wButton4:

wButton4,$

MyLabel:

MyLabel,$

Wf:

dindgen(3,4),$

Tm:

dindgen(3,2)$

})

widget_control,tlb,set_Uvalue=pState

XMANAGER,'pphoto',tlb

end

5、测试数据及其结果分析

程序读取的是同名像点坐标.txt、外方位元素值.txt两个txt文件。

具体数据为:

 

picname

xs

ys

zs

phi

ow

k

HT01R01E28Z0103.jpg

-6911.427876

4181.156861

157.7731874

0.348309888

-0.309135767

0.081363007

HT01R01E28Z0104.jpg

-6922.011458

4203.665077

151.6220453

0.382310345

-0.335320345

0.082770169

p1

-2.994926

98.313214

-165.370335

p2

115.30009

106.807568

-166.986144

 

运行界面:

运行结果会被存入一个txt文件中:

地面点坐标

-6911.6950,4203.2251,136.9591

投影系数:

0.125,0.088

辅助坐标:

-2.12,97.41,-165.91

116.24,106.00,-165.22

6、调试过程中的问题

1、数据读取需要是按行读取矩阵,便于后来的运算。

2、编写界面时,要弄清楚思路。

3、变量需要通过指针传递其Uvalue。

4、变量的数据类型要时刻注意。

7、课程设计总结

在这次实验中,我们组拿到的题目是立体相对的前方交会,老师建议我们用IDL语言进行编写,听到这个消息,我们觉得压力很大,因为从来没有接触过IDL语言,不知道自己能不能编出最后的程序。

第一天实验开始后,我们先分成两组,一组先研究算法,另一组钻研IDL语言,经过一天的学习和论,在实验开始后的第二天下午,我们正式开始编写,同时我们也做了一个决定,由卞鸿磊和丁晨用C#语言进行编写,我和李贻然同学边行学习,边用IDL语言进行编写,以保能按时完成软件。

因为是第一次用IDL语言来编写软件,很多方面都得从头学,最困难的地方就是界面程序的编写,在这一点上,耗费了较多的时间,一开始的界面都很丑,在反复修改后,才变得较为美观,不过用IDL语言也有很多优点,它更多的系统函数和方便的矩阵运算都是其他语言不能比的。

通过这一次的实验,让我们更好地掌握了摄影测量学的基本内容,同时也了解了一门新语言IDL,收获很大。

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2