李琳琳
摘要:本文發揮IDL強大的圖形處理功能,將圖像文件,利用IDL編程語言,顯示在窗口中,并通過指針傳遞,將文本路徑實時更新,進而得到一個完整的獨立式的圖形數據讀取、顯示、參數傳遞等程序。
關鍵詞:IDL語言;圖形可視化
引言:IDL全稱交互是數據語言。是一個擁有強大的數據處理能力,與多種編程語言交互式編程,兼容ODBC數據庫和跨平臺應用開發的一門編程語言。由于其功能強大,簡單易學,使其應用領域頗為廣泛。例如,美國國家航空航天局(NASA)在太空飛船中的使用IDL研究紫外線放射現象;生物專家利用IDL開發用于觀察人類大腦的核磁共振圖的MRIViewer。還包括大家所熟知的ENVI,也是利用IDL編寫開發。
1 系統開發環境
IDL的圖像顯示可以基于兩種圖像顯示方法實現。一種是直接利用用戶設定的數據進行顯示,這種方法稱為直接圖形法。另一種是利用對象引導程序,即將數據顯示在創建顯示窗口的對象窗口里。對于一個程序而言,界面與事件處理則是基礎組成部分。
界面與事件處理一般步驟:
(1)需求分析,列出需要的功能模塊;
(2)設計流程圖;
(3)設計邏輯圖;
(4)事件功能的實現;
(5)編寫功能函數;
(6)代碼集成,成果顯示。
2 界面設計
整個程序的界面組成是由的widget_base()組件作為界面容器,在該容器中添加了widget_button()(按鈕組件)、widget_draw()(顯示組件)以及widget_text()(文本組件)等構成。
利用widget_base()創建一個容器組件,即程序顯示框架。在file按鈕下,創建文件打開與關閉按鈕,通過xsize、ysize設置其大小,利用uname實現組件功能。其代碼如下:
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)
為了讓程序界面設計更加友好,因此在程序界面底部添加程序運行版本信息組件。
text=widget_text(tlb,xsize=.6,ysize=.5,value='IDL 8.0 LBV BandMath ')
3 TIFF格式數據的圖像顯示
由于遙感影像來源廣泛,因此,數據格式也大不相同。例如,ASCII碼(文本)文件需要利用READF函數進行讀??;JPEG格式文件需要用READ_JPEG()函數讀??;使用READ_IMAGE讀取BMP圖像。本文主要針對TIFF格式數據進行讀取與顯示。
1)數據讀取。TM數據擁有多波段數據信息,為了有目的性的選讀文件,利用n_elements()函數,對輸入的文件進行判斷。對于不符合要求的文件,實施警告處理并要求重新篩選。本文采用簡單的兩組TIFF影像數據進行疊加顯示。代碼如下:
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)數據疊加顯示。衛星數據是按照行進行存儲的,與IDL數據掃描的原理一樣。因此,可以利用數組方法,將得到的兩幅影像進行疊加運算。代碼如下:
image_result=[a+b]
tv,image_result
4 代碼的集成及圖像顯示
兩個事件之間利用指針傳遞,從而實現界面與事件處理之間的關系。首先,對文件讀取路徑實施初始化,然后對文件讀取路徑進行實時更新,并顯示在程序界面上。
實現主要代碼如下:
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
如果指針傳遞成功,疊加后的數據影像便可以完整顯示在創建的顯示區域了。
參考文獻
[1]董彥卿 IDL程序設計——數據可視化與ENVI二次開發。高等教育出版社
[2]韓培友 IDL可視化分析與應用。西北工業大學出版社
[3]蓋迎春 IDL 在青藏鐵路地理信息系統中的應用研究,2007(6),冰川凍土