遥感图像处理及ENVI IDL操作实践(26P).doc

上传人:仙人指路1688 文档编号:4193563 上传时间:2023-04-09 格式:DOC 页数:26 大小:695.50KB
返回 下载 相关 举报
遥感图像处理及ENVI IDL操作实践(26P).doc_第1页
第1页 / 共26页
遥感图像处理及ENVI IDL操作实践(26P).doc_第2页
第2页 / 共26页
遥感图像处理及ENVI IDL操作实践(26P).doc_第3页
第3页 / 共26页
遥感图像处理及ENVI IDL操作实践(26P).doc_第4页
第4页 / 共26页
遥感图像处理及ENVI IDL操作实践(26P).doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《遥感图像处理及ENVI IDL操作实践(26P).doc》由会员分享,可在线阅读,更多相关《遥感图像处理及ENVI IDL操作实践(26P).doc(26页珍藏版)》请在三一办公上搜索。

1、IDL基本操作介绍课题名称: 遥感图像处理及ENVIIDL操作实践 任课教师: 目录一、IDL简介31.Idl特殊符号说明31.1.大写31.2.注释符31.3.续航符32.IDL语法基础32.1.变量32.2.数组53.IDL编程基础63.1.定义和编译程序63.2.命名和编译源文件73.3.程序控制语句7二、IDL基本操作介绍91.题目及要求92.解决方案92.1数据说明92.2二进制文件读取102.3各像元的线性变化趋势及显著性概率计算122.4有效物候区返青期平均变化趋势统计142.5制图输出线性变化趋势17三、总结26一、 IDL简介IDL(Interactive Data Lang

2、uage)交互式数据语言是进行二维及多维数据可视化分析及应用开发的理想软件工具。作为面向矩阵、语法简单的第四代可视化语言,IDL 致力于科学数据的可视化和分析,是跨平台应用开发的最佳选择。它集可视、交互分析、大型商业开发为一体,为用户提供了完善、灵活、有效的开发环境。IDL为用户提供了可视化数据分析的解决方案,既可以让科学研究人员交互式浏览和分析数据,又为程序员提供了快速程序原型开发并跨平台发布的高级编程工具。IDL使科学家无需写大量的传统程序就可直接研究数据。IDL被广泛应用于地球科学、医学影像、图像处理、软件开发、大学教学、实验室研究、测试技术、天文、信号处理、防御工程、数学分析、统计等诸

3、多领域。1. Idl特殊符号说明在IDL程序中,当在命令行中输入命令时,IDL将会识别大量的特殊字符。下面介绍几种较为重要的特殊符号。1.1. 大写IDL 对字母的大小写并不敏感,但与操作系统打交道的命令(例如:UNIX 操作系统对 IDL 所打开的文件名的大小写敏感)和执行字符串比较命令时除外。1.2. 注释符在 IDL 命令中,分号 “;”(英文半角符号)表示注释内容的开始,分号右边的任何文本都被视为是注释,IDL 解释器将忽略它。例如:pro test ;A simple program print,Hello World !,$ LYT;This line prints a messa

4、geend1.3. 续航符IDL 中的续行符是表示美元的符号“$” 。这表示 IDL 语句延续到下一语句行(见上例)。2. IDL语法基础12.2.1. 变量IDL提供了灵活的数据类型定义方法,在任何时候,IDL都允许用户创建新的变量,或重新定义已有的变量。变量名必须以字母开头。它们可以包括其他字母、数字、下划线、美元符号。一个变量名最长可达 255 个字符。变量有两个重要属性: 数据类型和组织结构。 数据类型指出属于数据类型中的哪一种。IDL 提供了非常丰富的数据类型,用户可以实际需求经行选择。表1显示了每一种数据类型及其描述,每种类型创建的变量的字节大小、变量创建方式、数据类型之间强制转换

5、的 IDL 函数名称。除了数据类型外,每一个变量有一个组织结构。有效的组织结构有标量(例如单个数值) 、矢量(真正的一维数组) 、数组(最高可达八维)和 IDL 结构(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段)。表1 IDL基本数据类型数字类型变量数据类型描述字节数创建变量数据类型函数byte字节型1Var=0BthisVar=Byte(variable)int16位有符号整型2Var=0thisVar=Fix(variable)long32位有符号长整型4Var=0LthisVar=Long(variable)long6464位有符号整型8Var=0LLthisVar

