ENVI 6.0/IDL 9.0新功能介绍
ENVI 6.0 新功能
ENVI 6.0/IDL 9.0于2023年11月正式发布,ENVI 6.0 包括以下新增功能和改进功能:
- 添加了对新的数据类型的支持
- 新的波谱沙漏工作流工具和 N 维可视化工具
- 新的目标检测工作流工具
- 新的动态波段选择工具
- 新材料识别工具
- 改进的端元收集工具
- 新增和更新的ENVI Toolbox 工具
- 新增和更新的ENVI Task
- ENVI性能改进
- NITF更新
- 将精准农业工具包模块合并到 ENVI 中
- 增强对ENVI Connect的支持
1. 新增支持数据类型
ENVI 6.0 新增如下中数据类型和传感器:
- GRUS L1C、L2A - Axelspace 微型地球观测卫星
- ISIS3 - USGS 天体地质学 ISIS 立方体,V3版
- PDS4 - NASA 行星数据系统, V4版
2. 新的波谱沙漏工作流和N维可视化工具
ENVI 6.0 中添加了新的波谱沙漏工作流工具和重新设计的 N 维可视化工具。
波谱沙漏工作流将引导您完成从高光谱或多光谱数据中自动查找和映射图像中波谱端元的过程。
波谱沙漏工作流工具取代了 ENVI 工具箱中的波谱沙漏向导工具。
作为波谱沙漏工作流程的一部分,N 维可视化工具可用于选择端元。可以从 ENVI 工具箱打开,或通过在感兴趣区工具中选择Options > Send ROIs to n-D Visualizer打开。
N 维可视化工具的一些新功能包括:
- 点云显示使用 IDL 的对象图形而不是直接图形。这允许缩放和平移,并提供更多绘图符号。
- 所有端元类与输入栅格的光谱曲线一起动态显示在 ENVI 视图中。这可以让 N 维可视化工具中的数据点云和源栅格建立更好的连接。
- 端元类和波段选择现在全部包含在单个 N 维可视化窗口中,而不是在三个单独的窗口。
- 可以使用套索或画笔为不同的类选择像素,然后按住 Shift 键用套索和画笔工具从类中删除像素。
- 现在可以在 N 维可视化工具会话中随时应用聚类算法(相比之下,旧的 N 维可视化工具有一个“预聚类”选项,只能在会话开始时使用)。
- 添加了新的像元提纯(Refine)功能,其中包含“按平均值”和“按 PPI 分数”选项。Refine 将根据数千个不同的投影自动减少数据云中的像素数量。此选项使您能够看到哪些像素真正聚集在一起。
3. 新的目标检测工作流工具
此版本中添加了目标检测工作流。使用目标检测工作流来定位高光谱或多光谱图像中与场景区域特征相匹配的目标。目标可以是感兴趣的材料或矿物,或者人造物体。
添加目标检测工作流后,以下工具已从ENVI工具箱中删除:
- SAM Target Finder with BandMax
- SPEAR LOC - Roads
- SPEAR LOC - Water
- THOR LOC - Water and Trails
- All THOR Target Detection tools
注意:这些删除的工具在 ENVI Classic 中仍然可用。
4. 新的动态波段选择工具
此版本包括新的动态波段选择工具,可让您轻松更改视图中所选栅格的 RGB 波段组合。当栅格文件打开时,动态波段选择控件出现在“图层”选项卡的底部:
通过该工具,您可以从列表中选择预设波段组合、选择您自己的波段组合或者选择随机波段组合,并保存自定义和随机波段组合以供将来使用。
此工具取代了之前在图层管理器右键菜单中提供的“Change RGB Bands”选项。
5. 新的材料识别工具
使用新的材料识别工具将未知光谱与光谱库中的已知光谱进行比较,并使用常见的光谱相似性算法对相似性进行排名。识别按钮(Identify)位于任何绘图窗口的绘图属性面板中,并且也位于光谱曲线的主窗口中。单击识别按钮运行材料识别。出现一个结果窗口,显示按照匹配程度排列的光谱。
添加材料识别工具后,光谱分析工具(Spectral Analyst)已从 ENVI 工具箱中删除(ENVI Classic 中仍然可用)。
6. 改进的端元波谱收集工具
Endmember Collection 端元波谱收集工具采用全新的界面并包含新功能。端元波谱收集工具可以通过各种来源收集的端元波谱采用不同的图像分类算法进行图像分类或材料识别。以下是 Endmember Collection 工具的一些新功能:
- 所有输入的光谱都以其原始波谱分辨率存储,因此收集的波谱可以与不同波长范围和采样间隔的栅格图像一起使用。在旧版本的工具中,需要首先指定输入栅格,并对输入的光谱进行重新采样以匹配特定栅格图像。
- ENVI可保存平均光谱和与ROI相关的统计数据(标准差、协方差、特征向量和特征值)。这意味着保存的光谱将可以与需要这些统计数据的分类方法(最大似然、马氏距离和平行六面体)一起使用。这是该工具相比旧版本的一个变化,旧版本工具仅将传入的 ROI 保存为平均光谱,以供 ENVI 的某些分类算法使用。
7. 新增和更新ENVI Toolbox工具
以下工具已更新:
- FLAASH工具的传感器选项卡中增加了两个校准文件格式选项(Calibration File Format)。现在,如果校准文件格式设置为Filter Format波谱响应函数格式,则可以选择波谱库格式(.sli)的波谱响应函数文件;如果设置为光谱仪格式(Spectograph),则可以指定一个 ASCII文本文件,其中每行包含传感器中每个光谱仪的波长信息。
- Xtreme Viewer已更新,可以选择将动画保存到 MPEG 文件。
以下工具采用新的ENVI Tasks:
- 自适应相干估计分类法(Adaptive Coherence Estimator Classification):一种从广义似然比方法中衍生出来的分类方法。ACE 不受输入光谱相对缩放的影响,并且在缩放时具有恒定的误报率。
- 约束能量最小化分类法(Constrained Energy Minimization Classification):CEM 是一种使用特定约束条件的分类方法,它使用有限脉冲响应滤波器通过所需的目标,同时最大限度地减少其输出能量,这些能量来自所需的目标以外的背景。
- 分类平滑(Classification Smoothing):消除分类图像中的斑点噪声。它采用多数分析法,将一个大的单一类别中的虚假像素改为该类别。
- 前向最小噪声分数(Forward Minimum Noise Fraction):执行最小噪声分数变换,以确定图像数据的固有维度,分离数据中的噪声,并降低后续处理的计算量。
- 逆最小噪声分数(Inverse Minimum Noise Fraction):将波段从之前的正向最小噪声分数转换到原始数据空间。
- 正交子空间投影分类(Orthogonal Subspace Projection Classification):这种分类方法首先设计一个正交子空间投影器来消除非目标的响应,然后应用匹配滤波器从数据中匹配出所需的目标。
- 平行六面体分类(Parallelepiped Classification):执行平行六面体监督分类,使用简单的决策规则对多光谱数据进行分类。
- 光谱信息散度分类(Spectral Information Divergence Classification):一种光谱分类方法,使用散度测量将像素与参考光谱进行匹配。
以下工具已从 ENVI 工具箱中删除。它们的功能已被前面描述的新工具所取代:
- Forward MNF Estimate Noise Statistics
- Forward MNF Previous Noise Statistics
以下雷达工具已从 ENVI 工具箱中删除。ALOS 雷达反向散射工具仍保留在 ENVI 工具箱中。删除的工具在 ENVI Classic 中仍然可用。
- AIRSAR Incidence Angle Image
- AIRSAR Pedestal Height Image
- AIRSAR Phase Image
- AIRSAR Polarization Signature
- AIRSAR Scattering Classification
- AIRSAR Slant-to-Ground Range
- Synthesize AIRSAR Data
- View AIRSAR/TOPSAR Header
- Antenna Pattern Correction
- Beta Nought Calibration
- Generic Incidence Angle Image
- Generic Slant-to-Ground Range
- RADARSAT Incidence Angle Image
- RADARSAT Slant-to-Ground Range
- View RADARSAT Header
- SIR-C Incidence Angle Image
- SIR-C Pedestal Height Image
- SIR-C Phase Image
- SIR-C Polarization Signature
- SIR-C Slant-to-Ground Range
- Synthesize SIR-C Data
- Save COSMO-SkyMed Metadata to XML
- Sigma Nought Calibration
- View COSMO-SkyMed Header Basic
- View COSMO-SkyMed Header Extended
- View Generic CEOS Header
8. 新增和更新的ENVI Task
您可以使用这些新的ENVI Task在 ENVI+IDL 程序中执行数据处理操作:
- ConstrainedEnergyMinimization:执行约束能量最小化 (CEM) 目标分析。
- InverseMNFTransform:将波段从先前的前向最小噪声分数转换为其原始数据空间。
- MixtureTunedRuleRasterClassification:应用阈值和不可行性值对混合调整规则栅格执行分类。
- MixtureTunedTargetConstrainedInterferenceMinimizedFilter:执行混合调整目标约束干扰最小化滤波器 (MTTCIMF) 目标分析。
- NormalizedEuclideanDistanceClassification:执行归一化欧氏距离 (NED) 监督分类。
- OrthogonalSubspaceProjection:执行正交子空间投影 (OSP) 目标分析。
- 平行六面体分类:此任务执行平行六面体监督分类,它使用简单的决策规则对多光谱数据进行分类。
- RuleRasterClassification:通过对栅格的每个波段进行阈值处理来创建分类栅格。
- SpectralInformationDivergenceClassification:执行光谱信息散度 (SID) 分类。
- SpectralSimilarityMapperClassification:执行光谱相似度映射器 (SSM) 监督分类。
- TargetConstrainedInterferenceMinimizedFilter:执行目标约束干扰最小化滤波器 (TCIMF) 目标分析。
这些任务已更新:
- FLAASH:CALIBRATION_FILE 属性在 CALIBRATION_FORMAT 设置为Filter Format时接受输入滤波响应函数文件,在设置为Spectograph时接受输入光谱仪文件。
- ForwardMNFTransform:添加了 DIFF_SUBRECT、INPUT_NOISE_FILE、OUTPUT_NOISE_FILE、OUT_NBANDS、OUTPUT_STATS_FILE 的新属性。
- LinearSpectralUnmixing:添加了 NAMES 属性。
9. 性能改进
此版本包含以下性能改进。
-
提高金字塔索引文件的速度和清晰度
ENVI 6.0 中的金字塔索引文件的速度和清晰度得到了改进。新金字塔文件将在 ENVI 6.0 及后续版本中使用。
下面是新金字塔生成性能比较的图表。金字塔生成之前(蓝色)和之后(橙色)的性能。越低越好。
接下来是光学图像改进的例子:
金字塔清晰度也得到了提高,如下例所示:
-
COG写入性能
HSI 高光谱数据的 COG 写入性能现在提高了 78%。
10. NITF 更新
- 对 SICD 数据的支持现在包括版本1、1.2、1.3。
- 添加了新方法GetDESXMLData,该方法从指定的 XML_DATA_CONTENT 数据扩展段 (DES) 检索 ORDEREDHASH。
- ENVINITF对象中添加了 BROWSER 关键字;如果 ENVI 正在运行,它将打开 NITF 浏览器。
11. 将 ENVI精准农业工具包模块合并到 ENVI 中
ENVI 精准农业工具包模块以前是单独安装的模块,现已合并到 ENVI 中。该模块现在自动随 ENVI 安装,但仍需要单独的许可证才能使用它。
12. 增强对 ENVI Connect 的支持
对 ENVI Connect 的支持现在包括一次上传多个栅格的功能。
IDL9.0 新特性
IDL 9.0 具有如下新特性:
- 新功能
- 更新
- 库更新
1. 新功能
1.1 原生支持苹果芯片Mac
IDL 现已原生支持在苹果芯片的Mac 上运行。这使得IDL能够充分利用苹果的M系列芯片。相对于在苹果芯片mac上通过 Apple Rosetta 翻译器下运行为 Intel 芯片构建的 IDL 而言,性能得到了提高。Intel 版本的 IDL 仍然可用于配备 Intel 硬件的 Mac。
现在所有 Mac 电脑都使用苹果芯片而不是英特尔芯片。苹果芯片一词指的是系统级芯片 (System on a Chip,SoC),名称包括 M1、M2、M2 Pro、M2 Max、M2 Ultra 等。这些可以称为“M 系列”芯片。该架构的通用名称是“arm64”,这反映在 IDL 的“bin.darwin.arm64”目录中,其中包含 IDL 的二进制文件。下文将简称为 IDL 的“Intel 版本”和“Arm 版本”。
Intel 版本的 IDL 继续在配备 Intel芯片的 Mac 上原生运行。它们还可以使用 Rosetta 2 翻译器在苹果芯片的Mac 上运行。Arm 版本的 IDL 仅在苹果芯片 Mac 上运行。
与通过翻译器运行的Intel 版本相比,在苹果芯片 Mac 上运行 Arm 版本的 IDL 有两个主要优势:
- 苹果公司的Rosetta 2软件最终将被苹果公司删除。这将阻止 Intel 构建的 IDL 在苹果芯片硬件上运行。Rosetta 的第一个版本是用于Power PC架构芯片到Intel 芯片的过渡,由苹果公司提供了五年。Rosetta 2 已经问世三年,因此它可能还会再持续两年。
- IDL 的 Arm 版本在苹果芯片上比在 Rosetta 2 下运行的 Intel 版本具有更好的性能。
下图显示了在苹果芯片上运行的 IDL 9.0 的 Intel 和 Arm 版本的相对性能。Intel IDL 在 Rosetta 2 翻译下运行,而 Arm 版本原生运行。这些图对于拥有苹果芯片Mac 并考虑更新到 IDL 9.0 的客户最有用。这些图没有比较 Intel Mac 与苹果芯片Mac,也没有比较 Windows PC 与 Mac。仅仅是两个版本的苹果产品对比。
-
文件输入/输出
读写性能由底层硬件决定。因此,即使在 Rosetta 翻译下,Intel 版本的 IDL 的性能也与 Arm 版本相似。文件大小和磁盘的设计(例如缓存)会影响读取和写入之间的相对性能。
-
时间测试
为了绘制这一曲线,我们使用了 IDL 的 "time_test4 "和 "graphics_times4 "例程,以便对性能有一个全面的了解。这两个例程测试了原始解释器速度、基本数组操作、文件 I/O、绘图、显示和字体渲染。这两个例程随 IDL一起提供,因此可以对您的系统进行比较。
-
转置
该图表展示了每秒的矩阵转置操作次数。测试矩阵中的元素数量随着每组相邻的条形图而翻倍。尽管在400万个元素的情况下,英特尔 IDL 与 Arm 相比表现良好,但绘制800万个元素的图表显示,Arm IDL 在性能上更胜一筹,其比率类似于在100万和200万个元素情况下所见。这说明维度数量和矩阵大小与 CPU 设计(如缓存)的结合确实影响算法的性能。
-
快速傅立叶变换
该图表展示每秒的FFT(快速傅里叶变换)操作次数。所有基于 Intel 的 IDL 版本都使用 Intel 的 MKL 库来实现 FFT。IDL 的 Arm 版本使用 Arm 性能库 (ArmPL)。正如 FFT 文档中提到的,维数及其大小决定了 FFT 性能。尽管如此,IDL在英特尔和Arm版本上都有效地实现了FFT。
-
矩阵乘法
该图表展示每秒的矩阵乘法操作次数。Arm版本使用苹果的Accelerate库执行LAPACK和BLAS例程。这使得矩阵乘法能够充分利用M系列芯片的自定义矩阵乘法单元。
1.2 HttpRequest类
IDL新增了一个HttpRequest类,使您能够轻松执行向服务器发起的Get、Post、Put和Delete请求。这个新类包括对多部分表单提交、身份验证、自定义标头以及在上传或下载过程中进行回调(并提供取消请求的选项)的支持。例如,执行一个简单的Get请求:
params = hash('key1', '2+2', 'key2', 'with spaces ')
response = HTTPRequest.Get('http://localhost:3000', params=params, /escape)
print, response.url
print, `status_code = ${response.status_code}`
help, response.text
IDL prints:
http://localhost:3000/?key1=2%2B2&key2=with%20spaces%20
status_code = 200
<Expression> STRING = 'GET /?key1=2%2B2&key2=with%20spaces%20...
在这里,我们使用多部分表单进行Post请求,其中包括一个本地文件:
multipart = dictionary('key1', 'value1', $
'key2', {file: 'c:/image.jpg', mimetype: 'image/jpeg'})
response = HTTPRequest.Post('https://httpbin.org/post', multipart = multipart)
print, `status_code = ${response.status_code}`
print, response.json(), /implied
IDL prints:
status_code = 200
{
"files": {
"key2": "data:image/jpeg;base64,/9j/4AAQ..."
},
"form": {
"key1": "value1"
},
"headers": {
"Accept": "*/*",
"Content-Length": "1040",
...
}
1.3 VS Code 的 IDL 扩展
IDL 现在拥有全新的现代化开发环境,可在 Visual Studio Code 中免费使用。可以从 VS Code 扩展页面轻松下载和安装 IDL for VSCode 扩展。该扩展具有以下功能:
- 通过扩展和主题打造您自己的编辑器。
- 用于无缝自动完成的基本 IDL 类型检测。
- 自动化格式化、添加和更新代码文档。
- 自动完成例程、方法、关键字和变量。
- 悬停帮助包含完整的 IDL 文档,包括代码示例。
- 问题检测,无需编译即可检测代码中的 100 多类问题。
- 带有断点的集成调试器,或在 VS Code 终端中运行命令行 IDL。
- 原生多语言支持。
1.4 IDL Notebooks
IDL现在具有本地的IDL Notebook格式和开发环境。IDL Notebooks可以通过IDL for VSCode扩展免费获得。IDL Notebooks具有以下特点:
- 一种友好的格式,可以在一个地方捕捉文本标记和代码。
- 是现代或临时开发人员和科学家学习编程的方式。
- 与在磁盘上创建文件并从命令行运行相比更易于上手。
可以通过 IDL for VSCode 扩展轻松创建 IDL Notebook。您还可以将 IDL Notebook 转换为可在 VSCode 之外运行的完整注释的 IDL 程序。IDL Notebooks 完全是原生的,不基于 Jupyter,也不需要 Python。
1.5 IDL_String::Dup 和 IDL_Variable::Dup 方法
所有 IDL 字符串和变量现在都有一个新的 Dup 静态方法。Dup 方法复制标量值并返回新的标量字符串或新的数组变量。
1.6 Matrix_Multiply NAN关键字
MATRIX_MULTIPLY函数有一个新的 NAN 关键字。设置此关键字可使例程检查输入数据中是否出现 IEEE 浮点值NaN或Infinity 。值为NaN或Infinity 的元素被视为等于零。
1.7 变量属性的 TYPESIZE 属性
静态变量属性现在有一个新的 TYPESIZE 属性,该属性返回该数据类型的单个元素的大小(以字节为单位)。例如:
IDL> x = 1.5d + 2i
IDL> print, x.typename, x.typesize
DCOMPLEX 16
IDL> x = findgen(1000)
IDL> print, x.typename, x.typesize
FLOAT 4
当执行未格式化的输入/输出或将变量与字节相互转换时,TYPESIZE 属性可能很有用。例如:
IDL> x = [!values.f_infinity, !values.f_nan]
IDL> print, byte(x, 0, x.length * x.typesize)
0 0 128 127 0 0 192 127
2. 更新
2.1 ARROW 函数支持虚线和点线样式
ARROW图形函数有一个新的LINESTYLE 关键字。将此关键字设置为整数或字符串,指定箭头的线条样式。
2.2 提高 MAP函数的边距
MAP图形函数现在在创建地图时使用更好的默认边距,这些边距是基于字体大小的。例如:
m = map('Geographic', limit=[-7, 104.5, -5.5, 106.5], $ label_position=0, fill_color='light blue', font_size=12)mc = mapcontinents(fill_color='light green',/hires)
2.3 MODIFYCT 现在允许删除颜色表
MODIFYCT 过程现在允许您通过为颜色表名称提供空字符串来删除直接图形颜色表。
2.4 TIFF 现在支持 Zstandard (zstd) 压缩
READ_TIFF 和 WRITE_TIFF 例程现在可以使用 Zstandard (zstd) 压缩进行读取和写入。此外,QUERY_TIFF 例程现在能够返回 TIFF 文件中使用的压缩方式。Zstandard 是一种快速无损压缩算法,其速度足以实现实时压缩。
2.5 变量属性现在支持索引
静态变量属性现在支持数组索引,无需使用括号。例如:
arr = fltarr(5,4,3)print, arr.dimprint, arr.dim[1] ; used to require (arr.dim)[1]
IDL prints:
5 4 3
4
2.6 IDL Python Bridge 现在支持 Python 3.11
IDL Python Bridge(IDL to Python 和 Python to IDL)现在支持 Python 3.11。IDL-to-Python Bridge可让您通过IDL轻松访问Python 例程和对象:
IDL> np = Python.Import('numpy')
IDL> coords = np.random.random([10,2])
IDL> x = coords[0,*]
IDL> y = coords[1,*]
IDL> r = np.sqrt(x^2+y^2)
IDL> t = np.arctan2(y,x)
同样,Python-to-IDL bridge允许您在Python 中访问所有 IDL 功能:
Python 3.11.4 | packaged by Anaconda, Inc.
>>> import sys
>>> sys.path.append('c:/Program Files/NV5/IDL90/lib/bridges')
>>> from idlpy import *
IDL 9.0.0 (Win32 x86_64 m64).
>>> p = IDL.plot(test=1)
>>> p.color = 'red'
3. 库更新
有关库更新,请参阅 IDL 安装内的 IDL 发行说明。