李琳琳
摘要:本文发挥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),冰川冻土