6、=Long64(variable)uint16位无符号整型2Var=0UthisVar=UInt(variable)ulong32位无符号长整型4Var=0ULthisVar=ULong(variable)ulong6464位无符号整型8Var=0ULLthisVar=Ulong64(variable)float浮点型4Var=0.0thisVar=Float(variable)double双精度浮点型8Var=0.0DthisVar=Double(variable)complex复数8Var=Complex(0.0,0.0)thisVar=Complex(variable)dcomplex双

7、精度复数16Var=Dcomplex(0.0D,00D)thisVar=DComplex(variable)非数字类型变量数据类型描述字节数创建变量数据类型函数string字符串0-32767Var=或Var=”thisVar=String(variable)pointer指针4Var=Ptr_New()Noneobjref对象4Var=Obj_New()Nonestuct结构体2.2. 数组IDL中可以为任何IDL数据类型创建18维的数组。数组操作的运行速度往往优于循环操作,且语法更为精炼。在IDL中利用方括号“ ”创建数组。创建多维数组时可以使用嵌套的方括号。值的注意的是,IDL中数组元素

8、的存储是按列进行的。按列存储的方式意味着连续的数组元素也将按顺序被存储,而且数组的第一维(列)变化的最快。下标的顺序先是列标,后是行标。IDL的数组下标是从零开始的正值。数组的下标可以是标量也可以是矢量。进行下标操作时,如果下标超过了范围,则该下标被转换为在允许范围内的最小或最大的下标值。例如,创建一维数组vector和多为数组array:; 创建一维数组vectorIDL vector=1,2,3IDL help,vectorVECTOR INT = Array3IDL print,vector; 输出IDL 输出窗口中将会如下所示: 1 2 3 ; 创建多维数组arrayIDL array

9、=1,2,3,4,5,6IDL help,arrayARRAY INT = Array3, 2IDL print, array1 2 34 5 6IDL的内建函数允许用户按指定的类型创建数组,同时数组中的每个元素都被初始化为灵活索引值(下标值)。创建和初始化零数组和索引数组的函数见表2所示。表2 创建和初始化零数组和索引数组的函数数据类型零数组索引数组bytebytarr( )bindgen( )intintarr( )indgen( )longlonarr( )lindgen( )long64lon64arr( )l64indgen( )uintuintarr( )uindgen( )ulo

10、ngulonarr( )ulindgen( )ulong64ulon64arr( )ul64indgen( )floatfltarr( )findgen( )doubledblarr( )dindgen( )complexComplex arr( )cindgen( )dcomplexDcomplex arr( )dcindgen( )stringstrarr( )sindgen( )例如,创建一个七元素的整型零数组和一个六元素的浮点型索引数组:IDL zeros=intarr(7) ; 创建一个七元素的整型零数组IDL index=findgen(6) ; 创建一个六元素的浮点型索引数组ID

11、L print,zeros,index 0 0 0 0 0 0 0 0.000000 1.00000 2.00000 3.00000 4.00000 5.000003. IDL编程基础结构化程序设计是 E.W.Dijikstra 在 1965 年提出的。它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、重复三种基本控制结构构造。编写 IDL 程序也需要对 IDL 中的相关控制语句进行简单介绍。 1.2.3.3.1. 定义和编译程序IDL程序包括过程和函数两种:(1). 过程(pro)过程一般将几个相关的操作加到一个程序模块中。过程以pr

12、o开头,end结束。例如:;过程名 test1, 参数 para1,para2,.pro test1,para1,para2,. 过程语句块end(2). 函数(function)函数一般将一个操作加载到一个程序模块中,并返回结果函数以function开头,end结束,并包括一个return语句返回结果。例如:;函数名 test2,参数 para1,para2,.,返回值 para1function test2,para1,para2,. 过程语句块 return ,para1endIDL 命令要么是过程,要么是函数。过程和函数的区别在于:在过程命令中,参数和关键字仅排列在一个命令行上;在函数

