ENVI 5.1二次开发之——无缝镶嵌(ENVIMosaicRaster)
分享
ENVI 5.1提供的二次开发API较5.0有了新的改进。更加突出体现面向对象和类的概念。
本文主要介绍ENVI 5.1新增无缝镶嵌工具提供的API。我们知道,ENVI 5.0及之前版本的镶嵌工具为Georeference Mosaic,提供的接口为Mosaic_DOIT,但是没有公开匀色、羽化等实用的关键字接口,只能进行忽略值的设置。ENVI 5.1更新的无缝镶嵌工具(详见:http://blog.sina.com.cn/s/blog_764b1e9d0101cbf0.html),提供了对应接口——ENVIMosaicRaster,利用此对象可以完成匀色、羽化、忽略值、接边线生成等功能,轻松实现批处理。下表可以清晰反映新旧镶嵌接口的区别。
表:ENVI新旧镶嵌接口功能对比
1. ENVIMosaicRaster介绍
调用格式为:
Result = ENVIMosaicRaster(Scenes [, Properties=value] [, Keywords=value])
下面分Scenes、Properties、keywords、Methods进行介绍。
Scenes
此参数为输入参数,为ENVIRaster对象数组。例如我们想新建Raster1和Raster2的镶嵌对象,可以设置Scenes = [Raster1, Raster2]。注意事项如下:
>>>Scenes中的每一个Raster必须具有相同的波段和数据类型;
>>>Scenes可以在初始化ENVIMosaicRaster时传入,也可以在创建后使用scenes属性赋值;
>>>Seamless Mosaic tool可以接收复数数据类型。如果Complex Function存在,在镶嵌之前,ENVI会转换数据为单精度(浮点型)或双精度类型。如果Complex Function不存在,ENVI使用Power Function转换复数数据。
>>>如果数据含有NaN或Inf时,在计算轮廓线和匀色统计时,自动忽略这些像元。
Properties
ENVIMosaicRaster继承了ENVIRaster的所有属性。而下面的属性是ENVIMosaicRaster独有的。继承的ENVIRaster属性中,Pyramid_exists属性固定为0,Read_only为1。
表:ENVIMosaicRaster独有的属性一览表
注:属性后面的(Get、Set)表示此属性可以获取,也可以进行设置。凡是属性类型为字符串的,均不区分大小写。
Keywords
关键字中只有一个ERROR,可以进行错误处理,返回错误消息。
Methods
ENVIMosaicRaster继承了ENVIRaster的大部分方法(有些不可用),如下表所示。
表:ENVIMosaicRaster方法一览表
下面是一些调用这些方法的注意事项:
>>>因为Mosaic Raster是一个只读的对象,不能使用SetData和SetTile方法写入ENVIMosaicRaster;
>>>ENVIDataCollection不会返回ENVIMosaicRaster对象,除非调用了Export方法将镶嵌结果输出到本地硬盘;
>>>调用Subset方法时,使用SUB_SECT关键字可以设置空间子集范围(Spatial Subset);
>>>调用Subset方法时,使用BANDS关键字可以设置光谱子集范围(Spectral Subset)。
2. ENVIMosaicRaster示例代码
运行后,在弹出对话框选择要镶嵌的数据文件(多选),点击OK,然后选择输出路径,IDL将自动进行无缝镶嵌,实现功能如下:
>>>使用自动生成接边线;
>>>羽化距离为20(接边线两侧各10个像元);
>>>忽略值设置为0;
>>>重采样算法为双线性内插;
>>>保存的接边线为“文件名+_seamline.shp”。
PRO MOSAICBATCH
COMPILE_OPT IDL2
; 启动ENVI 5.1
e = ENVI()
; 选择多个文件
files = DIALOG_PICKFILE(/MULTIPLE, $
TITLE = 'Select input scenes')
scenes = !NULL
; 将每一个Raster放在一个Scenes中
FOR i=0, N_ELEMENTS(files)-1 DO BEGIN
raster = e.OpenRaster(files)
scenes = [scenes, raster]
ENDFOR
; 创建ENVIMosaicRaster对象
mosaicRaster = ENVIMosaicRaster(scenes, $
background = 0, $
color_matching_method = 'histogram matching', $
color_matching_stats = 'overlapping area', $
feathering_distance = 20, $
feathering_method = 'seamline', $
resampling = 'bilinear', $
seamline_method = 'geometry')
; 设置输出路径
newFile = ENVI_PICKFILE(title='Select output file', $
/output)
IF FILE_TEST(newFile) THEN FILE_DELETE, newFile
; 输出镶嵌结果
mosaicRaster.Export, newFile, 'ENVI'
; 保存接边线
mosaicRaster.SAVESEAMPOLYGONS, newFile+'_seamline.shp'
vector = e.OpenVector(newFile+'_seamline.shp')
; 打开并显示栅格和接边线
mosaicRaster = e.OpenRaster(newFile)
view = e.GetView()
layer = view.createlayer(mosaicRaster)
vlayer = view.createlayer(vector)
END
3. 总结
使用此方法可以快速、便捷地使用无缝镶嵌功能,具有以下优势:
>>>轻松实现自动化批处理,设置好参数后,只需选择输入输出即可;
>>>如果数据量较大,省去了ENVI构建金字塔的过程,节省时间和硬盘空间;
>>>可以将此功能嵌入自己的业务化系统中。
文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0101ccdu.html
本文主要介绍ENVI 5.1新增无缝镶嵌工具提供的API。我们知道,ENVI 5.0及之前版本的镶嵌工具为Georeference Mosaic,提供的接口为Mosaic_DOIT,但是没有公开匀色、羽化等实用的关键字接口,只能进行忽略值的设置。ENVI 5.1更新的无缝镶嵌工具(详见:http://blog.sina.com.cn/s/blog_764b1e9d0101cbf0.html),提供了对应接口——ENVIMosaicRaster,利用此对象可以完成匀色、羽化、忽略值、接边线生成等功能,轻松实现批处理。下表可以清晰反映新旧镶嵌接口的区别。
表:ENVI新旧镶嵌接口功能对比
1. ENVIMosaicRaster介绍
调用格式为:
Result = ENVIMosaicRaster(Scenes [, Properties=value] [, Keywords=value])
下面分Scenes、Properties、keywords、Methods进行介绍。
Scenes
此参数为输入参数,为ENVIRaster对象数组。例如我们想新建Raster1和Raster2的镶嵌对象,可以设置Scenes = [Raster1, Raster2]。注意事项如下:
>>>Scenes中的每一个Raster必须具有相同的波段和数据类型;
>>>Scenes可以在初始化ENVIMosaicRaster时传入,也可以在创建后使用scenes属性赋值;
>>>Seamless Mosaic tool可以接收复数数据类型。如果Complex Function存在,在镶嵌之前,ENVI会转换数据为单精度(浮点型)或双精度类型。如果Complex Function不存在,ENVI使用Power Function转换复数数据。
>>>如果数据含有NaN或Inf时,在计算轮廓线和匀色统计时,自动忽略这些像元。
Properties
ENVIMosaicRaster继承了ENVIRaster的所有属性。而下面的属性是ENVIMosaicRaster独有的。继承的ENVIRaster属性中,Pyramid_exists属性固定为0,Read_only为1。
表:ENVIMosaicRaster独有的属性一览表
注:属性后面的(Get、Set)表示此属性可以获取,也可以进行设置。凡是属性类型为字符串的,均不区分大小写。
Keywords
关键字中只有一个ERROR,可以进行错误处理,返回错误消息。
Methods
ENVIMosaicRaster继承了ENVIRaster的大部分方法(有些不可用),如下表所示。
表:ENVIMosaicRaster方法一览表
下面是一些调用这些方法的注意事项:
>>>因为Mosaic Raster是一个只读的对象,不能使用SetData和SetTile方法写入ENVIMosaicRaster;
>>>ENVIDataCollection不会返回ENVIMosaicRaster对象,除非调用了Export方法将镶嵌结果输出到本地硬盘;
>>>调用Subset方法时,使用SUB_SECT关键字可以设置空间子集范围(Spatial Subset);
>>>调用Subset方法时,使用BANDS关键字可以设置光谱子集范围(Spectral Subset)。
2. ENVIMosaicRaster示例代码
运行后,在弹出对话框选择要镶嵌的数据文件(多选),点击OK,然后选择输出路径,IDL将自动进行无缝镶嵌,实现功能如下:
>>>使用自动生成接边线;
>>>羽化距离为20(接边线两侧各10个像元);
>>>忽略值设置为0;
>>>重采样算法为双线性内插;
>>>保存的接边线为“文件名+_seamline.shp”。
PRO MOSAICBATCH
COMPILE_OPT IDL2
; 启动ENVI 5.1
e = ENVI()
; 选择多个文件
files = DIALOG_PICKFILE(/MULTIPLE, $
TITLE = 'Select input scenes')
scenes = !NULL
; 将每一个Raster放在一个Scenes中
FOR i=0, N_ELEMENTS(files)-1 DO BEGIN
raster = e.OpenRaster(files)
scenes = [scenes, raster]
ENDFOR
; 创建ENVIMosaicRaster对象
mosaicRaster = ENVIMosaicRaster(scenes, $
background = 0, $
color_matching_method = 'histogram matching', $
color_matching_stats = 'overlapping area', $
feathering_distance = 20, $
feathering_method = 'seamline', $
resampling = 'bilinear', $
seamline_method = 'geometry')
; 设置输出路径
newFile = ENVI_PICKFILE(title='Select output file', $
/output)
IF FILE_TEST(newFile) THEN FILE_DELETE, newFile
; 输出镶嵌结果
mosaicRaster.Export, newFile, 'ENVI'
; 保存接边线
mosaicRaster.SAVESEAMPOLYGONS, newFile+'_seamline.shp'
vector = e.OpenVector(newFile+'_seamline.shp')
; 打开并显示栅格和接边线
mosaicRaster = e.OpenRaster(newFile)
view = e.GetView()
layer = view.createlayer(mosaicRaster)
vlayer = view.createlayer(vector)
END
3. 总结
使用此方法可以快速、便捷地使用无缝镶嵌功能,具有以下优势:
>>>轻松实现自动化批处理,设置好参数后,只需选择输入输出即可;
>>>如果数据量较大,省去了ENVI构建金字塔的过程,节省时间和硬盘空间;
>>>可以将此功能嵌入自己的业务化系统中。
文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0101ccdu.html