3. ENVI精度验证工具概览与数据准备

混淆矩阵验证并不是打开一个对话框、点一下运行就能得到可信结论的操作。它的前提是:分类结果影像与地面真值 ROI 在空间参考、像元网格、类别编码三个层面严格对齐。ENVI 提供的 Confusion Matrix Using Ground Truth ROIs 工具本质上是一个“配对比较器”——它按 ROI 多边形覆盖的像元位置,从分类结果影像中读取预测类别,再与 ROI 记录的参考类别逐像元比对,最终统计出混淆矩阵与 Kappa 系数。因此,本节的重点不在于记住菜单路径,而在于理解这个工具对输入数据提出了哪些硬性约束,以及如何在调用前把数据准备到“可比对”的状态。

工具位置与两种典型调用路径

在 ENVI 经典界面中,该工具位于主菜单 Classification → Post Classification → Confusion Matrix Using Ground Truth ROIs。它属于“分类后处理”分支,而不是“分类”分支,这一点在初学时容易混淆:分类器负责生成类别影像,后处理工具负责评价它。调用时,ENVI 会先弹出一个输入对话框,要求选择 Class Input Image(待评价的分类结果)和 Ground Truth Input(地面真值 ROI 文件)。若当前视图中已加载了分类结果和 ROI,工具通常会自动预填,但仍需人工核对。

在 ENVI 5.x 的新版界面中,对应功能可通过 Toolbox → Classification → Post Classification → Confusion Matrix Using Ground Truth ROIs 找到,也可以直接在图层管理器中对分类结果图层右键,选择后处理相关项进入。两种界面的底层算法一致,差别只在交互外壳。实际教学中建议统一使用一种路径,避免学员在菜单层级上耗费注意力。

需要特别提醒的是:该工具只接受 ROI 形式的地面真值,不接受 shapefile 或栅格形式的验证样本直接输入。如果手头是矢量验证数据,需要先在 ENVI 中将其转为 ROI(可通过 ROI Tool 的导入功能或 Vector to ROI 转换),并确保每个 ROI 的类别名称与分类影像的类别编码建立明确对应关系。

数据准备的三个一致性检查

在点击运行之前,必须完成三项一致性核查,任何一项不满足都会导致矩阵错位或统计失真。

第一,投影与坐标系一致。分类结果影像和 ROI 必须处于同一坐标参考系统。ROI 本身可能以地理坐标(经纬度)记录,而分类影像是投影坐标(如 UTM),ENVI 在比对时会做重投影,但重投影引入的像元位置偏移会直接影响边界像元的归属。稳妥做法是:在 ROI Tool 中查看 ROI 的坐标系统信息,与分类影像的 Map Info 对照;若不一致,先将 ROI 重投影到影像坐标系,再参与验证。

第二,空间分辨率与像元网格一致。ROI 是矢量多边形,工具会将其栅格化到分类影像的像元网格上。如果 ROI 来源于另一幅更高或更低分辨率的影像,多边形边界会跨越多个像元,边界像元的类别归属就带有随机性。检查方法是:在视图中叠加显示分类结果与 ROI,放大到像元级别观察 ROI 边界是否与像元边界合理贴合;同时确认影像的 Pixel Size 与 ROI 采集时所用底图的分辨率一致或接近。

第三,类别编码与类别名称一致。这是最容易被忽视、后果最严重的一项。分类结果影像的每个像元值是一个整数编码(如 1=水体、2=植被、3=建设用地),而 ROI 文件中每个 ROI 有一个名称(如 “Water”“Veg”“Built”)。工具在比对时依据的是“ROI 名称所对应的类别”与“影像像元值所对应的类别”之间的映射。如果 ROI 名称与影像类别名称不能一一匹配,ENVI 会提示无法匹配的类别,或者把某个 ROI 整体归入“Unclassified”。因此,准备阶段应打开分类结果的 Class Names 列表,逐一核对 ROI 名称,必要时在 ROI Tool 中重命名,保证字符串完全一致(包括大小写和空格)。