13、命令中,位置参数和关键字参数放在一对圆括号中的。但是,最重要的区别是IDL函数会返回一个值,等号左边的一个变量用于返回该值。这是IDL中函数命令和过程命令根本的区别。 函数命令总是返回一个值,这个数值必须赋给一个变量。函数返回值可能是任何一种IDL变量,包括数值、数组或结构。3.2. 命名和编译源文件命名一个IDL源文件的标志形式是在过程或函数名称后加上扩展名.pro过程和函数都可以通过“.compile”命令进行手动编译或是通过IDL IDE环境进行编译。当需要时,过程和函数会在运行时自动编译,如果IDL调用的过程或函数之前未被编译过,则IDL会搜索路径下所有的文件夹以搜索源文件的名称。3.

14、3. 程序控制语句1.2.3.3.1.3.2.3.3.3.3.1. 条件语句 (1). IF 语句 当特定的条件为真时,if语句执行单个语句或单个语句模块: IF 条件 THEN 语句 IF 条件 THEN BEGIN 语句 ENDIF IF 条件 THEN 语句 ELSE 语句 IF 条件 THEN BEGIN 语句 ENDIF ELSE BEGIN 语句 ENDELSE 在以上的所有行驶中,“条件”是一个标量表达式,其值为真或假。在前两种形式中,当条件为真时,执行单个语句或语句模块;在后面两种行驶中,当条件为假时,“else”语句将执行单个的语句或语句模块。(2). CASE 语句 CAS

15、E语句根据一个标量的表达式来选择某个语句或语句块运行。 CASE 表达式 OF 情况1: 情况2:语句 情况3:BEGIN 语句 END ELSE: 语句 ENDCASE 当表达式和其中的某个情况匹配,相应的语句被执行, case 语句结束,如果没有匹配的情况,那么执行 else 下的语句,如果没有 else 语句,将会发生错误,建议在case 语句中都加上else。(3). SWITCH语句 SWITCH跟CASE类似,但与CASE的不同在于它能执行到底。3.3.2. 跳转语句 3.1.3.2.3.3.(1). BREAK BREAK提供了一个从循环中(FOR,WHILE)或CASE、SWI

16、TCH等状态中快速退出的方法。(2). CONTINUE CONTINUE 提供了一个从循环中(FOR, WHILE,和 REPEAT)中进入下一步循环的方法。以FOR为例,学习下CONTINUE的用法。1.2.3.3.1.3.2.3.3.3.3.1.3.3.2.3.3.3. 循环语句 (1). FOR 语句 FOR 循环运用计数器来多次执行一个或语句块 ,该循环按特定的步长从初始值上升或下降至结尾值。 FOR I=V1,V2 DO 语句 FOR I=V1,V2,INC DO 语句 FOR I=V1,V2,INC DO BEGIN 语句 ENDFOR 默认条件下增量为1,也可以自定义增量。(2

17、). WHILE 语句 当特定的条件为真,WHILE语句执行单个语句或语句块 。 WHILE 条件 DO 语句 WHILE 条件 DO BEGIN 语句 ENDWHILE二、 IDL基本操作介绍下文以解决一个生态学问题为例,详细讲解IDL基本操作步骤。1. 题目及要求问题:现有北美19822006年每年的植被返青期数据。要求:(1). 计算出各像元的线性变化趋势及显著性概率。(2). 统计出各个行政单元(州)内有效物候区中的返青期平均变化趋势。(3). 对线性变化趋势制图输出。2. 解决方案122.1 数据说明北美19822006年每年的植被返青期数据greenup_1982_2006,共25

