李琳琳
摘要:本文發(fā)揮IDL強大的圖形處理功能,將圖像文件,利用IDL編程語言,顯示在窗口中,并通過指針傳遞,將文本路徑實時更新,進而得到一個完整的獨立式的圖形數(shù)據(jù)讀取、顯示、參數(shù)傳遞等程序。
關(guān)鍵詞:IDL語言;圖形可視化
引言:IDL全稱交互是數(shù)據(jù)語言。是一個擁有強大的數(shù)據(jù)處理能力,與多種編程語言交互式編程,兼容ODBC數(shù)據(jù)庫和跨平臺應(yīng)用開發(fā)的一門編程語言。由于其功能強大,簡單易學(xué),使其應(yīng)用領(lǐng)域頗為廣泛。例如,美國國家航空航天局(NASA)在太空飛船中的使用IDL研究紫外線放射現(xiàn)象;生物專家利用IDL開發(fā)用于觀察人類大腦的核磁共振圖的MRIViewer。還包括大家所熟知的ENVI,也是利用IDL編寫開發(fā)。
1 系統(tǒng)開發(fā)環(huán)境
IDL的圖像顯示可以基于兩種圖像顯示方法實現(xiàn)。一種是直接利用用戶設(shè)定的數(shù)據(jù)進行顯示,這種方法稱為直接圖形法。另一種是利用對象引導(dǎo)程序,即將數(shù)據(jù)顯示在創(chuàng)建顯示窗口的對象窗口里。對于一個程序而言,界面與事件處理則是基礎(chǔ)組成部分。
界面與事件處理一般步驟:
(1)需求分析,列出需要的功能模塊;
(2)設(shè)計流程圖;
(3)設(shè)計邏輯圖;
(4)事件功能的實現(xiàn);
(5)編寫功能函數(shù);
(6)代碼集成,成果顯示。
2 界面設(shè)計
整個程序的界面組成是由的widget_base()組件作為界面容器,在該容器中添加了widget_button()(按鈕組件)、widget_draw()(顯示組件)以及widget_text()(文本組件)等構(gòu)成。
利用widget_base()創(chuàng)建一個容器組件,即程序顯示框架。在file按鈕下,創(chuàng)建文件打開與關(guān)閉按鈕,通過xsize、ysize設(shè)置其大小,利用uname實現(xiàn)組件功能。其代碼如下:
tlb=widget_base(mbar=mbar,/column,/frame)
wfile=widget_button(mbar,value='file',xsize=50,ysize=50)
wexit=widget_button(wfile,value='exit',uname='Exit')
tOpen=widget_button(TBbase,value='open.bmp',/bitmap,$
uname='Open',xsize=40,ysize=40,xoffset=200,yoffset=150)
為了讓程序界面設(shè)計更加友好,因此在程序界面底部添加程序運行版本信息組件。
text=widget_text(tlb,xsize=.6,ysize=.5,value='IDL 8.0 LBV BandMath ')
3 TIFF格式數(shù)據(jù)的圖像顯示
由于遙感影像來源廣泛,因此,數(shù)據(jù)格式也大不相同。例如,ASCII碼(文本)文件需要利用READF函數(shù)進行讀??;JPEG格式文件需要用READ_JPEG()函數(shù)讀??;使用READ_IMAGE讀取BMP圖像。本文主要針對TIFF格式數(shù)據(jù)進行讀取與顯示。
1)數(shù)據(jù)讀取。TM數(shù)據(jù)擁有多波段數(shù)據(jù)信息,為了有目的性的選讀文件,利用n_elements()函數(shù),對輸入的文件進行判斷。對于不符合要求的文件,實施警告處理并要求重新篩選。本文采用簡單的兩組TIFF影像數(shù)據(jù)進行疊加顯示。代碼如下:
file=dialog_pickfile(title='pick file',filter='*.tif')
n=n_elements(file)
if n eq '2' then begin
aa=file[0]
a=read_tiff(aa)
bb=file[1]
b=read_tiff(bb)
endif else begin
war=dialog_message('Erro',/error)
return
endelse
2)數(shù)據(jù)疊加顯示。衛(wèi)星數(shù)據(jù)是按照行進行存儲的,與IDL數(shù)據(jù)掃描的原理一樣。因此,可以利用數(shù)組方法,將得到的兩幅影像進行疊加運算。代碼如下:
image_result=[a+b]
tv,image_result
4 代碼的集成及圖像顯示
兩個事件之間利用指針傳遞,從而實現(xiàn)界面與事件處理之間的關(guān)系。首先,對文件讀取路徑實施初始化,然后對文件讀取路徑進行實時更新,并顯示在程序界面上。
實現(xiàn)主要代碼如下:
Pro A
pState={WINID:WinID,xtext:xtext,$
curpath:'D: '}
widget_control,tlb,set_uvalue=ptr_new(pState)
END
Pro B
widget_control,ev.top,get_uvalue=pstate
END
如果指針傳遞成功,疊加后的數(shù)據(jù)影像便可以完整顯示在創(chuàng)建的顯示區(qū)域了。
參考文獻
[1]董彥卿 IDL程序設(shè)計——數(shù)據(jù)可視化與ENVI二次開發(fā)。高等教育出版社
[2]韓培友 IDL可視化分析與應(yīng)用。西北工業(yè)大學(xué)出版社
[3]蓋迎春 IDL 在青藏鐵路地理信息系統(tǒng)中的應(yīng)用研究,2007(6),冰川凍土