简介:面向遥感影像监督分类与精度评价的MATLAB实践资源,围绕8波段遥感影像的最大似然法分类任务展开。影像涵盖建筑物、道路、植被、水四类典型地物,训练样本与待分类像素按类别整理为独立表格,程序调用最大似然法完成像素归类,并依据真实类别信息计算总体精度、用户精度、制图精度和Kappa系数,形成完整评价闭环。资源共9个文件,包含xls/xlsx格式的训练与待分类数据、m格式的分类脚本、docx格式的使用说明以及txt格式的结果文件,压缩包约270KB,整体小巧紧凑。目前已有5678人学习下载,适合遥感、地理信息或数字图像处理方向的学生和入门研究者用来理解监督分类原理、MATLAB实现技巧及精度验证方法。利用这份资料,可省去收集与环境配置的精力,只需修改代码中数据读取路径即可在MATLAB中运行,通过自带结果文件对照检查,适合课堂实验、课程设计或论文复现等场景。 有时候我会觉得,做遥感影像分类这事挺像老中医看诊的——影像就是你的病人,波段是脉象,训练样本是问诊记录,而分类器,就是那张开方子的手。在老一批分类器里,最大似然法(Maximum Likelihood Classification)可以说是最经典、最“学院派”、也最像老中医手法的监督分类算法。它不靠暴力学习,而是靠统计推断,把每个像元“归位”到它最可能在的那个地物类别里。
这些年我用最大似然法处理过不少遥感影像,从多光谱的Landsat到高光谱的AVIRIS数据都试过。今天想把它的原理、实操流程和踩过的坑一次性讲清楚。这篇东西适合刚入门遥感分类的研究生,也适合那些被“传统分类精度不够”困扰、想回头把基础打牢的从业者。即便你现在主用随机森林或深度学习,也建议看看——很多分类问题的病根,其实出在样本和波段选择上,而这恰恰是最大似然法最讲究的地方。
1. 先从算法原理说起:为什么是最大似然法
1.1 统计推断下的分类逻辑
最大似然法的底层逻辑是假设每一类地物在光谱特征空间里服从多元正态分布。什么意思?就是说,如果我把某一类地物的所有样本像元值(比如绿光波段、红光波段、近红外波段的值)投到一个三维空间里,它们会像一团云一样聚集在一起,而这个“云”的形状可以用均值和协方差矩阵来描述。
分类的时候,对每一个待分类的像元,算法会做这样一件事:分别计算它“属于A类的概率”和“属于B类的概率”,然后把它判给概率更大的那一类。注意,这里用的是“概率密度”而非简单的“距离”。这是最大似然法和最小距离法最大的区别:最小距离只看像元离哪类中心近,而最大似然法还会考虑这团“云”的散布形状——如果A类分布很集中,那么离中心稍远一点的像元,可能判给分布松散的B类更合理。这个特性让它在类别光谱差异明显、样本质量高的情况下,精度往往优于距离类分类器。
1.2 为什么到现在还有人用它
尽管现在SVM、随机森林乃至深度学习大行其道,最大似然法在工程中依然有很稳固的位置。原因有三个:
- 数学可解释性极强:每一个分类结果都能追溯到一个概率值,这对后续的不确定性分析非常友好。
- 计算开销极小:不像随机森林要训练几百棵树,最大似然法本质上只需要计算各类的均值向量和协方差矩阵,即使在老旧的笔记本上跑Landsat全幅影像也毫无压力。
- 对样本量的要求相对可控:在样本质量高的情况下,它并不需要像深度学习那样动辄上万的训练样本。
当然,它也有先天缺陷——最著名的就是那两条“正态假设”。如果某类地物在特征空间里是双峰甚至多峰分布(比如不同土壤湿度下的裸地),那用一个正态分布去拟合它,效果自然打折扣。这一点在后面实操里会展开讲。
1.3 跟其他监督分类的对比
我整理了一张表,方便大家做算法选型时对照:
| 分类器 | 原理核心 | 优点 | 典型痛点 | 本场景适配度 |
|---|---|---|---|---|
| 最大似然法 | 概率密度最大化 | 稳健、可解释、快 | 正态假设、样本质量要求高 | 高(传统地表覆盖分类) |
| 最小距离法 | 光谱距离最小 | 简单快速 | 对类内方差极不敏感 | 中低 |
| 支持向量机(SVM) | 寻找最大间隔超平面 | 高维数据表现好 | 参数调优复杂、大样本训练慢 | 中高 |
| 随机森林 | 集成多棵决策树 | 抗过拟合、非线性强 | 可解释性弱、调参多 | 高 |
2. 数据准备与波段选择:分类成败的隐形地基
2.1 影像预处理那点事
很多初学者一上来就急着选样本、跑分类,忽略了前置的影像预处理,结果精度惨不忍睹,还一头雾水。最大似然法对数据的敏感性比机器学习方法更高,因为它吃进去的是均值和方差,如果影像没有做大气校正,同一个地物在不同时间、不同位置的像元值会有系统性偏差,导致那团“云”变得特别大,各类之间严重重叠。
我的习惯是:如果做单景影像分类,至少要做辐射定标和大气校正;如果做多时相或拼接影像,还必须做影像配准和匀色处理。特别提醒,如果你的研究区地形起伏较大,务必做地形校正,否则阴坡和阳坡的同类地物光谱差异会直接击穿最大似然法的正态假设。
2.2 波段选择:不是越多越好
很多新手认为,波段越多信息越丰富,分类就越准。这在最大似然法这里恰恰是个陷阱。因为波段越多,参与计算的协方差矩阵维度就越高,需要估计的参数也随之增加,对训练样本的数量和质量要求呈指数级上升——这就是所谓的“维度灾难”。
实操中我的原则是:用最少的相关波段保留最大的类别可分离性。一个有效的做法是先用OIF(Optimum Index Factor,最佳指数因子)或主成分分析做个初步筛选,再用样本分离度(Transformed Divergence或Jeffries-Matusita距离)检验波段组合的效果。经验上,对于Landsat 8影像,选6个左右的波段往往就能达到不错的分类效果,硬上10个波段反而可能因为协方差矩阵奇异而报错。
2.3 训练样本要怎么选
样本是监督分类的命根子,最大似然法尤其如此。我以前犯过的错误是用小区域的样本去分类整景影像,结果可想而知。关于样本,我的经验总结为五条:
- 数量足够:经验法则是每类至少要有10倍于波段数的像元数。例如用6个波段,那么每类至少要60个纯像元,实际操作中我一般会选到200个以上。
- 空间分散:样本要均匀分布在整个研究区,而不是集中在一块地方,否则模型只认那一个“色调”的地物。
- 光谱纯化:尽量选取类别中心的纯像元,避免选择位于两类交界处的混合像元。
- 覆盖类内变化:比如“林地”这个类别,可能包含针叶林、阔叶林、混交林,它们光谱差异很大,要在样本里把所有子类型都涵盖进去。
- 样本检查:选完之后务必做可分离性分析,如果某两类的JM距离小于1.8,说明样本区分度不够,要么补充样本,要么合并类别。
3. 实操流程与参数设置:从ROI到分类后处理的一次完整跑通
3.1 典型软件环境下的完整流程
虽然不同软件的操作界面不同(ENVI、ERDAS、PCI、QGIS的Semi-Automatic Classification Plugin、Python的scikit-learn),但最大似然法监督分类的流程都是一条线走下来的。以我常用的ENVI为例,完整路径是:
- 打开预处理后的影像,用ROI工具创建感兴趣区。
- 定义类别体系,比如:水体、植被、裸地、建筑用地。
- 在影像上均匀采集各类别样本,并用散点图检查样本在特征空间中的分布。
- 计算样本统计量(均值、协方差矩阵),检查各类别的可分离度。
- 运行最大似然分类(ENVI里是Classification -> Supervised -> Maximum Likelihood)。
- 设置概率阈值(Probability Threshold)。
- 评估分类结果,必要时用分类后处理(如Majority/Minority分析)清理零星像元。
3.2 关键参数解读:概率阈值到底怎么设
最大似然法最核心的参数就是概率阈值。通俗地讲,这个阈值规定了“像元被判为某一类的最低概率门槛”。如果某像元在所有类别上的概率都低于这个阈值,它就会被归为“未分类”类别。
ENVI中默认的阈值是0.05(这里的“概率”其实是概率密度值),但不要被这个数字迷惑。实际使用中:
- 如果你想要完整的地表覆盖产品,所有像元都必须落地到一个类别,可以把阈值设成0,这样所有像元都会被强分类。
- 如果你更注重每一类的可信度,希望把模棱两可的像元剔除出来单独分析,可以把阈值适当调高,比如0.01到0.05之间,但注意别设太高,否则会出现大面积“未分类”区域。
我常用的做法是:设一个相对较低的阈值(比如0.01),让分类尽量完整,再在结果里用可视化方式检查“未分类”像元的空间分布,如果这些像元恰好都落在类别边界、混合像元或阴影区,那就说明阈值设置合理,这些地方本来就“没把握”。
3.3 分类后处理:给结果做一次“美容”
原始分类结果通常存在大量零星的小图斑,也就是椒盐效应。这是因为单个像元受噪声影响,被误分类成邻近类别。这时候用Majority/Minority分析(中值滤波)可以有效平滑图斑。我用ENVI时,一般是选3x3或5x5的核,以多数类别代替中心像元类别。
但我要提醒一句:后处理要克制。核过大会抹掉细小地物,比如道路、溪流;核过小效果不明显。另外,后处理应该在精度评价之前做,否则你评价的就不是你最终使用的产品。
3.4 精度评价:混淆矩阵与Kappa系数
分类做完不评价就相当于考试不批卷。常规做法是用独立于训练样本的验证样本(地面实测点或高分辨率影像目视解译点)生成混淆矩阵,计算总体精度(Overall Accuracy)、用户精度、生产者精度和Kappa系数。这里特别强调:验证样本必须独立于训练样本,不能用参与训练的样本来评价精度,这是很多新手最容易犯的错误。
Kappa系数的意义经常被误解。它反映的是“比随机分类好多少”的指标,一般大于0.8说明一致性很好,0.6到0.8说明中等。但在实际中,我更关注用户精度与生产者精度的差值,因为这两者不平衡往往揭示出类别的漏分和错分方向。
4. 常见问题与排查技巧实录
4.1 协方差矩阵奇异,程序报错怎么办
这是我被问过最多的问题。报错的大致意思是“协方差矩阵不可逆”。根本原因基本只有几个:
- 样本数量太少,尤其当波段数较多时,样本数小于波段数就必然出问题。
- 样本中存在完全相同的像元值,导致协方差矩阵中出现零方差。
- 两个类别样本的光谱几乎完全相同,特征空间中的分布重叠严重。
排查思路:先检查样本数量,每个类别至少保证10倍波段数以上;再看样本直方图,剔除异常值;最后检查可分离性矩阵,如果两类的分离度过低,考虑合并类别或重新选样本。
4.2 阴影和水体总是分不清
水体在可见光和近红外波段吸收强烈,山体阴影区因为光照不足,光谱特征也偏暗,在特征空间里跟水体混在一起。这是**“异物同谱”**的典型问题。
解决思路有几个:一是在样本中把“阴影”单独设为一个类别,等分类完成后再合并到相应地类中;二是加入地形数据作为辅助波段,比如把坡度、坡向加入特征集,这样水体(一般在地势低洼区)和阴影(一般在山地)就有了区分信息;三是利用水体在短波红外波段的强吸收特性,排除其他波段的影响。
4.3 分类结果出现大面积椒盐噪声
前面提过用Majority/Minority处理,但如果椒盐噪声特别严重,问题往往不在后处理,而在波段选择或样本纯度。我遇到过一次,是因为研究区植被茂密、地块破碎,只用原始光谱波段很难区分不同植被类型。后来把NDVI、NDWI等植被指数作为额外波段加进去,分类稳定性明显提升。
4.4 常见问题速查表
| 症状 | 可能原因 | 快速解法 |
|---|---|---|
| 程序报协方差奇异 | 样本过少/样本冗余 | 增加样本量,检查是否有重复像元值 |
| 总体精度低(<75%) | 样本不纯/波段选取不当 | 优化ROI、降低波段数、检查可分离性 |
| 两类或多类严重混淆 | 异物同谱或同物异谱 | 增加辅助波段、设子类别、使用掩膜 |
| 未分类像元过多 | 概率阈值设太高 | 降低阈值或设为0 |
| 细小地物消失 | 后处理核过大 | 使用3x3核,或改用分类后矢量化手动修正 |
| 结果有横条纹/断层 | 影像拼接未匀色 | 做直方图匹配或分景分类再拼接 |
4.5 一个来自野外验证的教训
我做过一次城市土地利用分类,室内精度评价Kappa有0.86,看着很不错。结果一到野外实地验证,发现大量建筑工地被分成了裸地,树荫下的草地被分成了水体。原因后来一查,还是在样本——当时为了“省事”,训练样本全部选在影像中心区域,而影像边缘因为侧视角度问题,光谱特征发生了偏移。
这件事让我确立了一个原则:样本的空间分布比样本数量更重要。从那以后,我每次选完样本都会让样本在研究区全域图上做一次空间均匀性检查,确保不出现大片空白区域。
5. 最大似然法的边界与进阶扩展
5.1 什么时候应该放弃最大似然法
再经典的算法也有它的边界。以下情况我建议直接放弃最大似然法,换SVM或随机森林:
- 研究区地物类型极其复杂,同类地物光谱变异性巨大,比如热带雨林地区。
- 高光谱影像,几十上百个波段会让协方差矩阵估计变得极不稳定。
- 类别之间存在显著的非线性可分关系,最大似然法的线性二次判别边界解决不了。
5.2 把最大似然法当作“基线模型”
即便要上高级算法,我也强烈建议先用最大似然法跑一遍结果作为基线。这有非常实际的用处:如果随机森林或深度学习相对于最大似然法的提升小于2%,说明问题可能不在算法,而在数据质量或类别定义——这时候应该回头优化数据而不是继续调参。这个习惯帮我避免了很多无效的高强度计算。
5.3 结合先验概率做细化
最大似然法还有一个容易被人忽略的功能——先验概率。比如你知道研究区里水体占10%、植被占60%、建筑占30%,你可以在分类前把这些比例作为先验概率输入,算法会把“先天概率”和光谱相似度结合起来计算最终归属。这在类别面积严重不均衡时特别有用,能明显减少稀有类别被错分吞掉的情况。
6. 写在最后的几点实在建议
做遥感影像监督分类这些年,如果用一句话总结我的体会,那就是:算法是表,样本是本,波段是魂。最大似然法虽然老,但它逼着你去理解数据、打磨样本、审视波段,而不是把一切都丢给黑箱模型。认真做完一次最大似然法分类,你对“为什么我的分类总是不准”这个问题会有一个比之前清晰得多的答案。
最后分享一个我自己的小习惯:每次跑分类前,我都会把各类样本的均值光谱曲线画出来叠加到一起看一眼。如果某两条曲线长得几乎一模一样,那先别急着跑分类——先想清楚这两类在物理上怎么区分才对。这个习惯帮我省掉了无数个“分类完再返工”的夜晚。
本文还有配套的精品资源,点击获取