18、个波段,每个波段代表每年一景植被返青期数据,影像拍摄时间为每年的第80天或第100天。影像头文件信息见图1。图1 北美19822006年每年的植被返青期数据greenup_1982_2006头文件信息2.2 二进制文件读取4.5.5.1.5.2.122.12.22.2.1 文件打开(1). 利用OPEN命令打开二进制文件IDL 中的所有输入和输出都是通过逻辑设备号完成的。可以把一个逻辑设备设想为一个管道,这个管道连接着 IDL 和需要进行读写的数据文件。要从一个文件中读写数据,必须首先把一个逻辑设备号连接到一个特定的文件。这就是 IDL 中三个OPEN命令的作用。OPENR (OPEN REA

19、D) :用只读方式打开一个现有的文件。OPENW(OPEN WRITE) :打开一个新文件用于读写。如果文件已经存在,则其原始文件内容将会被新内容所替代。OPENU(OPEN UPDATE) :打开一个已经存在的文件用于读写。这三个命令的语法结构是完全相同的。首先是命令名,后面是一个逻辑设备号和需要与该逻辑设备号相连的文件名。用法如下:openr, in_lun, in_filename , /get_lun其中,in_lun代表打开文件的逻辑设备号,可以用户手动赋值,也可以由计算机随机赋值。in_filename为要打开的文件路径。/get_lun代表打开文件时,逻辑设备号由计算机随机赋值,

20、而不是用户手动赋值。当用户打开多个文件时,使用/get_lun可以避免文件号被重复使用而造成的错误。(2). 利用Read_Binary函数打开二进制文件Read_Binary:利用已有的模板或者命令行关键字的方式读取二进制文件。用法如下:result = read_binary (in_filename| fileunit ,template =template | data_start=value,data_type=typecodes,data_dims=array,endian=string) 其中,result 为读取的数据,in_filename代表输入文件路径, fileunit

21、代表输入文件的文件号,in_filename, fileunit二者选一个输入即可。template为一个已定义(利用Binary_Template函数创建)的用于描述输入文件类型的模板结构体。 template不可与data_start,data_type,data_dims,endian同时使用。若使用了template关键字,则Read_Binary函数的返回值为一个与template结构相同的结构体,否则为一个数组。data_start用于表示数据的起始位置,类似于偏移量。data_type 用于表示数据类型。data_dims用于表示读入与返回的数据的范围。endian表示文件字节读

22、取的顺序。注意:如果需要打开的文件很大,无法全部读入内存中,则需要根据要求,考虑改变文件的数据排列方式,例如使用BIL、BIP方式。例如,本例中,目的是获取数据的纵向剖面,因此可以采用BIL、BIP数据排列方式。由于BIL方式处理数据不需要频繁的读写,因此采取BIL方式更佳。2.2.2 文件读入利用上述两种方式将文件打开后,利用READU命令可以将文件读入指定的数组中。READU:从文件中读取无格式二进制数据到一个IDL变量中。用法如下: readu, in_lun, data其中,in_lun为已经打开的逻辑设备号。data为已定义的、与打开文件相同数据类型的IDL变量。2.2.3 文件写出

23、利用WRITEU命令可以将数据写入无格式二进制文件中。用法如下:writeu, out_lun, data其中,out _lun为已经打开的文件逻辑设备号。data为要写入文件的IDL变量。2.2.4 文件关闭所有打开的文件,在将数据读入到IDL变量后,都应该及时关闭,释放资源。以避免不必要的错误出现。利用FREE_LUN或CLOSE命令可以将打开的文件关闭。FREE_LUN:关闭打开的文件,取消分配的逻辑设备号,回收内存资源。用法如下: free_lun, in_lun 其中,in_lun为逻辑设备号。CLOSE:根据指定参数关闭逻辑设备号。用法如下:close, ,unit1, ., un

24、itn ,/all ,exit_status=variable ,/file ,/force 其中,uniti为指定逻辑设备号。/all代表关闭所有打开程序。exit_status代表用已命名的变量variable设置退出状态,不可以和/all、/file联用。/file代表关闭逻辑设备号为0-99的文件,逻辑设备号大于99的文件将不被影像。/force代表强制关闭文件。2.2.5 IDL程序实现将数据greenup_1982_2006在IDL中打开的语句如下:定义输入、输出文件名greenup_file=E:RS_ENVIchapter04datagreenup_1982_2006out_f

