1.IDL语言特征
在IDL中,矩阵是按照列的方式处理的,即矩阵是以n列、m行的方式表示的,这一点与Fortran语言一样,但与C语言(按m行、n列的维度来标记)表示矩阵的方式不同。只有熟悉IDL的数据存储、处理的特点,才能方便地进行分析。以300列、200行的遥感数据band1为例,其数据的记录特征如下:
像元坐标
亮度矩阵
1,1 2,1 …… 300,1 92 94 …… 90
1,2 2,2 …… 300,2 96 92 …… 91
…… …… …… …… ……
1,200 2,200 …… 300,200 98 101 …… 90
IDL图形坐标 band1 DN值坐标
图1.IDL中像元坐标与亮度矩阵的对应关系
(1)数据按列存储;最先存储的是第一列的数据(图象第一列的像元亮度值),接着是第二列,直至最后一列。
(show:print,data[0,*])
(2)采用顺序显示数据的方式。将第一行的亮度值按顺序从左到右以行的方式显示或存储,不管band1矩阵有多少行、多少列,总是先显示、存储完第一行,然后是下一行。由于IDL的默认显示宽度是80列,所以在输出窗口中要用几行才能显示完矩阵的第一行亮度值。然后另起一行显示亮度矩阵的下一行值,直到最后一行。这一点对于图象显示和分析相当重要。
复习:IDL矩阵的显示方式,data
(show:print,data[*,0])
(3)默认情况下,图象数组的第一行和第一个元素显示在屏幕的左下角。后面的行将从下往上显示。在图形窗口显示图象时,图象的每一个元素在屏幕中显示为一个像素[1]。在IDL中图象是从下往上画的。即把band1亮度矩阵的第一行值显示在图象最下端的一行像元中,把band1亮度矩阵的最后一行值显示在图象最上端的一行像元中。这是图象显示最重要的特征。
区别两幅图象的显示效果:(tvscl,data)与(tvscl,data,300,0,order=1)
(4)矩阵转置与图象的关系
将矩阵band1转置,
(print,(transpose(data))[*,0]),打印转置矩阵的第一行,它在band1中是哪行或哪列?
(print,transpose(data)
tvscl,data,200,0,order=1
结论:按行显示的数据DN,按列显示;按列显示的DN数据,按行显示
2.遥感数据的处理与分析
31通用的栅格数据存储格式
BSQ
:波段顺序存储格式。每行数据后面紧接着同一波谱波段的下一行数据。这种格式最适于对单个波谱波段中任何部分的空间(X,Y)存取。每个tile是单个波段的一个空间子集。
BIP
:波段按像元交叉格式。图像按顺序存储第1个像元所有的波段,接着是第2个像元的所有波段,然后是第3个像元的所有波段,等等,交叉存取直到像元总数为止。这种格式为图像数据波谱(Z)
的存取提供最佳性能。每个tile是一幅图象中所有波段行的所有像素。
BIL:波段按行交叉格式。按 BIL
格式存储的图像先存储第一个波段的第一行,接着是第二个波段的第一行,然后是第三个波段的第一行,交叉存取直到波段总数为止。每个波段随后的行按照类似的方式交叉存取。这种格式提供了空间和波谱处理之间一种折衷方式,它是大多数
ENVI 处理任务中所推荐的文件格式。每个tile是一幅图像所有波段的一行。
32栅格数据输入
以BSQ格式的图象为例。假设有一幅BSQ格式的7波段TM影象“2003_sw.img”,需