混淆矩阵验证:输入配对与三项一致性闸门 分类结果影像 Class Input Image 像元值 = 类别编码 1 水体 / 2 植被 / 3 建设 含 Map Info 与 Pixel Size 地面真值 ROI Ground Truth Input 多边形 + ROI 名称 名称须与类别名匹配 矢量需转为 ROI 格式 一致性闸门 ① 投影 / 坐标系一致 ② 分辨率 / 像元网格一致 ③ 类别编码 / 名称一致 三项全部通过才可运行 Confusion Matrix Using Ground Truth ROIs Classification → Post Classification 逐像元比对:预测类别 vs 参考类别 输出与判读 混淆矩阵(行=参考类别,列=预测类别) 总体精度 / 生产者精度 / 用户精度 / Kappa 异常信号:大量 Unclassified、某类全为 0、Kappa 异常偏低 常见错位来源 ROI 未重投影 名称大小写不一致 边界像元跨网格 准备动作 矢量 → ROI 转换 ROI 重投影到影像系 核对 Class Names 列表

一个可复现的准备示例

假设我们有一幅 30 米分辨率的 Landsat 分类结果 landcover_class.dat,类别编码为 1=水体、2=林地、3=耕地、4=建设用地,投影为 UTM Zone 50N。地面真值来自野外调查矢量 field_samples.shp,属性字段 LC 记录了类别名称,但该矢量以 WGS84 经纬度存储。准备流程如下:

  1. 在 ENVI 中打开分类结果,查看 File → View Metadata,记录 Map Info 中的投影与像元大小(30 m)。
  2. 将 field_samples.shp 导入为 ROI:使用 ROI Tool → File → Import Vector to ROI,在导入对话框中指定 LC 字段作为 ROI 名称来源,并选择“按属性值分组”,使每个类别生成一个独立 ROI。
  3. 对生成的 ROI 执行重投影:在 ROI Tool 中选择 File → Reproject ROIs,目标坐标系设为分类影像的 UTM Zone 50N,重采样方式保持默认的最近邻,避免边界像元被平滑。
  4. 核对名称:打开分类结果的 Class Names 列表,确认四个名称与 ROI 名称逐字一致。若矢量中写的是 “Forest” 而影像中写的是 “林地”,需在 ROI Tool 中重命名,或在导入时做名称映射。
  5. 叠加检查:将 ROI 与分类结果同时加载到视图,放大到 1:5000 左右,抽查若干 ROI 边界是否落在合理的像元位置上,确认没有整体偏移。

完成上述步骤后,再调用 Confusion Matrix Using Ground Truth ROIs,选择 landcover_class.dat 与重投影后的 ROI 文件,即可进入参数设置界面。此时工具会列出可匹配的类别对,若列表中缺少某一类,说明名称映射仍未对齐,应返回第 4 步修正,而不是强行运行。

判断数据是否“准备好”的一个实用标准:在工具的参数界面中,所有参与验证的类别都能在“Ground Truth”和“Class”两列中成对出现,且没有类别被标记为未匹配。只要出现未匹配项,就先解决映射问题,再谈精度数字。

常见准备失误及其表现

投影不一致的典型表现是:混淆矩阵中某一类别的样本数明显少于 ROI 实际像元数,或者出现大量“Unclassified”行。分辨率不一致的表现是:边界像元被大量错分,导致用户精度偏低但总体精度尚可,给人一种“模型还行”的错觉。类别名称不一致的表现最直接:工具提示无法匹配,或某个 ROI 的全部像元被计入错误类别,使该类的生产者精度骤降。识别这些表现,比记住菜单路径更有工程价值。

最后需要强调,数据准备不是验证流程的“前置杂务”,而是决定验证结论是否成立的关键环节。混淆矩阵的每一个数字都来自“某个像元位置上预测类别与参考类别的比对”,位置错了、名称错了,后面的精度指标再漂亮也失去意义。把三项一致性检查做成固定动作,才能让后续的矩阵解读建立在可靠的数据基础之上。