25、ile=E:RS_ENVIchapter04datatestgreenup_trend;通过查看greenup_1982_2006.hdr文件,获取相关信息;创建输入变量,用来存储greenup_1982_2006的数据greenup=intarr(400,400,25) ;将greenup_1982_2006文件打开并读入数组greenup中 openr, in_lun, greenup_file, /get_lunreadu, in_lun, greenupfree_lun, in_lun2.3 各像元的线性变化趋势及显著性概率计算5.3.122.12.22.32.3.1 计算过程分析由北

26、美19822006年每年的植被返青期数据可知,每个像元都有25个像元值,代表了其每年的返青日期。因此,用年份(时间)当自变量X,像元值(返青期)当因变量Y,则可以回归出每个像元的返青期线性变化曲线。曲线的斜率代表了返青期的变化趋势:斜率小于0代表返青期提前,大于0代表返青期推迟。对计算结果进行F检验,可以得到每个像元的显著性概率。2.3.2 IDL程序实现利用IDL程序可以实现上述分析内容,并将计算结果保存的到ENVI文件中。具体代码如下:;创建输出变量,用来存储线性趋势和显著性概率数据;第一波段存储线性趋势,第二波段存储显著性概率,背景值为999.0 trend=make_array(400

27、,400,2, value=999.0);动态创建数组;创建x数据 x=findgen(25)+1982.0 ;逐像元计算线性趋势和显著性概率 for i=0,399 do begin for j=0,399 do begin y=reform(greenupi,j,*);重组 if y0 eq 5000 then continue ;遇到背景值5000跳过 trendi,j,0=regress(x,y, ftest=ftest) ;线性斜率 trendi,j,1=1.0-f_pdf(ftest, 1, 23) ;显著性概率 endfor endfor ;输出结果 openw, out_lun

28、, out_file, /get_lun writeu, out_lun, trend free_lun, out_lun ;结果保存到指定文件中 ;输出头文件 zhu_write_envi_header, greenup_file, out_file, bands=2, data_type=42.3.3 IDL程序分析上述程序中,主要用到的函数有MAKE_ARRAY、REFORM、REGRESS和F_PDF ,命令有OPENW、WRITEU,用户自定义过程ZHU_WRITE_ENVI_HEADER。下面对它们进行简单介绍,以方便程序理解。(1). MAKE_ARRAY:在程序运行时,动态创建

29、数组的函数。返回值为一个指定类型、维度和初始值的数组。(2). REFORM:可以使数组在固定元素个数的前提下,改变下标引用索引的函数。当指定了返回维数时,函数返回与给定的维度相同的数组,不改变数组总元素个数及元素值。若没有指定维度,则返回数组的一个副本,当数组中有某一维维度为一时,则将这一维去掉。(3). REGRESS:执行多元线性回归的函数,返回归方程的系数组成的列向量。其参数FTEST代表F-检验的结果值。(4). F_PDF: 利用FTEST参数进行显著性概率计算的函数。(5). OPENW:打开一个新文件用于读写。如果文件已经存在,则其原始文件内容将会被新内容所替代。(6). WR

30、ITEU:将数据写入无格式二进制文件中。(7). ZHU_WRITE_ENVI_HEADER:用户自定义的一个IDL程序,用于编写一个ENVI头文件。详细代码见zhu_write_envi_header.pro 。2.3.4 结果显示图1是IDL代码的执行结果,左边为各像元的线性变化趋势,右边为各像元的显著性概率。图2 各像元的线性变化趋势及显著性概率2.4 有效物候区返青期平均变化趋势统计5.4.122.12.22.32.42.4.1 计算过程分析本文选取3个示例州如图3所示,计算其内有效物候区中的返青期平均变化趋势。需要用到的数据有:(1). 各像元的线性变化趋势,文件greenup_tr

31、end的第一波段。(2). 物候区文件phenoregion_file,其中每种颜色代表一种物候。(3). 示例州栅格文件state_file,由三个示例州的ROI文件state_roi.roi导出得到。为了计算出示例州内有效物候区中的返青期平均变化趋势,首先需要创建输入变量来存储数据,并将数据读入到变量中(利用上述文件读取方法)。同时,需要创建变量result存储输出数据。根据要求,result变量应为一个2行3列的浮点型数组。第一列用于存储示例州的编号,第二列用于存储各示例州内有效物候区中的返青期平均变化趋势。具体结构如表3 result变量结构所示:表3 result变量结构示例州编号有

