【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发

📝 内容范围: 本文围绕波段运算、波谱运算、ENVI Classic扩展、Classic批处理模式、FID/DIMS/POS、组件与事件、分块处理、ENVI 5面向对象开发、虚拟栅格、ENVITask、自定义ENVITask、扩展部署和典型业务流程展开。
阅读重点: 本篇不把ENVI二次开发理解为单一的"写代码",而是区分表达式扩展、菜单补丁、批处理程序、任务化流程和独立应用五个层次,并说明ENVI Classic与ENVI 5两套开发体系之间的对应关系。
### 文章目录
- [【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [@toc](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第一章 ENVI功能扩展的整体层次](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二章 波段运算:最轻量的功能扩展](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [2.1 波段运算的工作方式](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [2.2 直接表达式与函数表达式](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [2.3 波段运算的典型应用](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [2.4 IDL数组运算优势](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第三章 波段运算中的NaN与异常值处理](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [3.1 为什么遥感处理中需要NaN](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第四章 波谱运算](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第五章 ENVI Classic用户函数与菜单扩展](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [5.1 用户函数扩展的基本思想](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [5.2 Classic菜单文件](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [5.3 菜单项三个字段的含义](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [5.4 两种菜单添加方式](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第六章 ENVI Classic开发中的FID、DIMS与POS](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [6.1 FID:Classic文件标识](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [6.2 DIMS:空间子集定义](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [6.3 POS:波段位置](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [6.4 三个关键字的组合关系](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第七章 ENVI Classic批处理模式](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [7.1 批处理模式的目的](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [7.2 Classic批处理的调用结构](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [7.3 常用Classic接口](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第八章 ENVI Classic组件与事件管理](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第九章 Classic扩展案例的知识结构](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [9.1 植被增强案例](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十章 FCLS完全约束最小二乘混合像元分解](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [10.1 为什么需要完全约束](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [10.2 输出与RMSE](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [10.3 工具的实现特点](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [10.4 分块处理接口](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [10.5 用户界面与进度](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十一章 IDL Viewer与独立应用](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十二章 ENVI 5面向对象开发模式](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [12.1 从过程式接口到对象式接口](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [12.2 ENVI对象的常用方法](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [12.3 ENVI 5的数据对象](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十三章 ENVI 5虚拟栅格](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [13.1 虚拟栅格的作用](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [13.2 虚拟栅格流程示例](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十四章 ENVI 5显示控制](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十五章 ENVITask图像处理](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [15.1 ENVITask的定位](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [15.2 ENVITask调用结构](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十六章 ENVI 5变化监测流程](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十七章 高分一号预处理任务](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十八章 自定义ENVITask](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [18.1 自定义任务的组成](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [18.2 创建流程](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [18.3 自定义ENVITask的优势](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第十九章 ENVI 5事件处理与魔术棒案例](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十章 ENVI Classic与ENVI 5接口对照](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [20.1 QUAC调用对比](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十一章 ENVI 5扩展部署](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十二章 批量业务案例](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [22.1 高分一号批处理](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [22.2 Shapefile分幅裁剪](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [22.3 镶嵌与批量裁剪任务](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十三章 如何选择开发方式](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十四章 常见误区与排查方向](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十五章 本篇知识总结](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
- [第二十六章 术语表](#文章目录 【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发 @[toc] 第一章 ENVI功能扩展的整体层次 第二章 波段运算:最轻量的功能扩展 2.1 波段运算的工作方式 2.2 直接表达式与函数表达式 2.3 波段运算的典型应用 2.4 IDL数组运算优势 第三章 波段运算中的NaN与异常值处理 3.1 为什么遥感处理中需要NaN 第四章 波谱运算 第五章 ENVI Classic用户函数与菜单扩展 5.1 用户函数扩展的基本思想 5.2 Classic菜单文件 5.3 菜单项三个字段的含义 5.4 两种菜单添加方式 第六章 ENVI Classic开发中的FID、DIMS与POS 6.1 FID:Classic文件标识 6.2 DIMS:空间子集定义 6.3 POS:波段位置 6.4 三个关键字的组合关系 第七章 ENVI Classic批处理模式 7.1 批处理模式的目的 7.2 Classic批处理的调用结构 7.3 常用Classic接口 第八章 ENVI Classic组件与事件管理 第九章 Classic扩展案例的知识结构 9.1 植被增强案例 第十章 FCLS完全约束最小二乘混合像元分解 10.1 为什么需要完全约束 10.2 输出与RMSE 10.3 工具的实现特点 10.4 分块处理接口 10.5 用户界面与进度 第十一章 IDL Viewer与独立应用 第十二章 ENVI 5面向对象开发模式 12.1 从过程式接口到对象式接口 12.2 ENVI对象的常用方法 12.3 ENVI 5的数据对象 第十三章 ENVI 5虚拟栅格 13.1 虚拟栅格的作用 13.2 虚拟栅格流程示例 第十四章 ENVI 5显示控制 第十五章 ENVITask图像处理 15.1 ENVITask的定位 15.2 ENVITask调用结构 第十六章 ENVI 5变化监测流程 第十七章 高分一号预处理任务 第十八章 自定义ENVITask 18.1 自定义任务的组成 18.2 创建流程 18.3 自定义ENVITask的优势 第十九章 ENVI 5事件处理与魔术棒案例 第二十章 ENVI Classic与ENVI 5接口对照 20.1 QUAC调用对比 第二十一章 ENVI 5扩展部署 第二十二章 批量业务案例 22.1 高分一号批处理 22.2 Shapefile分幅裁剪 22.3 镶嵌与批量裁剪任务 第二十三章 如何选择开发方式 第二十四章 常见误区与排查方向 第二十五章 本篇知识总结 第二十六章 术语表)
第一章 ENVI功能扩展的整体层次
ENVI本身由IDL语言构建,因此用户既可以调用ENVI已有功能,也可以用IDL编写新的算法,并将其集成到ENVI菜单、Toolbox或业务程序中。专题材料将ENVI功能扩展概括为三类:波段和波谱运算、用户函数扩展、二次开发模式。结合后续ENVI 5内容,可以进一步整理为五个层次。
| 扩展层次 | 主要形式 | 是否需要了解ENVI内部机制 | 典型用途 |
|---|---|---|---|
| 表达式扩展 | 波段运算、波谱运算 | 较少 | 指数计算、像元替换、简单模型 |
| 用户函数扩展 | IDL函数、SAV补丁、菜单调用 | 中等 | 自定义边缘检测、植被增强 |
| Classic批处理 | ENVI Classic接口与ENVI_DOIT |
较多 | 格式转换、批量投影、分块算法 |
| ENVI 5任务化开发 | ENVI对象、虚拟栅格、ENVITask | 较多 | 流程化处理、自动参数界面 |
| 独立应用 | IDL组件、ENVI API、Runtime | 较高 | 专用遥感系统、IDL Viewer |
#mermaid-svg-WD3RcAwNZrQt0IIG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WD3RcAwNZrQt0IIG .error-icon{fill:#552222;}#mermaid-svg-WD3RcAwNZrQt0IIG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WD3RcAwNZrQt0IIG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WD3RcAwNZrQt0IIG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WD3RcAwNZrQt0IIG .marker.cross{stroke:#333333;}#mermaid-svg-WD3RcAwNZrQt0IIG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WD3RcAwNZrQt0IIG p{margin:0;}#mermaid-svg-WD3RcAwNZrQt0IIG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG .cluster-label text{fill:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG .cluster-label span{color:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG .cluster-label span p{background-color:transparent;}#mermaid-svg-WD3RcAwNZrQt0IIG .label text,#mermaid-svg-WD3RcAwNZrQt0IIG span{fill:#333;color:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG .node rect,#mermaid-svg-WD3RcAwNZrQt0IIG .node circle,#mermaid-svg-WD3RcAwNZrQt0IIG .node ellipse,#mermaid-svg-WD3RcAwNZrQt0IIG .node polygon,#mermaid-svg-WD3RcAwNZrQt0IIG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WD3RcAwNZrQt0IIG .rough-node .label text,#mermaid-svg-WD3RcAwNZrQt0IIG .node .label text,#mermaid-svg-WD3RcAwNZrQt0IIG .image-shape .label,#mermaid-svg-WD3RcAwNZrQt0IIG .icon-shape .label{text-anchor:middle;}#mermaid-svg-WD3RcAwNZrQt0IIG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-WD3RcAwNZrQt0IIG .rough-node .label,#mermaid-svg-WD3RcAwNZrQt0IIG .node .label,#mermaid-svg-WD3RcAwNZrQt0IIG .image-shape .label,#mermaid-svg-WD3RcAwNZrQt0IIG .icon-shape .label{text-align:center;}#mermaid-svg-WD3RcAwNZrQt0IIG .node.clickable{cursor:pointer;}#mermaid-svg-WD3RcAwNZrQt0IIG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-WD3RcAwNZrQt0IIG .arrowheadPath{fill:#333333;}#mermaid-svg-WD3RcAwNZrQt0IIG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WD3RcAwNZrQt0IIG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WD3RcAwNZrQt0IIG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WD3RcAwNZrQt0IIG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-WD3RcAwNZrQt0IIG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WD3RcAwNZrQt0IIG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-WD3RcAwNZrQt0IIG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WD3RcAwNZrQt0IIG .cluster text{fill:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG .cluster span{color:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WD3RcAwNZrQt0IIG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WD3RcAwNZrQt0IIG rect.text{fill:none;stroke-width:0;}#mermaid-svg-WD3RcAwNZrQt0IIG .icon-shape,#mermaid-svg-WD3RcAwNZrQt0IIG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WD3RcAwNZrQt0IIG .icon-shape p,#mermaid-svg-WD3RcAwNZrQt0IIG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-WD3RcAwNZrQt0IIG .icon-shape .label rect,#mermaid-svg-WD3RcAwNZrQt0IIG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WD3RcAwNZrQt0IIG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WD3RcAwNZrQt0IIG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WD3RcAwNZrQt0IIG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 波段或波谱表达式
IDL用户函数
ENVI Classic扩展
ENVI 5对象与ENVITask
独立应用和业务系统
这五个层次并非严格替代关系。一个完整工具可能同时包含自定义IDL算法、ENVI分块接口、菜单扩展和动态任务界面。选择哪一种方式,主要取决于算法复杂度、是否批量运行、是否需要交互界面以及是否部署到其他环境。
第二章 波段运算:最轻量的功能扩展
2.1 波段运算的工作方式
波段运算允许用户把一个或多个影像波段作为输入,通过表达式或自定义函数生成新的栅格。ENVI负责文件选择、波段映射和结果输出,用户只需关注像元运算逻辑。
#mermaid-svg-sh0cLNIPAwGFDskU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sh0cLNIPAwGFDskU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sh0cLNIPAwGFDskU .error-icon{fill:#552222;}#mermaid-svg-sh0cLNIPAwGFDskU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sh0cLNIPAwGFDskU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sh0cLNIPAwGFDskU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sh0cLNIPAwGFDskU .marker.cross{stroke:#333333;}#mermaid-svg-sh0cLNIPAwGFDskU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sh0cLNIPAwGFDskU p{margin:0;}#mermaid-svg-sh0cLNIPAwGFDskU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sh0cLNIPAwGFDskU .cluster-label text{fill:#333;}#mermaid-svg-sh0cLNIPAwGFDskU .cluster-label span{color:#333;}#mermaid-svg-sh0cLNIPAwGFDskU .cluster-label span p{background-color:transparent;}#mermaid-svg-sh0cLNIPAwGFDskU .label text,#mermaid-svg-sh0cLNIPAwGFDskU span{fill:#333;color:#333;}#mermaid-svg-sh0cLNIPAwGFDskU .node rect,#mermaid-svg-sh0cLNIPAwGFDskU .node circle,#mermaid-svg-sh0cLNIPAwGFDskU .node ellipse,#mermaid-svg-sh0cLNIPAwGFDskU .node polygon,#mermaid-svg-sh0cLNIPAwGFDskU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sh0cLNIPAwGFDskU .rough-node .label text,#mermaid-svg-sh0cLNIPAwGFDskU .node .label text,#mermaid-svg-sh0cLNIPAwGFDskU .image-shape .label,#mermaid-svg-sh0cLNIPAwGFDskU .icon-shape .label{text-anchor:middle;}#mermaid-svg-sh0cLNIPAwGFDskU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sh0cLNIPAwGFDskU .rough-node .label,#mermaid-svg-sh0cLNIPAwGFDskU .node .label,#mermaid-svg-sh0cLNIPAwGFDskU .image-shape .label,#mermaid-svg-sh0cLNIPAwGFDskU .icon-shape .label{text-align:center;}#mermaid-svg-sh0cLNIPAwGFDskU .node.clickable{cursor:pointer;}#mermaid-svg-sh0cLNIPAwGFDskU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sh0cLNIPAwGFDskU .arrowheadPath{fill:#333333;}#mermaid-svg-sh0cLNIPAwGFDskU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sh0cLNIPAwGFDskU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sh0cLNIPAwGFDskU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sh0cLNIPAwGFDskU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sh0cLNIPAwGFDskU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sh0cLNIPAwGFDskU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sh0cLNIPAwGFDskU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sh0cLNIPAwGFDskU .cluster text{fill:#333;}#mermaid-svg-sh0cLNIPAwGFDskU .cluster span{color:#333;}#mermaid-svg-sh0cLNIPAwGFDskU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sh0cLNIPAwGFDskU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sh0cLNIPAwGFDskU rect.text{fill:none;stroke-width:0;}#mermaid-svg-sh0cLNIPAwGFDskU .icon-shape,#mermaid-svg-sh0cLNIPAwGFDskU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sh0cLNIPAwGFDskU .icon-shape p,#mermaid-svg-sh0cLNIPAwGFDskU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sh0cLNIPAwGFDskU .icon-shape .label rect,#mermaid-svg-sh0cLNIPAwGFDskU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sh0cLNIPAwGFDskU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sh0cLNIPAwGFDskU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sh0cLNIPAwGFDskU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入波段b1
表达式或函数
输入波段b2
输入波段b3
输出结果影像
材料给出的基本表达式示例为:
text
b1 + b2 + b3
波段变量必须使用b1、b2等名称。若使用自定义函数,函数应以FUNCTION定义并返回计算结果。
2.2 直接表达式与函数表达式
| 方式 | 适合的情况 | 主要特点 |
|---|---|---|
| 直接表达式 | 单行数学和逻辑运算 | 简单、无需单独文件 |
| 自定义函数 | 多步骤算法、条件逻辑、复用算法 | 便于维护,可编译为SAV |
| ENVI内调用 | 只调用SAV | 适合部署补丁 |
| ENVI与IDL联合环境 | 可调用SAV和PRO | 适合开发调试 |
当公式只包含简单加减乘除时,直接表达式更清楚;当运算包含多个中间变量、异常值处理或复杂判断时,应封装为函数。
2.3 波段运算的典型应用
| 应用类别 | 材料中的例子 | 运算本质 |
|---|---|---|
| 辐射定标 | 环境小卫星CCD数据 | 增益和偏移运算 |
| 光谱指数 | MNDWI | 波段差值与归一化 |
| 去云处理 | 根据阈值构建掩膜 | 条件表达式 |
| 定量遥感 | 地表温度、水质、农业估产 | 模型公式映射 |
| 数据清理 | 0值、特定值和NaN转换 | 有效性判断 |
材料给出的改进归一化水体指数为:
M N D W I = G r e e n − S W I R 2 G r e e n + S W I R 2 MNDWI=\frac{Green-SWIR2}{Green+SWIR2} MNDWI=Green+SWIR2Green−SWIR2
在Band Math中,实际表达式需要将绿色波段和短波红外波段分别映射到b1、b2。
2.4 IDL数组运算优势
波段运算的核心不是逐像元循环,而是IDL数组表达式。假设b1和b2是同尺寸数组,表达式会一次作用于全部像元。这种方式代码短、计算效率高,也更接近遥感公式。
对于条件运算,IDL常将真假结果转换为0或1,再与原数组相乘。例如:
text
(b1 gt threshold) * b1
表示保留大于阈值的像元,其余位置变为0。该写法依赖IDL数组逻辑表达式的逐元素运算机制。
第三章 波段运算中的NaN与异常值处理
材料给出了一组利用Band Math修改0值、特定值和NaN的表达式。这些表达式的目的,是在不逐像元循环的情况下完成异常值替换。
| 处理目标 | 材料中的表达式 | 解释 |
|---|---|---|
| 将0值改为NaN | float(b1)*b1/b1 |
非零值保持原值,0除以0产生NaN |
| 将250改为NaN | b1*float(b1 ne 250)/(b1 ne 250) |
250位置分母为0,从而生成NaN |
| 将NaN改为-999 | finite(b1, /nan)*(-999) or (~finite(b1, /nan))*b1 |
根据是否为NaN选择替换值 |
| 将-999改为0 | (b1 ne -999)*b1 |
-999位置乘0,其余保持 |
这些写法展示了IDL逻辑数组、类型转换和有限值判断的组合方式。实际使用时,需要先在小数组上验证表达式结果,因为不同数据类型和逻辑运算符会影响返回值。
3.1 为什么遥感处理中需要NaN
NaN适合表示"不是有效数值"的像元,例如除数为0、模型不适用或原始值缺失。与普通0值相比,NaN不会被误认为真实观测值,但部分文件格式或分类工具不支持NaN,因此输出前可能需要转换为统一NoData值,如-999。
| 表示方式 | 优点 | 局限 |
|---|---|---|
| 0 | 存储简单 | 可能与真实零值混淆 |
| -999 | 易于写入多数格式 | 必须在元数据中明确 |
| NaN | 浮点计算中可识别无效值 | 整型数据不支持,部分工具兼容性有限 |
第四章 波谱运算
波谱运算与波段运算的形式相似,但输入对象从二维影像波段变为一维光谱曲线,变量名称使用s1、s2等。
| 比较项 | 波段运算 | 波谱运算 |
|---|---|---|
| 输入对象 | 二维影像波段 | 一维光谱曲线 |
| 变量名 | b1、b2等 |
s1、s2等 |
| 输出 | 栅格影像 | 新光谱 |
| 常见用途 | 指数、掩膜、模型计算 | 平滑、求导、光谱组合 |
材料给出的求导示例为:
text
deriv(s1)
光谱求导可强调谱形变化和吸收边缘,但也会放大噪声,因此实际分析中通常需要先检查光谱平滑程度。
第五章 ENVI Classic用户函数与菜单扩展
5.1 用户函数扩展的基本思想
ENVI Classic允许把IDL程序作为用户函数,并将其加入主菜单或显示窗口菜单。用户点击菜单后,ENVI调用对应的事件响应程序,使自定义功能表现得与内置工具相似。
#mermaid-svg-7Ybf2yz8pZnQgAYL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7Ybf2yz8pZnQgAYL .error-icon{fill:#552222;}#mermaid-svg-7Ybf2yz8pZnQgAYL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7Ybf2yz8pZnQgAYL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .marker.cross{stroke:#333333;}#mermaid-svg-7Ybf2yz8pZnQgAYL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7Ybf2yz8pZnQgAYL p{margin:0;}#mermaid-svg-7Ybf2yz8pZnQgAYL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .cluster-label text{fill:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .cluster-label span{color:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .cluster-label span p{background-color:transparent;}#mermaid-svg-7Ybf2yz8pZnQgAYL .label text,#mermaid-svg-7Ybf2yz8pZnQgAYL span{fill:#333;color:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .node rect,#mermaid-svg-7Ybf2yz8pZnQgAYL .node circle,#mermaid-svg-7Ybf2yz8pZnQgAYL .node ellipse,#mermaid-svg-7Ybf2yz8pZnQgAYL .node polygon,#mermaid-svg-7Ybf2yz8pZnQgAYL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .rough-node .label text,#mermaid-svg-7Ybf2yz8pZnQgAYL .node .label text,#mermaid-svg-7Ybf2yz8pZnQgAYL .image-shape .label,#mermaid-svg-7Ybf2yz8pZnQgAYL .icon-shape .label{text-anchor:middle;}#mermaid-svg-7Ybf2yz8pZnQgAYL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .rough-node .label,#mermaid-svg-7Ybf2yz8pZnQgAYL .node .label,#mermaid-svg-7Ybf2yz8pZnQgAYL .image-shape .label,#mermaid-svg-7Ybf2yz8pZnQgAYL .icon-shape .label{text-align:center;}#mermaid-svg-7Ybf2yz8pZnQgAYL .node.clickable{cursor:pointer;}#mermaid-svg-7Ybf2yz8pZnQgAYL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .arrowheadPath{fill:#333333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7Ybf2yz8pZnQgAYL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7Ybf2yz8pZnQgAYL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7Ybf2yz8pZnQgAYL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7Ybf2yz8pZnQgAYL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .cluster text{fill:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL .cluster span{color:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7Ybf2yz8pZnQgAYL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7Ybf2yz8pZnQgAYL rect.text{fill:none;stroke-width:0;}#mermaid-svg-7Ybf2yz8pZnQgAYL .icon-shape,#mermaid-svg-7Ybf2yz8pZnQgAYL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7Ybf2yz8pZnQgAYL .icon-shape p,#mermaid-svg-7Ybf2yz8pZnQgAYL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7Ybf2yz8pZnQgAYL .icon-shape .label rect,#mermaid-svg-7Ybf2yz8pZnQgAYL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7Ybf2yz8pZnQgAYL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7Ybf2yz8pZnQgAYL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7Ybf2yz8pZnQgAYL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 编写IDL程序
编译为SAV
配置菜单
复制到save_add
重启ENVI Classic
从菜单启动工具
5.2 Classic菜单文件
材料指出,ENVI Classic菜单由安装目录menu文件夹中的两个ASCII文件定义:
| 文件 | 作用 |
|---|---|
envi.men |
定义主菜单 |
display.men |
定义显示窗口菜单 |
菜单文件中的每一行通常包含三个部分:菜单显示文本、用户值和事件响应程序名称。
示例结构:
text
0 {File}
1 {Open Image File}{open envi file}{envi_menu_event}
1 {Open External File}
2 {Landsat}
3 {Fast}{open fast tm}{envi_menu_event}
每行开头的数字表示菜单层级,0为顶层,1为一级子菜单,依次递增。
5.3 菜单项三个字段的含义
| 字段 | 示例 | 作用 |
|---|---|---|
| 显示内容 | {Open Image File} |
用户在菜单中看到的名称 |
| 用户值 | {open envi file} |
传递给事件程序的值 |
| 响应程序 | {envi_menu_event} |
点击后执行的IDL过程 |
材料指出,在多数自定义函数中,用户值并不重要,可以将其设置为与函数名相同或使用not used。
5.4 两种菜单添加方式
| 方法 | 实现方式 | 特点 |
|---|---|---|
| 修改菜单文件 | 编辑envi.men或display.men |
直观,但直接修改安装文件 |
| 动态定义 | 使用ENVI_DEFINE_MENU_BUTTON |
可由扩展程序自动添加 |
材料以"文件信息查看""文件多波段存储"和Canny边缘检测为例说明扩展流程。Canny示例的核心步骤为:编写IDL代码调用Canny函数、添加Classic菜单、编译为SAV、复制到save_add并重启ENVI Classic。
第六章 ENVI Classic开发中的FID、DIMS与POS
6.1 FID:Classic文件标识
FID是长整型标量,ENVI Classic通过FID管理已打开文件。程序对文件的查询、数据读取和处理都依赖FID。
| FID类型 | 含义 |
|---|---|
FID |
输入文件标识 |
R_FID |
处理结果返回的文件标识 |
M_FID |
掩膜文件标识 |
若结果只存在内存中,R_FID可能是访问该结果的唯一方式。调用后续处理前,应检查FID是否有效。
6.2 DIMS:空间子集定义
DIMS是包含5个长整型元素的数组,用于定义输入数据的空间范围。
| 索引 | 含义 |
|---|---|
DIMS[0] |
ROI指针;无ROI时通常为-1L |
DIMS[1] |
起始列 |
DIMS[2] |
结束列 |
DIMS[3] |
起始行 |
DIMS[4] |
结束行 |
例如,处理第100至500列、第50至400行时,空间范围由后四个元素定义。需要注意,Classic接口通常使用从0开始的像元索引。
6.3 POS:波段位置
POS是长整型数组,表示参与处理的波段位置。波段从0开始计数。例如处理第3和第4波段:
idl
pos = [2L, 3L]
6.4 三个关键字的组合关系
#mermaid-svg-ru8jfKXeIueMzrIU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ru8jfKXeIueMzrIU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ru8jfKXeIueMzrIU .error-icon{fill:#552222;}#mermaid-svg-ru8jfKXeIueMzrIU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ru8jfKXeIueMzrIU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ru8jfKXeIueMzrIU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ru8jfKXeIueMzrIU .marker.cross{stroke:#333333;}#mermaid-svg-ru8jfKXeIueMzrIU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ru8jfKXeIueMzrIU p{margin:0;}#mermaid-svg-ru8jfKXeIueMzrIU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ru8jfKXeIueMzrIU .cluster-label text{fill:#333;}#mermaid-svg-ru8jfKXeIueMzrIU .cluster-label span{color:#333;}#mermaid-svg-ru8jfKXeIueMzrIU .cluster-label span p{background-color:transparent;}#mermaid-svg-ru8jfKXeIueMzrIU .label text,#mermaid-svg-ru8jfKXeIueMzrIU span{fill:#333;color:#333;}#mermaid-svg-ru8jfKXeIueMzrIU .node rect,#mermaid-svg-ru8jfKXeIueMzrIU .node circle,#mermaid-svg-ru8jfKXeIueMzrIU .node ellipse,#mermaid-svg-ru8jfKXeIueMzrIU .node polygon,#mermaid-svg-ru8jfKXeIueMzrIU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ru8jfKXeIueMzrIU .rough-node .label text,#mermaid-svg-ru8jfKXeIueMzrIU .node .label text,#mermaid-svg-ru8jfKXeIueMzrIU .image-shape .label,#mermaid-svg-ru8jfKXeIueMzrIU .icon-shape .label{text-anchor:middle;}#mermaid-svg-ru8jfKXeIueMzrIU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ru8jfKXeIueMzrIU .rough-node .label,#mermaid-svg-ru8jfKXeIueMzrIU .node .label,#mermaid-svg-ru8jfKXeIueMzrIU .image-shape .label,#mermaid-svg-ru8jfKXeIueMzrIU .icon-shape .label{text-align:center;}#mermaid-svg-ru8jfKXeIueMzrIU .node.clickable{cursor:pointer;}#mermaid-svg-ru8jfKXeIueMzrIU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ru8jfKXeIueMzrIU .arrowheadPath{fill:#333333;}#mermaid-svg-ru8jfKXeIueMzrIU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ru8jfKXeIueMzrIU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ru8jfKXeIueMzrIU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ru8jfKXeIueMzrIU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ru8jfKXeIueMzrIU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ru8jfKXeIueMzrIU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ru8jfKXeIueMzrIU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ru8jfKXeIueMzrIU .cluster text{fill:#333;}#mermaid-svg-ru8jfKXeIueMzrIU .cluster span{color:#333;}#mermaid-svg-ru8jfKXeIueMzrIU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ru8jfKXeIueMzrIU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ru8jfKXeIueMzrIU rect.text{fill:none;stroke-width:0;}#mermaid-svg-ru8jfKXeIueMzrIU .icon-shape,#mermaid-svg-ru8jfKXeIueMzrIU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ru8jfKXeIueMzrIU .icon-shape p,#mermaid-svg-ru8jfKXeIueMzrIU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ru8jfKXeIueMzrIU .icon-shape .label rect,#mermaid-svg-ru8jfKXeIueMzrIU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ru8jfKXeIueMzrIU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ru8jfKXeIueMzrIU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ru8jfKXeIueMzrIU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} FID确定文件
ENVI处理函数
DIMS确定空间范围
POS确定波段范围
R_FID返回结果
Classic程序的许多接口都围绕FID、DIMS和POS组织。理解这三个变量,是阅读Classic二次开发代码的基础。
第七章 ENVI Classic批处理模式
7.1 批处理模式的目的
ENVI Classic批处理模式适用于两类场景:在IDL工作台中偶尔调用ENVI函数,以及在无人干预情况下批量执行ENVI处理。
材料给出的初始化流程为:
idl
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT, LOG_FILE='batch.log', $
BATCH_LUN=batch_lun
; 执行批处理
ENVI_BATCH_EXIT
/RESTORE_BASE_SAVE_FILES加载ENVI核心SAV文件,ENVI_BATCH_INIT建立批处理环境并可指定日志,最后使用ENVI_BATCH_EXIT关闭。
7.2 Classic批处理的调用结构
| 阶段 | 主要操作 |
|---|---|
| 初始化 | 加载ENVI基础SAV并启动批处理 |
| 打开文件 | 获得FID |
| 查询信息 | 获取DIMS、波段数和投影 |
| 设置参数 | POS、输出路径、算法参数 |
| 调用算法 | 使用ENVI_DOIT或专用接口 |
| 获取结果 | 检查R_FID和输出文件 |
| 退出 | 关闭批处理环境 |
7.3 常用Classic接口
| 类别 | 代表函数 | 作用 |
|---|---|---|
| 文件选择 | ENVI_PICKFILE、ENVI_SELECT |
交互选择文件和波段 |
| 文件打开 | ENVI_OPEN_FILE、ENVI_OPEN_DATA_FILE |
打开数据 |
| 文件管理 | ENVI_FILE_MNG |
管理打开和关闭 |
| 获取文件列表 | ENVI_GET_FILE_IDS |
获取已打开FID |
| 数据读取 | ENVI_GET_DATA、ENVI_GET_SLICE |
读取数组或切片 |
| ROI | ENVI_GET_ROI_DIMS_PTR |
获取ROI空间范围 |
| 数据注册 | ENVI_ENTER_DATA |
将内存数组加入ENVI |
| 头文件 | ENVI_SETUP_HEAD |
设置输出头信息 |
| 文件写出 | ENVI_WRITE_ENVI_FILE |
写出ENVI格式 |
第八章 ENVI Classic组件与事件管理
材料指出,ENVI提供20多个以WIDGET_开头的功能组件,可用于文件选择、输出文件、参数输入和交互操作。使用这些组件,可以减少从底层编写IDL界面的工作量。
| 组件或函数 | 作用 |
|---|---|
WIDGET_AUTO_BASE |
创建顶级界面Base |
AUTO_WID_MNG |
管理组件事件 |
WIDGET_OUTF |
选择输出文件 |
ENVI_SELECT |
选择输入文件和波段 |
ENVI_COLLECT_SPECTRA |
调用端元波谱收集界面 |
ENVI_REPORT_INIT |
初始化进度提示 |
ENVI_REPORT_INC |
设置进度增量 |
ENVI_REPORT_STAT |
更新进度状态 |
组件的价值在于保持ENVI操作习惯。例如,自定义混合像元分解工具可直接调用ENVI已有端元收集面板,而不必重新开发一套光谱选择界面。
第九章 Classic扩展案例的知识结构
专题材料列出五个Classic案例。它们分别体现不同的扩展方式。
| 案例 | 主要技术 | 体现的能力 |
|---|---|---|
| 批处理格式转换 | 批处理模板、文件搜索和格式输出 | 流程自动化 |
| 植被增强 | NDVI、波段运算和波段组合 | 自定义影像增强 |
| MODIS MCD12Q1批处理 | 投影定义、投影转换和批处理 | 遥感产品批量处理 |
| FCLS混合像元分解 | 自定义算法、分块处理、进度和菜单 | 完整扩展工具 |
| IDL Viewer | IDL组件、ENVI API和程序发布 | 独立应用开发 |
9.1 植被增强案例
材料中的流程为:先计算NDVI,再根据NDVI对绿色波段进行增强,最后重新组合波段。
增强表达式为:
text
(ndvi gt 0.2)*(0.3*nir + 0.7*green) + (ndvi le 0.2)*green
其含义是:当NDVI大于0.2时,使用近红外和绿色波段的加权结果作为新的绿波段;当NDVI不大于0.2时,保持原绿色波段。
| 条件 | 新绿波段 |
|---|---|
NDVI > 0.2 |
0.3 × NIR + 0.7 × Green |
NDVI ≤ 0.2 |
原Green |
该案例说明,简单算法可以通过数组条件表达式完成,并集成到ENVI扩展中。
第十章 FCLS完全约束最小二乘混合像元分解
10.1 为什么需要完全约束
材料指出,ENVI线性混合像元分解可设置丰度和约束,但结果中可能出现负丰度。按照材料中的物理解释,一个像元内各端元丰度应满足两个条件:
0 ≤ f i ≤ 1 0\leq f_i\leq1 0≤fi≤1
∑ i = 1 p f i = 1 \sum_{i=1}^{p}f_i=1 i=1∑pfi=1
完全约束最小二乘法同时考虑非负约束和和为1约束,使丰度结果更符合物理解释。
10.2 输出与RMSE
扩展工具将各端元丰度图作为输出波段,并在最后一个波段保存RMS Error。RMSE用于评价端元组合重建原始像元光谱的误差。
| 输出内容 | 含义 |
|---|---|
| 端元1丰度 | 端元1在像元中的比例 |
| 端元2丰度 | 端元2在像元中的比例 |
| ... | 其他端元比例 |
| RMS Error | 重建误差 |
10.3 工具的实现特点
材料总结了四个技术特点:
| 技术特点 | 作用 |
|---|---|
| ENVI分块处理 | 不受整景文件大小限制 |
| ENVI端元收集面板 | 降低用户界面开发成本 |
| 分块内同步计算丰度与RMS | 减少重复读取,提高效率 |
| 全波段为0像元不处理 | 保持掩膜效果并减少计算 |
10.4 分块处理接口
| 接口 | 作用 |
|---|---|
ENVI_INIT_TILE |
初始化分块并返回Tile ID |
ENVI_GET_TILE |
获取当前数据块 |
ENVI_TILE_DONE |
结束分块处理 |
分块算法的一般流程为:
#mermaid-svg-zNhgbSz2c0ynQ2dB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zNhgbSz2c0ynQ2dB .error-icon{fill:#552222;}#mermaid-svg-zNhgbSz2c0ynQ2dB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zNhgbSz2c0ynQ2dB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .marker.cross{stroke:#333333;}#mermaid-svg-zNhgbSz2c0ynQ2dB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zNhgbSz2c0ynQ2dB p{margin:0;}#mermaid-svg-zNhgbSz2c0ynQ2dB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .cluster-label text{fill:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .cluster-label span{color:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .cluster-label span p{background-color:transparent;}#mermaid-svg-zNhgbSz2c0ynQ2dB .label text,#mermaid-svg-zNhgbSz2c0ynQ2dB span{fill:#333;color:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .node rect,#mermaid-svg-zNhgbSz2c0ynQ2dB .node circle,#mermaid-svg-zNhgbSz2c0ynQ2dB .node ellipse,#mermaid-svg-zNhgbSz2c0ynQ2dB .node polygon,#mermaid-svg-zNhgbSz2c0ynQ2dB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .rough-node .label text,#mermaid-svg-zNhgbSz2c0ynQ2dB .node .label text,#mermaid-svg-zNhgbSz2c0ynQ2dB .image-shape .label,#mermaid-svg-zNhgbSz2c0ynQ2dB .icon-shape .label{text-anchor:middle;}#mermaid-svg-zNhgbSz2c0ynQ2dB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .rough-node .label,#mermaid-svg-zNhgbSz2c0ynQ2dB .node .label,#mermaid-svg-zNhgbSz2c0ynQ2dB .image-shape .label,#mermaid-svg-zNhgbSz2c0ynQ2dB .icon-shape .label{text-align:center;}#mermaid-svg-zNhgbSz2c0ynQ2dB .node.clickable{cursor:pointer;}#mermaid-svg-zNhgbSz2c0ynQ2dB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .arrowheadPath{fill:#333333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zNhgbSz2c0ynQ2dB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zNhgbSz2c0ynQ2dB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zNhgbSz2c0ynQ2dB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zNhgbSz2c0ynQ2dB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .cluster text{fill:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB .cluster span{color:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zNhgbSz2c0ynQ2dB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zNhgbSz2c0ynQ2dB rect.text{fill:none;stroke-width:0;}#mermaid-svg-zNhgbSz2c0ynQ2dB .icon-shape,#mermaid-svg-zNhgbSz2c0ynQ2dB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zNhgbSz2c0ynQ2dB .icon-shape p,#mermaid-svg-zNhgbSz2c0ynQ2dB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zNhgbSz2c0ynQ2dB .icon-shape .label rect,#mermaid-svg-zNhgbSz2c0ynQ2dB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zNhgbSz2c0ynQ2dB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zNhgbSz2c0ynQ2dB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zNhgbSz2c0ynQ2dB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
初始化Tile
读取一块数据
识别全0像元
FCLS分解
计算RMS
写出当前块
是否还有数据块
结束Tile
10.5 用户界面与进度
FCLS工具使用ENVI_SELECT选择输入,使用ENVI_COLLECT_SPECTRA收集端元,使用WIDGET_OUTF选择输出,并使用ENVI_REPORT_*更新进度。这说明一个完整扩展通常由算法、数据接口、界面和进度管理共同构成。
第十一章 IDL Viewer与独立应用
IDL Viewer使用IDL组件构建通用界面,可以调用ENVI组件和API完成影像读取、信息识别和自定义功能。材料以IDLViewer_useENVI说明发布流程:
| 阶段 | 主要工作 |
|---|---|
| 构建工程 | 组织源码和资源 |
| 处理依赖 | 注意RESOLVE_ALL选项 |
MAKE_RT |
生成运行环境 |
| 修改配置 | 设置路径和启动参数 |
| 复制许可与资源 | 保证目标环境可运行 |
该模式适合将ENVI能力嵌入自定义系统,而不是要求用户直接操作ENVI主界面。
第十二章 ENVI 5面向对象开发模式
12.1 从过程式接口到对象式接口
ENVI Classic以FID、DIMS、POS和ENVI_DOIT为核心,ENVI 5则以对象、方法和ENVITask为核心。
启动ENVI 5:
idl
e = ENVI()
无界面批处理:
idl
e = ENVI(/HEADLESS)
关闭:
idl
e.Close
| 开发模式 | 核心对象 |
|---|---|
| ENVI Classic | FID、DIMS、POS、DOIT |
| ENVI 5 | ENVI对象、ENVIRaster、ENVIView、ENVITask |
12.2 ENVI对象的常用方法
| 方法 | 功能 |
|---|---|
AddCustomReader |
添加自定义格式读取器 |
AddExtension |
向Toolbox添加扩展 |
Close |
关闭ENVI |
CreateView |
创建视图 |
GetBroadcastChannel |
获取进度通信通道 |
GetTemporaryFilename |
获取临时文件名 |
GetView |
获取当前视图 |
LogMessage |
写入日志 |
OpenRaster |
打开栅格 |
OpenROI |
打开ROI |
OpenVector |
打开矢量 |
Refresh |
控制界面刷新 |
ReportError |
显示错误信息 |
Show |
激活ENVI窗口 |
12.3 ENVI 5的数据对象
| 对象 | 主要用途 |
|---|---|
ENVIRaster |
栅格数据和操作 |
ENVIRasterMetadata |
栅格元数据 |
ENVIRasterIterator |
分块处理 |
ENVIRasterStatistics |
统计值 |
ENVIROI |
感兴趣区 |
ENVIVector |
矢量数据 |
ENVISpectralLibrary |
波谱库 |
ENVIRasterSeries |
栅格时间序列 |
ENVIGCPSet |
地面控制点 |
ENVITiePointSet |
连接点 |
ENVITime |
时间对象 |
ENVIRPCRasterSpatialRef |
RPC空间参考 |
ENVIStandardRasterSpatialRef |
标准坐标空间参考 |
对象式接口将数据和操作组织在一起。例如,打开栅格后,可以通过对象属性查询波段、尺寸和空间参考,而不再只依赖独立FID查询函数。
第十三章 ENVI 5虚拟栅格
13.1 虚拟栅格的作用
虚拟栅格用对象描述处理结果,不一定立即生成完整物理文件。多个虚拟栅格可连接为处理链,只有在显示或导出时才执行必要计算。
材料列出的虚拟栅格包括:
| 类型 | 代表对象 |
|---|---|
| 阈值 | ENVIBinaryGTThresholdRaster、ENVIBinaryLTThresholdRaster |
| 掩膜 | ENVIMaskRaster、ENVIROIMaskRaster、ENVIVectorMaskRaster |
| 拉伸 | ENVILinearPercentStretchRaster、ENVILogStretchRaster |
| 定标 | ENVIGainOffsetRaster |
| 重投影 | ENVIReprojectRaster |
| 重采样 | ENVIResampleRaster |
| 裁剪 | ENVISubsetRaster |
| 镶嵌 | ENVIMosaicRaster |
| 融合 | ENVINNDiffusePanSharpeningRaster |
| 指数 | ENVISpectralIndexRaster |
| 波段运算 | ENVIPixelwiseBandMathRaster |
| QUAC | ENVIQUACRaster |
13.2 虚拟栅格流程示例
材料给出的示例包括空间裁剪、图像融合、线性拉伸和镶嵌。
#mermaid-svg-dcYCNRc0j4PEw606{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dcYCNRc0j4PEw606 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dcYCNRc0j4PEw606 .error-icon{fill:#552222;}#mermaid-svg-dcYCNRc0j4PEw606 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dcYCNRc0j4PEw606 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dcYCNRc0j4PEw606 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dcYCNRc0j4PEw606 .marker.cross{stroke:#333333;}#mermaid-svg-dcYCNRc0j4PEw606 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dcYCNRc0j4PEw606 p{margin:0;}#mermaid-svg-dcYCNRc0j4PEw606 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dcYCNRc0j4PEw606 .cluster-label text{fill:#333;}#mermaid-svg-dcYCNRc0j4PEw606 .cluster-label span{color:#333;}#mermaid-svg-dcYCNRc0j4PEw606 .cluster-label span p{background-color:transparent;}#mermaid-svg-dcYCNRc0j4PEw606 .label text,#mermaid-svg-dcYCNRc0j4PEw606 span{fill:#333;color:#333;}#mermaid-svg-dcYCNRc0j4PEw606 .node rect,#mermaid-svg-dcYCNRc0j4PEw606 .node circle,#mermaid-svg-dcYCNRc0j4PEw606 .node ellipse,#mermaid-svg-dcYCNRc0j4PEw606 .node polygon,#mermaid-svg-dcYCNRc0j4PEw606 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dcYCNRc0j4PEw606 .rough-node .label text,#mermaid-svg-dcYCNRc0j4PEw606 .node .label text,#mermaid-svg-dcYCNRc0j4PEw606 .image-shape .label,#mermaid-svg-dcYCNRc0j4PEw606 .icon-shape .label{text-anchor:middle;}#mermaid-svg-dcYCNRc0j4PEw606 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dcYCNRc0j4PEw606 .rough-node .label,#mermaid-svg-dcYCNRc0j4PEw606 .node .label,#mermaid-svg-dcYCNRc0j4PEw606 .image-shape .label,#mermaid-svg-dcYCNRc0j4PEw606 .icon-shape .label{text-align:center;}#mermaid-svg-dcYCNRc0j4PEw606 .node.clickable{cursor:pointer;}#mermaid-svg-dcYCNRc0j4PEw606 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dcYCNRc0j4PEw606 .arrowheadPath{fill:#333333;}#mermaid-svg-dcYCNRc0j4PEw606 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dcYCNRc0j4PEw606 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dcYCNRc0j4PEw606 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dcYCNRc0j4PEw606 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dcYCNRc0j4PEw606 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dcYCNRc0j4PEw606 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dcYCNRc0j4PEw606 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dcYCNRc0j4PEw606 .cluster text{fill:#333;}#mermaid-svg-dcYCNRc0j4PEw606 .cluster span{color:#333;}#mermaid-svg-dcYCNRc0j4PEw606 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dcYCNRc0j4PEw606 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dcYCNRc0j4PEw606 rect.text{fill:none;stroke-width:0;}#mermaid-svg-dcYCNRc0j4PEw606 .icon-shape,#mermaid-svg-dcYCNRc0j4PEw606 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dcYCNRc0j4PEw606 .icon-shape p,#mermaid-svg-dcYCNRc0j4PEw606 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dcYCNRc0j4PEw606 .icon-shape .label rect,#mermaid-svg-dcYCNRc0j4PEw606 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dcYCNRc0j4PEw606 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dcYCNRc0j4PEw606 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dcYCNRc0j4PEw606 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入ENVIRaster
ENVISubsetRaster
ENVINNDiffusePanSharpeningRaster
ENVILinearPercentStretchRaster
显示或导出
虚拟栅格适合快速构建处理链,减少中间文件。但若需要长期保存或供其他软件使用,最终仍需导出为物理栅格。
第十四章 ENVI 5显示控制
ENVI 5将视图、图层和界面管理为对象。
| 对象 | 作用 |
|---|---|
ENVIView |
管理视图平移、缩放和旋转 |
ENVIRasterLayer |
栅格图层 |
ENVIVectorLayer |
矢量图层 |
ENVIROILayer |
ROI图层 |
ENVIRasterSeriesLayer |
时间序列图层 |
ENVIUI |
文件选择和坐标系等界面 |
ENVIPointCloudViewer |
LiDAR显示 |
ENVIPortal |
透视窗口 |
面向对象显示控制使扩展程序可以打开数据、创建图层、调整显示顺序和响应交互事件。
第十五章 ENVITask图像处理
15.1 ENVITask的定位
从ENVI 5.1开始,ENVI提供ENVITask和ENVITaskParameter对象,将图像处理功能封装为标准任务。材料列出的早期任务包括QUAC、辐射定标、GLT重投影和RPC正射。
| ENVITask | 功能 |
|---|---|
ENVIQUACTask |
快速大气校正 |
ENVIRadiometricCalibrationTask |
辐射定标 |
ENVIReprojectGLTTask |
GLT几何校正 |
ENVIRPCOrthorectificationTask |
RPC正射校正 |
材料还显示,ENVITask数量从ENVI 5.1的4个逐步增加到ENVI 5.3.1的149个,说明任务化接口逐步覆盖更多ENVI功能。
15.2 ENVITask调用结构
idl
raster = e.OpenRaster(file)
task = ENVITask('QUAC')
task.INPUT_RASTER = raster
task.SENSOR = 'QuickBird'
task.OUTPUT_RASTER_URI = e.GetTemporaryFilename()
task.Execute
任务调用可以整理为四步:
| 步骤 | 内容 |
|---|---|
| 创建任务 | task = ENVITask('任务名') |
| 设置输入 | 栅格、矢量、ROI和参数 |
| 设置输出 | 文件路径或临时文件 |
| 执行任务 | task.Execute |
第十六章 ENVI 5变化监测流程
材料展示了一个由多个任务连接的变化监测流程:
| 顺序 | 处理 | 作用 |
|---|---|---|
| 1 | ENVIQUACRaster |
两期影像快速大气校正 |
| 2 | ENVISpectralIndexRaster |
分别计算NDVI |
| 3 | ImageBandDifference |
计算两期NDVI差值 |
| 4 | AutoChangeThresholdClassification |
自动阈值分类 |
| 5 | ClassificationSmoothing |
平滑分类结果 |
| 6 | ClassificationAggregation |
聚合小斑块 |
| 7 | ClassificationToShapefile |
输出变化矢量 |
#mermaid-svg-LcPrMMxswbhuWYc9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LcPrMMxswbhuWYc9 .error-icon{fill:#552222;}#mermaid-svg-LcPrMMxswbhuWYc9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LcPrMMxswbhuWYc9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LcPrMMxswbhuWYc9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LcPrMMxswbhuWYc9 .marker.cross{stroke:#333333;}#mermaid-svg-LcPrMMxswbhuWYc9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LcPrMMxswbhuWYc9 p{margin:0;}#mermaid-svg-LcPrMMxswbhuWYc9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 .cluster-label text{fill:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 .cluster-label span{color:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 .cluster-label span p{background-color:transparent;}#mermaid-svg-LcPrMMxswbhuWYc9 .label text,#mermaid-svg-LcPrMMxswbhuWYc9 span{fill:#333;color:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 .node rect,#mermaid-svg-LcPrMMxswbhuWYc9 .node circle,#mermaid-svg-LcPrMMxswbhuWYc9 .node ellipse,#mermaid-svg-LcPrMMxswbhuWYc9 .node polygon,#mermaid-svg-LcPrMMxswbhuWYc9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LcPrMMxswbhuWYc9 .rough-node .label text,#mermaid-svg-LcPrMMxswbhuWYc9 .node .label text,#mermaid-svg-LcPrMMxswbhuWYc9 .image-shape .label,#mermaid-svg-LcPrMMxswbhuWYc9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-LcPrMMxswbhuWYc9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LcPrMMxswbhuWYc9 .rough-node .label,#mermaid-svg-LcPrMMxswbhuWYc9 .node .label,#mermaid-svg-LcPrMMxswbhuWYc9 .image-shape .label,#mermaid-svg-LcPrMMxswbhuWYc9 .icon-shape .label{text-align:center;}#mermaid-svg-LcPrMMxswbhuWYc9 .node.clickable{cursor:pointer;}#mermaid-svg-LcPrMMxswbhuWYc9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LcPrMMxswbhuWYc9 .arrowheadPath{fill:#333333;}#mermaid-svg-LcPrMMxswbhuWYc9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LcPrMMxswbhuWYc9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LcPrMMxswbhuWYc9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LcPrMMxswbhuWYc9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LcPrMMxswbhuWYc9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LcPrMMxswbhuWYc9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LcPrMMxswbhuWYc9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LcPrMMxswbhuWYc9 .cluster text{fill:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 .cluster span{color:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LcPrMMxswbhuWYc9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LcPrMMxswbhuWYc9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-LcPrMMxswbhuWYc9 .icon-shape,#mermaid-svg-LcPrMMxswbhuWYc9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LcPrMMxswbhuWYc9 .icon-shape p,#mermaid-svg-LcPrMMxswbhuWYc9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LcPrMMxswbhuWYc9 .icon-shape .label rect,#mermaid-svg-LcPrMMxswbhuWYc9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LcPrMMxswbhuWYc9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LcPrMMxswbhuWYc9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LcPrMMxswbhuWYc9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 时相1影像
QUAC
时相2影像
QUAC
NDVI1
NDVI2
差值
自动阈值
平滑
聚合
Shapefile
材料指出,该流程可用较少代码实现,体现了ENVITask在流程编排方面的优势。
第十七章 高分一号预处理任务
材料中的高分一号流程包括多光谱和全色影像正射、转换为BIL以及NNDiffuse融合。
#mermaid-svg-oMCjg5Dc59LMr552{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oMCjg5Dc59LMr552 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oMCjg5Dc59LMr552 .error-icon{fill:#552222;}#mermaid-svg-oMCjg5Dc59LMr552 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oMCjg5Dc59LMr552 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oMCjg5Dc59LMr552 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oMCjg5Dc59LMr552 .marker.cross{stroke:#333333;}#mermaid-svg-oMCjg5Dc59LMr552 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oMCjg5Dc59LMr552 p{margin:0;}#mermaid-svg-oMCjg5Dc59LMr552 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oMCjg5Dc59LMr552 .cluster-label text{fill:#333;}#mermaid-svg-oMCjg5Dc59LMr552 .cluster-label span{color:#333;}#mermaid-svg-oMCjg5Dc59LMr552 .cluster-label span p{background-color:transparent;}#mermaid-svg-oMCjg5Dc59LMr552 .label text,#mermaid-svg-oMCjg5Dc59LMr552 span{fill:#333;color:#333;}#mermaid-svg-oMCjg5Dc59LMr552 .node rect,#mermaid-svg-oMCjg5Dc59LMr552 .node circle,#mermaid-svg-oMCjg5Dc59LMr552 .node ellipse,#mermaid-svg-oMCjg5Dc59LMr552 .node polygon,#mermaid-svg-oMCjg5Dc59LMr552 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oMCjg5Dc59LMr552 .rough-node .label text,#mermaid-svg-oMCjg5Dc59LMr552 .node .label text,#mermaid-svg-oMCjg5Dc59LMr552 .image-shape .label,#mermaid-svg-oMCjg5Dc59LMr552 .icon-shape .label{text-anchor:middle;}#mermaid-svg-oMCjg5Dc59LMr552 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oMCjg5Dc59LMr552 .rough-node .label,#mermaid-svg-oMCjg5Dc59LMr552 .node .label,#mermaid-svg-oMCjg5Dc59LMr552 .image-shape .label,#mermaid-svg-oMCjg5Dc59LMr552 .icon-shape .label{text-align:center;}#mermaid-svg-oMCjg5Dc59LMr552 .node.clickable{cursor:pointer;}#mermaid-svg-oMCjg5Dc59LMr552 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oMCjg5Dc59LMr552 .arrowheadPath{fill:#333333;}#mermaid-svg-oMCjg5Dc59LMr552 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oMCjg5Dc59LMr552 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oMCjg5Dc59LMr552 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oMCjg5Dc59LMr552 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oMCjg5Dc59LMr552 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oMCjg5Dc59LMr552 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oMCjg5Dc59LMr552 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oMCjg5Dc59LMr552 .cluster text{fill:#333;}#mermaid-svg-oMCjg5Dc59LMr552 .cluster span{color:#333;}#mermaid-svg-oMCjg5Dc59LMr552 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oMCjg5Dc59LMr552 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oMCjg5Dc59LMr552 rect.text{fill:none;stroke-width:0;}#mermaid-svg-oMCjg5Dc59LMr552 .icon-shape,#mermaid-svg-oMCjg5Dc59LMr552 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oMCjg5Dc59LMr552 .icon-shape p,#mermaid-svg-oMCjg5Dc59LMr552 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oMCjg5Dc59LMr552 .icon-shape .label rect,#mermaid-svg-oMCjg5Dc59LMr552 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oMCjg5Dc59LMr552 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oMCjg5Dc59LMr552 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oMCjg5Dc59LMr552 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 多光谱影像
RPC正射
转换为BIL
全色影像
RPC正射
NNDiffuse融合
融合结果
涉及的任务包括:
ENVIRPCOrthorectificationTask;ENVINNDiffusePanSharpeningTask。
该案例表明,ENVITask适合将多个标准ENVI功能组合为一个卫星预处理流程。
第十八章 自定义ENVITask
18.1 自定义任务的组成
材料以高分一号预处理、Landsat 8地表温度和批量自动配准为例说明自定义ENVITask。
| 组成部分 | 作用 |
|---|---|
| IDL算法代码 | 实现处理逻辑 |
| Task描述文件 | 定义任务名称、参数和属性 |
| SAV文件 | 保存编译后的IDL代码 |
| Dynamic Task UI | 自动生成参数界面 |
| Extension代码 | 将任务加入Toolbox |
18.2 创建流程
#mermaid-svg-sl8FzUq3HTmIH1fx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sl8FzUq3HTmIH1fx .error-icon{fill:#552222;}#mermaid-svg-sl8FzUq3HTmIH1fx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sl8FzUq3HTmIH1fx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sl8FzUq3HTmIH1fx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sl8FzUq3HTmIH1fx .marker.cross{stroke:#333333;}#mermaid-svg-sl8FzUq3HTmIH1fx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sl8FzUq3HTmIH1fx p{margin:0;}#mermaid-svg-sl8FzUq3HTmIH1fx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx .cluster-label text{fill:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx .cluster-label span{color:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx .cluster-label span p{background-color:transparent;}#mermaid-svg-sl8FzUq3HTmIH1fx .label text,#mermaid-svg-sl8FzUq3HTmIH1fx span{fill:#333;color:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx .node rect,#mermaid-svg-sl8FzUq3HTmIH1fx .node circle,#mermaid-svg-sl8FzUq3HTmIH1fx .node ellipse,#mermaid-svg-sl8FzUq3HTmIH1fx .node polygon,#mermaid-svg-sl8FzUq3HTmIH1fx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sl8FzUq3HTmIH1fx .rough-node .label text,#mermaid-svg-sl8FzUq3HTmIH1fx .node .label text,#mermaid-svg-sl8FzUq3HTmIH1fx .image-shape .label,#mermaid-svg-sl8FzUq3HTmIH1fx .icon-shape .label{text-anchor:middle;}#mermaid-svg-sl8FzUq3HTmIH1fx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sl8FzUq3HTmIH1fx .rough-node .label,#mermaid-svg-sl8FzUq3HTmIH1fx .node .label,#mermaid-svg-sl8FzUq3HTmIH1fx .image-shape .label,#mermaid-svg-sl8FzUq3HTmIH1fx .icon-shape .label{text-align:center;}#mermaid-svg-sl8FzUq3HTmIH1fx .node.clickable{cursor:pointer;}#mermaid-svg-sl8FzUq3HTmIH1fx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sl8FzUq3HTmIH1fx .arrowheadPath{fill:#333333;}#mermaid-svg-sl8FzUq3HTmIH1fx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sl8FzUq3HTmIH1fx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sl8FzUq3HTmIH1fx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sl8FzUq3HTmIH1fx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sl8FzUq3HTmIH1fx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sl8FzUq3HTmIH1fx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sl8FzUq3HTmIH1fx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sl8FzUq3HTmIH1fx .cluster text{fill:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx .cluster span{color:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sl8FzUq3HTmIH1fx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sl8FzUq3HTmIH1fx rect.text{fill:none;stroke-width:0;}#mermaid-svg-sl8FzUq3HTmIH1fx .icon-shape,#mermaid-svg-sl8FzUq3HTmIH1fx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sl8FzUq3HTmIH1fx .icon-shape p,#mermaid-svg-sl8FzUq3HTmIH1fx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sl8FzUq3HTmIH1fx .icon-shape .label rect,#mermaid-svg-sl8FzUq3HTmIH1fx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sl8FzUq3HTmIH1fx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sl8FzUq3HTmIH1fx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sl8FzUq3HTmIH1fx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 编写IDL代码
创建Task文件
配置输入输出参数
编译为SAV
部署到custom_code
编写Extension
复制到Extensions
在Toolbox中运行
18.3 自定义ENVITask的优势
| 优势 | 说明 |
|---|---|
| 参数自动验证 | 减少手工错误检查代码 |
| 临时文件自动管理 | 未设置输出时可生成临时路径 |
| 动态界面 | 根据Task参数自动生成交互界面 |
| 旧代码迁移成本低 | 现有IDL算法可较少修改后封装 |
| 可部署到服务端 | 可面向ENVI Services Engine |
动态任务界面将"参数定义"和"界面生成"连接起来,开发者主要关注任务输入、输出和算法,而不必为每个工具重新设计完整UI。
第十九章 ENVI 5事件处理与魔术棒案例
材料列出了鼠标事件函数形式。
| 事件 | 函数参数 |
|---|---|
| 鼠标按下 | View, X, Y, Button, KeyMods, Clicks |
| 鼠标移动 | View, X, Y, KeyMods |
| 鼠标弹起 | View, X, Y, Button |
| 鼠标滚轮 | View, X, Y, Delta, KeyMods |
其中,X、Y是设备坐标,视图左下角为[0,0];Button中1、2、4分别代表左键、中键和右键;KeyMods表示Shift、Control、Caps Lock和Alt等组合键。
魔术棒案例使用:
| 技术 | 作用 |
|---|---|
| 鼠标单击事件 | 获取目标像元 |
| ROI接口 | 保存搜索结果 |
SEARCH2D |
搜索灰度相似邻近像元 |
该案例说明,ENVI 5扩展不仅可以执行后台任务,也能响应用户在视图中的交互操作。
第二十章 ENVI Classic与ENVI 5接口对照
| 功能 | ENVI Classic | ENVI 5 |
|---|---|---|
| 启动ENVI | ENVI |
e = ENVI() |
| 启动批处理 | ENVI,/RESTORE_BASE_SAVE_FILES+ENVI_BATCH_INIT |
e = ENVI(/HEADLESS) |
| 退出批处理 | ENVI_BATCH_EXIT |
e.Close |
| 打开影像 | ENVI_OPEN_FILE |
e.OpenRaster() |
| 添加扩展 | ENVI_DEFINE_MENU_BUTTON |
e.AddExtension |
| 获取打开数据 | ENVI_GET_FILE_IDS |
ENVI数据集合对象 |
| 获取数据 | ENVI_GET_DATA |
ENVIRaster和数据集合 |
| 文件关闭 | ENVI_FILE_MNG |
ENVIRaster.Close |
| 查询信息 | ENVI_FILE_QUERY |
ENVIRaster属性 |
| 分块处理 | ENVI_INIT_TILE |
ENVIRasterIterator |
| 选择输入 | ENVI_SELECT |
ENVIUI.SelectInputData |
| 显示影像 | ENVI_DISPLAY_BANDS |
ENVIView.CreateLayer |
20.1 QUAC调用对比
Classic方式:
idl
ENVI_OPEN_FILE, file, R_FID=fid
ENVI_FILE_QUERY, fid, DIMS=dims, NB=nb
pos = LINDGEN(nb)
out_name = ENVI_GET_TMP()
ENVI_DOIT, 'ENVI_QUAC_DOIT', FID=fid, $
POS=pos, DIMS=dims, QUAC_SENSOR='QuickBird', $
OUT_NAME=out_name, R_FID=r_fid
ENVI 5方式:
idl
raster = e.OpenRaster(file)
task = ENVITask('QUAC')
task.INPUT_RASTER = raster
task.SENSOR = 'QuickBird'
task.OUTPUT_RASTER_URI = e.GetTemporaryFilename()
task.Execute
| 比较项 | Classic | ENVI 5 |
|---|---|---|
| 数据标识 | FID | ENVIRaster对象 |
| 空间与波段 | DIMS、POS | 任务参数或栅格对象 |
| 算法调用 | ENVI_DOIT |
ENVITask.Execute |
| 可读性 | 参数较底层 | 对象和参数更直观 |
| 流程组合 | 需要手工管理 | 更适合任务链 |
第二十一章 ENVI 5扩展部署
材料指出,ENVI 5扩展可以将编译后的SAV文件复制到Extensions文件夹,重启ENVI后加载。
示例路径:
text
C:\Program Files\Exelis\ENVI5x\extensions
自定义ENVITask还可能需要将SAV和Task文件复制到custom_code,再将Extension代码编译后放入Extensions。
| 文件类型 | 常见部署位置 | 作用 |
|---|---|---|
| 算法SAV | custom_code或扩展目录 |
实现任务逻辑 |
| Task文件 | custom_code |
描述参数和任务属性 |
| Extension SAV | extensions |
添加Toolbox入口 |
| 资源文件 | 工具自有目录 | 图标、配置和模板 |
部署前应确认软件版本、文件路径和依赖。Classic的save_add与ENVI 5的extensions、custom_code属于不同扩展机制,不能混用。
第二十二章 批量业务案例
22.1 高分一号批处理
材料中的高分一号批处理包括:
- 自动解压;
- 多光谱无控正射;
- 全色无控正射;
- PMS融合;
- 图像镶嵌。
#mermaid-svg-3x7sVSQHZoVL5Ud5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .error-icon{fill:#552222;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .marker.cross{stroke:#333333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 p{margin:0;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .cluster-label text{fill:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .cluster-label span{color:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .cluster-label span p{background-color:transparent;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .label text,#mermaid-svg-3x7sVSQHZoVL5Ud5 span{fill:#333;color:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .node rect,#mermaid-svg-3x7sVSQHZoVL5Ud5 .node circle,#mermaid-svg-3x7sVSQHZoVL5Ud5 .node ellipse,#mermaid-svg-3x7sVSQHZoVL5Ud5 .node polygon,#mermaid-svg-3x7sVSQHZoVL5Ud5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .rough-node .label text,#mermaid-svg-3x7sVSQHZoVL5Ud5 .node .label text,#mermaid-svg-3x7sVSQHZoVL5Ud5 .image-shape .label,#mermaid-svg-3x7sVSQHZoVL5Ud5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .rough-node .label,#mermaid-svg-3x7sVSQHZoVL5Ud5 .node .label,#mermaid-svg-3x7sVSQHZoVL5Ud5 .image-shape .label,#mermaid-svg-3x7sVSQHZoVL5Ud5 .icon-shape .label{text-align:center;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .node.clickable{cursor:pointer;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .arrowheadPath{fill:#333333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3x7sVSQHZoVL5Ud5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3x7sVSQHZoVL5Ud5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3x7sVSQHZoVL5Ud5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .cluster text{fill:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .cluster span{color:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3x7sVSQHZoVL5Ud5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .icon-shape,#mermaid-svg-3x7sVSQHZoVL5Ud5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .icon-shape p,#mermaid-svg-3x7sVSQHZoVL5Ud5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .icon-shape .label rect,#mermaid-svg-3x7sVSQHZoVL5Ud5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3x7sVSQHZoVL5Ud5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3x7sVSQHZoVL5Ud5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3x7sVSQHZoVL5Ud5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 压缩数据
自动解压
多光谱正射
全色正射
PMS融合
图像镶嵌
该流程体现了文件管理、标准任务调用和批量循环的综合应用。
22.2 Shapefile分幅裁剪
材料中的分幅裁剪使用Shapefile每条记录裁剪栅格,并可用某个属性字段作为输出文件名。
| 接口 | 作用 |
|---|---|
IDLffShape |
读取Shapefile记录与坐标 |
ENVI_CONVERT_PROJECTION_COORDINATES |
经纬度转投影坐标 |
ENVI_CONVERT_FILE_COORDINATES |
地理坐标转文件像元坐标 |
ENVI_DEFINE_ROI |
创建ROI |
ENVI_MASK_DOIT |
利用ROI创建掩膜 |
ENVI_MASK_APPLY_DOIT |
应用掩膜完成裁剪 |
分幅裁剪并不只是循环输出文件,还涉及坐标转换、ROI构建、掩膜和命名。
22.3 镶嵌与批量裁剪任务
材料还展示了:
| 工具 | 实现基础 |
|---|---|
| 图像镶嵌批处理 | ENVIMosaicRaster |
| 栅格批量裁剪 | 自定义ENVI_RasterSubset_Batch任务 |
| ENVITask批处理工具 | 自定义ENVITasks_Batch任务 |
这些案例说明,自定义ENVITask可以进一步封装"对多个输入重复调用标准ENVITask"的批处理能力。
第二十三章 如何选择开发方式
| 需求 | 更合适的方式 | 原因 |
|---|---|---|
| 单个公式或指数 | Band Math | 实现最快 |
| 光谱曲线变换 | Spectral Math | 直接作用于光谱 |
| 简单菜单工具 | 用户函数+SAV | 易于集成 |
| Classic旧项目维护 | FID、DIMS、POS、DOIT | 与原系统兼容 |
| 大影像自定义算法 | 分块接口或RasterIterator | 控制内存 |
| 多步骤标准流程 | ENVITask | 参数和流程清晰 |
| 延迟计算链 | 虚拟栅格 | 减少中间文件 |
| 自动生成界面 | 自定义ENVITask | Dynamic Task UI |
| 视图交互工具 | ENVI事件和ROI接口 | 响应鼠标键盘 |
| 独立业务系统 | IDL组件+ENVI API | 可定制完整界面 |
开发方式应尽量从简单到复杂。能够用Band Math清楚完成的任务,不必直接设计完整扩展;需要重复批处理和标准参数验证时,ENVITask更适合;涉及复杂算法和大数据时,再引入分块和独立界面。
第二十四章 常见误区与排查方向
| 常见问题 | 更准确的理解 |
|---|---|
| ENVI二次开发只有一种模式 | Classic和ENVI 5存在不同接口体系 |
| Band Math只能写简单加减法 | 还可使用IDL数组函数和逻辑表达式 |
| FID就是文件路径 | FID是Classic运行环境中的文件标识 |
| DIMS包含波段信息 | DIMS定义空间范围,波段由POS定义 |
| R_FID无关紧要 | 内存结果可能只能通过R_FID访问 |
Classic菜单只需修改.men |
还需要响应程序和SAV部署 |
| 大影像可以全部读入内存 | 应使用Tile或RasterIterator分块 |
| 虚拟栅格已经是物理文件 | 需要导出后才成为持久文件 |
| ENVITask会自动决定所有参数 | 任务仍需正确设置输入和业务参数 |
| 自定义Task只写IDL代码即可 | 还需要Task描述和部署文件 |
| 动态界面等于无需参数设计 | 参数名称、类型和约束仍需定义 |
| Classic代码可原样作为ENVI 5代码 | 数据对象和算法调用方式不同 |
排查扩展问题时,首先确定当前使用的是Classic还是ENVI 5环境,再检查输入对象类型、文件标识、任务名称和部署目录。很多错误来自两套接口混用。
第二十五章 本篇知识总结
ENVI功能扩展可以从"表达式---程序---任务---系统"四个尺度理解。
表达式层面,Band Math和Spectral Math利用IDL数组运算快速完成像元和光谱计算。程序层面,ENVI Classic通过FID、DIMS、POS、DOIT和组件构建菜单工具与批处理。任务层面,ENVI 5通过对象、虚拟栅格和ENVITask组织标准处理流程,并支持自定义任务和动态界面。系统层面,IDL Viewer和ENVI API可构建独立应用。
Classic与ENVI 5的核心差异可以概括为:
Classic以过程和文件ID为中心,ENVI 5以数据对象和任务为中心。
理解两套体系的对应关系,有助于阅读旧代码、维护Classic项目,也能将已有IDL算法迁移到ENVI 5任务化开发模式。
第二十六章 术语表
| 术语 | 说明 |
|---|---|
| Band Math | ENVI波段运算工具 |
| Spectral Math | ENVI波谱运算工具 |
| 用户函数 | 可由ENVI菜单调用的IDL程序 |
| SAV | IDL编译保存文件 |
save_add |
ENVI Classic扩展程序目录 |
| FID | ENVI Classic文件标识 |
| R_FID | ENVI Classic处理结果文件标识 |
| M_FID | ENVI Classic掩膜文件标识 |
| DIMS | ENVI Classic空间子集数组 |
| POS | ENVI Classic波段位置数组 |
ENVI_DOIT |
ENVI Classic算法调用机制 |
| Tile | ENVI Classic影像分块 |
| FCLS | 完全约束最小二乘混合像元分解 |
| RMSE | 均方根误差 |
ENVIRaster |
ENVI 5栅格对象 |
ENVIView |
ENVI 5视图对象 |
| Virtual Raster | 延迟计算的虚拟栅格对象 |
ENVIRasterIterator |
ENVI 5分块迭代器 |
| ENVITask | ENVI 5标准任务对象 |
| Custom ENVITask | 用户自定义ENVI任务 |
| Dynamic Task UI | 根据Task参数自动生成的界面 |
| Extension | 加入ENVI Toolbox的扩展入口 |
| Headless | 无图形界面的批处理模式 |
custom_code |
自定义任务代码与描述文件部署目录 |
Extensions |
ENVI 5扩展部署目录 |