基于idl的遥感影像波段运算

上传人:wt****50 文档编号:33952500 上传时间:2018-02-19 格式:DOC 页数:9 大小:81.50KB
返回 下载 相关 举报
基于idl的遥感影像波段运算_第1页
第1页 / 共9页
基于idl的遥感影像波段运算_第2页
第2页 / 共9页
基于idl的遥感影像波段运算_第3页
第3页 / 共9页
基于idl的遥感影像波段运算_第4页
第4页 / 共9页
基于idl的遥感影像波段运算_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于idl的遥感影像波段运算》由会员分享,可在线阅读,更多相关《基于idl的遥感影像波段运算(9页珍藏版)》请在金锄头文库上搜索。

1、基于 IDL的遥感影像波段运算1.IDL语言特征在 IDL 中,矩阵是按照列的方式处理的,即矩阵是以 n 列、 m 行的方式表示的,这一点与 Fortran 语言一样,但与 C 语言(按 m 行、n 列的维度来标记)表示矩阵的方式不同。只有熟悉 IDL 的数据存储、处理的特点,才能方便地进行分析。以 300 列、200 行的遥感数据 band1 为例,其数据的记录特征如下:IDL 图形坐标 band1 DN 值坐标图 1.IDL 中像元坐标与亮度矩阵的对应关系(1)数据按列存储;最先存储的是第一列的数据(图象第一列的像元亮度值) ,接着是第二列,直至最后一列。(show:print,data0

2、,*)(2)采用顺序显示数据的方式。将第一行的亮度值按顺序从左到右以行的方式显示或存储,不管 band1 矩阵有多少行、多少列,总是先显示、存储完第一行,然后是下一行。由于 IDL 的默认显示宽度是 80 列,所以在输出窗口中要用几行才能显示完矩阵的第一行亮度值。然后另起一行显示亮度矩阵的下一行值,直到最后一行。这一点对于图象显示和分析相当重要。复习:IDL 矩阵的显示方式,data(show:print,data*,0)(3)默认情况下,图象数组的第一行和第一个元素显示在屏幕的左下角。后面的行将从下往上显示。在图形窗口显示图象时,图象的每一个元素在屏幕中显示为一个像素 1。在 IDL 中图象