32、效物候区中返青期平均变化趋势1示例州1内有效物候区中的返青期平均变化趋势2示例州2内有效物候区中的返青期平均变化趋势3示例州3内有效物候区中的返青期平均变化趋势然后,找出各示例州内有效物候区像元,即同时位于各示例州和物候区内的像元,并计算各示例州内有效物候区像元的平均线性变化趋势。将计算结果写入文件,即可完成全部操作。2.4.2 IDL程序实现利用IDL程序可以实现上述分析内容,并将计算结果保存的到CSV文件中。具体代码如下: ;定义输入、输出文件名 trend_file=D:testgreenup_trend;各像元的线性变化趋势及显著性概率 phenoregion_file=D:datap

33、henoregion;物候区数据 state_file=D:datastate_class;三个示例州的栅格图 out_file=D:teststa.csv ;创建输入变量,用来存储trend, phenoregion, state数据 ;通过查看各数据的头文件,获取相关信息 trend=fltarr(400,400) ;只存储第一波段(线性变化趋势) phenoregion=intarr(400,400) state=bytarr(400,400) ;创建输出变量,用来存储3个示例州的平均线性变化趋势 result=fltarr(2,3) result0,*=findgen(3)+1.0 ;

34、第一列存储各个州的代码 ;读入数据 openr, in_lun1, trend_file, /get_lun readu, in_lun1, trend free_lun, in_lun1 openr, in_lun2, phenoregion_file, /get_lun readu, in_lun2, phenoregion free_lun, in_lun2 openr, in_lun3, state_file, /get_lun readu, in_lun3, state free_lun, in_lun3 ;计算3个示例州内有效物候区中的返青期平均变化趋势 for i=1,3 do

35、begin index=where(state eq i)*(phenoregion gt 0),count) ;找出有效像元 a=trendindex if count gt 0 then result1,i-1=mean(trendindex) endfor ;输出结果 write_csv, out_file, result2.4.3 IDL程序分析上述程序中,主要用到的函数有WHERE和MEAN以及命令WRITE_CSV。下面对它们进行简单介绍,以方便程序理解。(1). WHERE:根据给定标准(数组或数组表达式)在一个数组中选择合适元素的函数。返回值为一个矢量,矢量中的元素是根据给定标

36、准(数组或数组表达式)得到的非零元素的下标。矢量的长度为等于根据给定标准(数组或数组表达式)非零元素的个数。用法如下:result = where( array_expression , count , complement=variable , /l64, ncomplement=variable )其中,result 为符合给定判断标准(array_expression)的非零元素的下标组成的矢量。array_expression为判断的标准(数组表达式)。count为符合给定判断标准(array_expression)的非零元素个数。complement为不符合给定判断标准(array_

37、expression)的零元素个数。ncomplement为不符合给定判断标准(array_expression)的零元素的下标组成的矢量。(2). MEAN:计算一组数字型矢量的平均值的函数。(3). WRITE_CSV:将数据写入.CSV文件中。2.4.4 结果显示执行2.4.2中IDL代码, 生成sta.csv文件,得到3个示例州内有效物候区中的返青期平均变化趋势,见表4。表4 示例州内有效物候区中的返青期平均变化趋势示例州编号有效物候区中返青期平均变化趋势1-0.130672-0.0343230.536882.5 制图输出线性变化趋势122.12.22.32.42.52.5.1 IDL

38、的颜色运用IDL的颜色由三种特殊值组成。我们称这些数值为一个三色组,将其写成(R,G,B)即红、绿、蓝,其中红、绿、蓝代表红光、绿光、蓝光作用于该显示颜色时的数量,每个值的范围都在0到255之间。这样,一种颜色可由256级的红色,256级绿色和256级蓝色组成。这就是说IDL能显示256*256*256,或者说超过167,000,000种颜色。举例来说,黄色由亮红和亮绿组成,但没有蓝色。代表黄色的三色组写作(255,255,0)。IDL 里有两种颜色模式索引颜色模式和RGB颜色模式。索引颜色模式用于8位显示器,RGB颜色模式用24位显示器。使用索引号通过查颜色查询表(简称为颜色表)可以获得颜色

