ENVI 5.1二次开发之——无缝镶嵌(ENVIMosaicRaster)
ENVI 5.1提供的二次开发API较5.0有了新的改进。更加突出体现面向对象和类的概念。
本文主要介绍ENVI 5.1新增无缝镶嵌工具提供的API。我们知道,ENVI 5.0及之前版本的镶嵌工具为Georeference Mosaic,提供的接口为Mosaic_DOIT,但是没有公开匀色、羽化等实用的关键字接口,只能进行忽略值的设置。ENVI 5.1更新的无缝镶嵌工具(详见:https://www.cnblogs.com/enviidl/p/16518077.html),提供了对应接口——ENVIMosaicRaster,利用此对象可以完成匀色、羽化、忽略值、接边线生成等功能,轻松实现批处理。下表可以清晰反映新旧镶嵌接口的区别。
表:ENVI新旧镶嵌接口功能对比
|
旧版接口(MOSAIC_DOIT) |
新版接口(ENVIMOSAICRASTER) |
忽略值 |
√ |
√ |
匀色 |
- |
√ |
羽化 |
- |
√ |
接边线 |
- |
√ |
易用性 |
★ |
★★★★★ |
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独有的属性一览表
属性 |
功能 |
注意事项 |
BACKGROUND (Get, Set) |
设置背景值(忽略值) |
必须在输入栅格数据类型范围内,如过为Byte,则必须输入0~255之间的值,否则报错。 |
COLOR_MATCHING_METHOD (Get, Set) |
设置匀色算法 |
可选值如下: –histogram matching:直方图匹配 – |
COLOR_MATCHING_ACTIONS (Get, Set) |
指定参考图像(reference) |
输入为字符串数组,取值可选adjust、none、reference。只能设置一个reference,其他可设置none或adjust。默认情况下第一个Raster作为reference。 例如:['reference', 'adjust', 'adjust', 'adjust'] |
COLOR_MATCHING_STATS (Get, Set) |
设置直方图统计范围 |
如果使用匀色,需要设置此关键字为: – – 注:如果没有重叠区,则统计整图。 |
FEATHERING_DISTANCE (Get, Set) |
设置羽化像元数 |
可以指定一个数,所以Raster通用;也可以指定一个向量,每一个Raster用不同的羽化距离。 |
FEATHERING_METHOD (Get, Set) |
设置羽化方法 |
可选值如下: – – – |
RESAMPLING (Get, Set) |
重采样方法 |
可选如下: – Nearest Neighbor: 默认值,最近邻域法 – Bilinear: 双线性内插 – Cubic: 三次卷积 |
SEAM_POLYGONS (Get, Set) |
指定接边线 |
指定为ENVIVector对象,可以使用e.OpenVector打开shp。 |
SEAMLINE_METHOD (Get, Set) |
接边线生成方法 |
可选如下: – – |
注:属性后面的(Get、Set)表示此属性可以获取,也可以进行设置。凡是属性类型为字符串的,均不区分大小写。
Keywords
关键字中只有一个ERROR,可以进行错误处理,返回错误消息。
Methods
ENVIMosaicRaster继承了ENVIRaster的大部分方法(有些不可用),如下表所示。
表:ENVIMosaicRaster方法一览表
继承ENVIRaster的方法 |
|
方法名 |
功能 |
Close |
关闭对象 |
CreatePyramid |
不可用 |
CreateTileIterator |
分块处理 |
Export |
输出到本地硬盘 |
GetData |
获取数据 |
Save |
不可用 |
SetData |
不可用(ENVIMosaicRaster为只读对象) |
SetTile |
不可用(ENVIMosaicRaster为只读对象) |
Subset |
裁剪,取子集。可空间裁剪和光谱裁剪。 |
WriteMetadata |
元数据写出,更新hdr头文件。 |
ENVIMosaicRaster自有的方法 |
|
SaveSeamPolygons |
保存自动生成的接边线 |
下面是一些调用这些方法的注意事项:
- 因为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
END
3. 总结
使用此方法可以快速、便捷地使用无缝镶嵌功能,具有以下优势:
Ø
Ø
Ø
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)