3、是 从下往上画的。即把 band1 亮度矩阵的第一行值显示在图象最下端的一行像元中,把 band1 亮度矩阵的最后一行值显示在图象最上端的一行像元中。这是图象显示最重要的特征。区别两幅图象的显示效果:(tvscl,data )与(tvscl,data,300,0,order=1 )(4)矩阵转置与图象的关系像元坐标 亮度矩阵1,1 2,1 300,1 92 94 901,2 2,2300,2 96 9291 1,200 2,200 300,200 98 10190将矩阵 band1 转置,(print,(transpose(data)*,0),打印转置矩阵的第一行,它在 band1 中是哪行或

4、哪列?(print,transpose(data)tvscl,data,200,0,order=1结论:按行显示的数据 DN,按列显示;按列显示的 DN 数据,按行显示2.遥感数据的处理与分析31 通用的栅格数据存储格式BSQ :波段顺序存储格式。每行数据后面紧接着同一波谱波段的下一行数据。这种格式最适于对单个波谱波段中任何部分的空间(X ,Y )存取。每个 tile 是单个波段的一个空间子集。BIP :波段按像元交叉格式。图像按顺序存储第 1 个像元所有的波段,接着是第 2 个像元的所有波段,然后是第 3 个像元的所有波段,等等,交叉存取直到像元总数为止。这种格式为图像数据波谱(Z) 的存取

5、提供最佳性能。每个 tile 是一幅图象中所有波段行的所有像素。BIL:波段按行交叉格式。按 BIL 格式存储的图像先存储第一个波段的第一行,接着是第二个波段的第一行,然后是第三个波段的第一行,交叉存取直到波段总数为止。每个波段随后的行按照类似的方式交叉存取。这种格式提供了空间和波谱处理之间一种折衷方式,它是大多数 ENVI 处理任务中所推荐的文件格式。每个 tile 是一幅图像所有波段的一行。32 栅格数据输入以 BSQ 格式的图象为例。假设有一幅 BSQ 格式的 7 波段 TM 影象“2003_sw.img ”,需要计算各波段亮度值的基本统计信息(包括:最大值、最小值、均值、均方差、倾斜度

6、和平坦度) 。遥感数据其实就是像元的亮度值(也叫做 DN 值) ,这与它有多少个波段、是多光谱数据还是高光谱数据都没有关系。这里分析遥感数据的目的,是为了帮助理解、纠正易于混淆的栅格数据存储方法和数据分析方法。影象“subset_2003.img ”的大小为 300200(即:lines:200,Samples:300) 。以 band1 波段为例,在 IDL 的图形显示系统中,左上角坐标为(1,1) 。利用程序把 band1 的亮度值读入 IDL 环境中,构造成一个亮度矩阵(见图 1) 。在 IDL的图形系统中,图象左上角的坐标为(1,1) ,右下角(X,Y )坐标值最大。在图 1 中,图象

7、 band1 的像元坐标左上角为(1,1) ,右下角为(300,200) ,坐标对中的 X 为列号,Y为行号,像元数量为 300 列 200 行。与像元一一对应,亮度矩阵是 band1 的亮度值,每个像元一个值,左上角为 92,右下角为 90。亮度矩阵中的第一行值,与图象中的第一行像元从左到有一一对应,亮度矩阵中的第二行值,与图象中的第二行像元从左到有一一对应,依次类推,直到最后一行。在 IDL 中打开 band1 的亮度矩阵并且显示在 IDL 绘图环境中的时候,要正确地显示图象(见图 2) ,必须要确保亮度矩阵与图象坐标系统的正确关系,如亮度矩阵中的左下三角(或右上三角)一定要严格对应图象像

8、元矩阵的左下三角(或右上三角) ,否则就会发生图象翻转、倒置(见图 3) ,其实质就是将波段亮度矩阵进行了转置或行列倒置。练习:程序调用。调用 band4 的 ASCII 文件的代码如下:file=filepath(band1_matrix.txt,subdir=examplesdata)openr,lun,file,/get_lundata=lonarr(300,200) ;事先知道图象大小readf,lun,dataprint,size(data,/n_elements) ;data 就是 band4 图象的亮度矩阵free_lun,lun3.波段运算(Band Math)Band Mat

9、hTM 功能允许你处理导致单个波段输出的复杂表达式。这些数学表达式也可以应用于一个多波段文件中的所有波段,providing “File Math”。关于使用波段运算的更多信息,请参阅 ENVI Programmers Guide 第 29 页的 “Band Math Basics”。1可利用的波段运算功能(Available Band Math Functions)Band Math 功能为用户提供一个灵活的图像处理工具,其中许多功能是无法在任何其它的图像处理系统中获得的。该功能的能力与 IDL 语言的能力直接相关。可用的函数包括但不仅限于 表 4-2 中列出的数学表达式。表 4-2: 一些

10、可用的波段运算函数。Series and Scalar 数学 三角函数 其它波段运算选项加 ( +) 正弦 ( sin(x) ) 关系运算符 (EQ、NE 、LE、LT、GE、GT)减 ( -) 余弦 (cos(x) ) 逻辑运算符 (AND、OR、XOR、NOT)乘 (*) 正切 (tan(x) ) 类型转换函数(byte, fix, long, float, double, complex)除 (/) 反正弦 (asin(x) ) IDL 返回数组结果的函数最小运算符 ( ) 反正切 (atan(x) ) User IDL 函数和程序绝对值 (abs(x) ) 双曲正弦 (sinh(x)

11、)平方根 (sqrt(x) ) 双曲余弦 (cosh(x) )指数 () 双曲正切 (tanh (x) )自然指数 (exp (x) )自然对数 (alog (x) )以 10 为底的对数 (alog10 (x) )注意一些有效的 IDL 表达式要求整个输入数组存在于内存中,它可以不必与 ENVI tiling 操作相兼容。2Band Math 对话框(1). 选择 Basic Tools Band Math.将出现 Band Math 对话框。假如运算结果是一个二维数组,它将接受任何有效的 IDL 数学表达式、函数或程序。(2). 在标签为 “Enter an expression:” 的文

12、本框内,输入变量名(将被赋值到整个图像波段或可能应用到一个多波段文件中的每个波段) 和所需要的数学运算符。变量名必须以字符 “b” 或 “B” 开头,后面跟着 5 个以内的数字字符。实例:若你想计算三个波段的平均值,则在文本框“Enter an expression:”内输入数学方程式:(float (b4)-float(b3) )/(float(b4)+ float(b3) )这时,变量 b4、b3 自动跳入”Previous band math expression”对话框中,可以输入到文本框中。该表达式中使用的三个变量, “b3” 是第一个变量, “b4” 是第二个变量,注意,在本例中,

13、IDL 的浮点型函数用来防止计算时出现字节溢出错误。(3). 输入一个有效的表达式,点击 “OK”处理。将出现 Variable/Band Name Pairings 对话框。请参见以下部分。4要重新使用、保存或取消任何以前应用的数学表达式:(1). 点击显示在 “Previous Expression:” 列表中的任何表达式,把它导入到 “Enter an expression:” 文本区中。(2). 一旦被导入,点击 “OK”,把该表达式应用到一组新的波段。将出现 Variable/Band Name Pairings 对话框。请见下列的详细向导。5 要把表达式保存到一个输出文件,点击 “

14、Save”,然后当出现 Enter Output Filename 对话框时,键入输出文件名 。为了保持一致,输出文件名应该指定扩展名为 .exp 。(Tips: 可以在记事本中先输入复杂的公式,再导入公式文件) 。6要恢复原先保存的表达式,点击 “Restore”,然后选择适当的文件名。该表达式将显示在 “Previous Expression:” 列表中。 要清除所有原先的表达式,点击 “Clear”。图 4-13: Band Math 对话框。Variable/Band Name Pairings 对话框Variable/Band Name Pairings 对话框允许你从一个输入波段列

15、表中,把波段赋值给输入在 “Enter an expression:” 文本框中的变量。 要把一个值赋给原先实例中的变量 “b1”:1. 在标签为 “Variables used in expression:” 的文本框内,点击表达式 “B1”。2. 在标签为 “可利用波段列表:” 的列表中,点击所需要的波段。注意,一旦第一个波段被选择,只有那些相同空间大小的波段被显示在波段列表中。3. 按照同种方法,为 “B2”、 “B3” 等赋予一个值。 要把一个多波段图像赋值给一个或所有变量:1. 点击 “Map variable to Input file”。2. 使用标准的 ENVI 文件选择步骤,

16、选择一个文件(这可视为 “File Math”) 。所选择的文件可以是波谱子集,但是若一个以上的文件被使用,它们必须有相同的波段数。通过数学表达式修改的文件数学(file math) ,一个多波段输出图像产生。3. 一旦所有变量被定义,标准的 ENVI 输出对话框显示在 Variable/Bands Pairings 对话框的底部。可以把一个波段运算结果作为新的变量输入下一个运算过程。 要选择一个空间子集:1. 点击 “Spatial Subset”。2. 将出现标准的 File Spatial Subset 对话框 (系统默认值被设置为处理整个空间场景。 要把结果输出到一个文件或内存,选择 “File” 或 “Memory” 切换按钮。 若选择输出到一个文件,键入一个输出文件名,或使用 “Choose” 按钮选择一个文件名,然后点击 “OK”

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号