39、的三色值。一个颜色表由三列数组成,一列代表红色值,一列代表绿色值,一列代表蓝色值。典型地,这些数列被称为矢量。当用 IDL 装载颜色表时,所做的就是选择正确的数值放进这些列或矢量之中。请看这个概念的图解(图3)。两种模式都能用一个颜色查找表来决定用于显示的特定颜色。(当颜色分解关键字关闭时,RGB颜色模式就用颜色查找表。否则,RGB颜色模式就用三色值直接指定颜色)。索引颜色模式将索引颜色号和颜色表中的特定位置联系起来,而RGB 颜色模式直接指定颜色。被链接到特定颜色表某个位置的颜色被称作动态颜色显示。直接显示的颜色常被称为静态颜色显示。在大多数情况下(有例外),8位显示是动态显示,24位显示是

40、静态显示。图3 索引颜色模式颜色表可以由用户人为修改,颜色表控制函数有如下(表5)几种。TVLCT命令用来设置或获取颜色表的内容; LoadCT 命令装载IDL预定义过的41个颜色表中的一个。这些颜色表的定义在resourcecolors目录下colors1.tbl文件中。XloadCT 和 Xpalette两个命令,可以修改和创建颜色表。XloadCT 允许用不同的方法扩展颜色。Xpalette命令允许通过设置滚动条的端点色和插入干涉值来修改和创造自己的颜色表。表5 颜色表控制函数名称功能TVLCT设置或获取颜色表的内容LOADCT装载一个预定义过的颜色表X LOADCT装载和调整预定义过的

41、颜色表XPALETTE定制颜色表2.5.2 IDL绘图(1). 直接图形法直接图形法是IDL的图像或图形直接绘制在用户指定的图形设备上,可在很短的时间内生长高质量的图形。执行内置直接图形程序,将会建立坐标系,创建轴和边界。组成直接图形系统的例行程序,如Plot、Contour及 Surface等等,可以完成大部分关于图形输出的操作。直接绘图程序一旦生成直接图形,结果就会被输出到当前设备,并且删除掉所有相关数据。若要对已生成的直接图形做出改动或是将结果输出到另外的设备,就必须要重新执行。 直接图形法对内存有默认的管理方法,占用内存少, 用户不必自己释放内存,方便、简洁易用。(2). 对象图形法

42、传统的开发方法开发的程序重用性、可修改性及可维护性都比较差,对象法是IDL5.0引入面向对象编程概念后出现的,面向对象的基础也就是对象类的使用。对象类允许编程者将数据和方法封装成一个包,称之为对象。一个对象类可以重复利用生成多个对象。 在IDL的虚拟图形构架体系中有一套对象显示结构对象,而且提供了很多的对象图形原子,利用这些对象和对象图形原子之间可以进行互相的加载,相互作用形成显示对象, 灵活的运用这些图形原子就可以在视图中得到丰富多彩的图形或图像,甚至可以制作三维的动画。2.5.3 线性变化趋势图IDL程序实现本例中,首先加载用户预先设定的颜色表,利用此表中的颜色显示线性变化趋势制图。然后通

43、过观察图像数据值的分布情况,确定图像最终拉伸范围,并将背景值设为255。之后通过imap或iimage方式显示图像。具体代码如下:;创建颜色表CT ;ctload为用户自定义函数,加载颜色表24号到内存中,并将颜色表颜色反转,取其中10个颜色赋值给变量clctload, 24, /BREWER, /reverse, ncolors=10, rgb_table=clct=congrid(cl, 256,3, /center) ;调整数组大小ct255,*=210 ;最后一列设为灰色,用于当做背景值;读入用于作图的数据data=read_binary(out_file, data_type=4, data_dims=400,400);查看图像数据值的分布,用于确定线性拉伸到0254的最小值和最大值。index=where(data lt 998.0);选择非背景值的元素hist=histogram(dataindex, locations=x)iplot, x, hist, /histogram;通过查

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号