简介:一份聚焦遥感图像分类方法研究脉络的专业报告,适合遥感、地理信息系统、测绘等领域的入门研究者与高校学生快速了解领域概貌。内容从遥感技术发展现状切入,梳理多分辨率多平台并存、微波与高光谱遥感兴起、综合应用深化、商业遥感时代到来等背景,进而归纳国内外在遥感图像分类算法与流程上的研究重点,并对高分辨率数据分类、遥感与GIS结合等趋势作出展望。文档还涉及象元光谱分类法与面向对象分类法、支持向量机等典型方法的原理与适用场景,可作为撰写课程报告、文献综述或开展相关课题时的参考资料。压缩包内共1个PDF文件,大小约192KB,便于随时翻阅;该资源已有638人学习下载,适合作为入门阶段的概览性文献。
1. 遥感图像分类:方法在“研究现状”里的四条演进主线
遥感图像分类的现状,远比“深度学习统治一切”这句话更复杂。如今几乎所有高分影像制图项目都把 U-Net 或 Transformer 作为首选模型,但业务线上稳定运行多年的分类产品,仍大量依赖随机森林、SVM 乃至最大似然。这个反差恰恰解释了为什么“遥感图像分类方法的国内外研究现状与发展趋势”这类综述会反复出现:方法没有绝对的新旧,只有样本、分辨率、可解释性和算力约束下的权衡。本文顺着文献脉络,把遥感图像分类技术演进梳理成光谱统计、特征工程、深度学习、训练范式四条主线,并为每类方法补上可复现的代码、参数和排错思路。它适合正在做遥感分类实验、需要给非技术同事解释算法选型的人。
2. 经典方法为什么还没退场——光谱统计、纹理结构与面向对象的工程取舍
2.1 从最大似然到SVM:高维光谱下的分类边界怎么划
最大似然分类是教科书里的起点。它假设每个类别的光谱特征服从多维高斯分布,在 Landsat 时代、波段数只有 4 到 7 个时,这个假设基本成立,协方差矩阵也能用有限样本稳定估计。但当波段数增加到数十甚至上百,协方差矩阵的参数个数随波段数平方增长,样本稍少就出现奇异矩阵,这也是最大似然在高光谱分类里最先失效的原因。
SVM 把问题从“密度估计”切换成“边界间隔”。它不对数据分布做全局假设,只关心靠近分类边界的支持向量。RBF 核把原始光谱映射到高维空间,让植被、土壤、水体这类在原始空间互相重叠的类别更容易被切分。在中等样本条件下,SVM 是传统方法里默认的强基线,尤其适合类别重叠明显、特征维度偏高的任务。
from sklearn.svm import SVC from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline # X_train: (n_samples, n_bands),每行是一个像元的光谱向量 # y_train: (n_samples,),类别从 0 开始编号 pipe = make_pipeline( StandardScaler(), SVC(kernel='rbf', C=10.0, gamma='scale', class_weight='balanced', probability=True) ) pipe.fit(X_train, y_train) y_pred = pipe.predict(X_test)代码把标准化和 SVM 包成一条流水线,fit时不会把测试集信息泄漏进标准化参数。C控制误分类惩罚,越大对训练集拟合越强,实践里用GridSearchCV在[0.1, 1, 10, 100]上扫一遍,比默认值可靠。gamma='scale'让核宽度随特征数量自适应,避免手动设0.01这类固定值在波段数变化时失效。class_weight='balanced'按类别频率给少数类更高权重,对林地、水体与建筑样本量悬殊的影像很有用。SVM 的代价是决策阶段依赖支持向量,全图逐像元预测时速度会明显变慢,这时候随机森林通常更合适。
2.2 纹理特征选GLCM还是Gabor:从算子原理到参数尺度
光谱特征在城区阴影、林分结构、裸岩与建筑等场景下容易混淆,分类体系里需要加入纹理特征。灰度共生矩阵 GLCM 统计特定方向、特定位移上灰度对同时出现的频率,常用统计量包括对比度(contrast)、相关性(correlation)、能量(energy)和同质性(homogeneity)。其中 contrast 越大纹理越粗糙,对应建筑密集区;energy 越大灰度分布越均匀,对应草地或水体。
Gabor 滤波器本质是正弦波乘高斯窗,通过在频率和方向两个维度上建模提取边缘响应。它在理论上有更强的多尺度分析能力,但参数网格大,波长、方向、带宽都要调,遥感业务里效率不高。GLCM 则不同,窗口、位移、方向三个参数语义直白,算完后可以直接与光谱通道拼接,不需要对每个波段循环做卷积再筛选响应幅值。
| 纹理算子 | 主要参数 | 适合地物 | 运算成本 | 与分类器的配合 |
|---|---|---|---|---|
| GLCM | 窗口大小、位移(d)、方向(θ)、统计量 | 城区、林地、农田纹理 | 中,需控制窗口层数 | 直接拼接光谱向量进 SVM 或随机森林 |
| Gabor | 波长、方向、带宽 | 边缘密集区、线性地物 | 高,参数空间大 | 需要先做特征降维再进分类器 |
| LBP | 邻域半径、采样点数 | 局部微纹理 | 低 | 适合作为补充特征 |
实际项目中 GLCM 窗口大小与影像分辨率强相关。Sentinel-2 多光谱数据 10 米分辨率下,3×3 窗口只覆盖约 30 米见方,对城市地物建议从 5×5 试到 11×11 再定。方向参数一般取 0 度、45 度、90 度、135 度四个方向的平均,避免方向偏差。注意,多波段影像对每个波段都算 GLCM 会把特征维度放大好几倍,常见做法是先用主成分分析取第一主成分,只对主成分计算 GLCM,既能保留主要空间变化,又能控制特征数量。
2.3 面向对象分类:为什么它先于深度学习解决“椒盐噪声”
基于像元的分类在异质性高的高分辨率影像上会出现大量孤立错分点,视觉上就是椒盐噪声。面向对象的图像分析先把影像分割成同质对象,再基于对象的均值、标准差、形状与邻接关系分类。它在高分影像业务链条里至今仍是可靠方案,尤其当输出需要直接转成矢量图斑时,对象边界天然就是多边形边界。
分割阶段最常用的是多尺度分割,关键参数是尺度(scale)、形状(shape)和紧致度(compactness)。尺度决定对象平均大小,过小产生碎图斑,过大会把混合地物揉进同一对象。形状权重调高会让对象更规整,但对细碎地物不友好。我一般先按最小图斑尺寸估算尺度初值,在一个小范围内步进试验,肉眼检查道路、田块、屋顶三类边界是否落在对象边界上,再定参数。分割完成后的对象级特征不必全部进模型,先让随机森林输出特征重要性,筛掉冗余波段和纹理统计量,能明显缩短训练时间。
面向对象的局限在边界精度和线性地物。道路、河流这类目标经常被分割碎片切断,后处理里可以加入狭长度(elongation)和形状指数做合并。另外,分割参数换一个传感器或时相往往要重调,在大范围区域制图时会带来额外调参负担,这也是后来深度学习语义分割能快速替代它的原因之一。
2.4 传统方法栈的完整链路:把特征、模型、评价做成闭环
传统方法的价值不在单个算法,而在于整条链路可解释、可查错。特征栈一般不追求把几十个波段全塞进模型,优先选 NDVI、NDWI、亮度、主成分、GLCM 对比度等物理语义明确的特征;用随机森林的 OOB 误差或 Permutation Importance 把重要性接近 0 的列剔除。模型层面,软投票集成 SVM 和随机森林比单模型更稳,实践中一般能换来 1 到 2 个百分点的整体精度。
传统方法的完整链路也暴露了上限:特征设计依赖专家经验,换一个区域、换一种传感器,特征组合很可能要重新调整;逐像元分类对邻域关系的建模也粗糙,加入纹理之后虽有缓解,但仍然没有像深度卷积那样自动学习语义级别的特征。这解释了为什么从 2015 年开始,遥感图像分类的重心整体迁移到深度学习路线。
提示:传统方法在解释性上的优势,适合用在灾害制图、林业清查这类需要说明分类依据的场景。很多项目把传统模型作为深度学习结果的质量校验器,两边输出差异大的区域优先人工抽查,而不是直接采信单条技术路线。
3. 深度学习路线:从图像块分类到端到端语义分割
3.1 遥感分类初期的Patch-CNN:先让卷积网络进遥感
深度学习进入遥感分类的早期形态是 Patch-CNN:把影像切成固定大小图像块,每个块给一个中心像元或整个块的地物类别,再用卷积网络提取特征。相比逐像元光谱分类,它能利用邻域上下文,精度提升明显,缺点是相邻块之间大量重叠计算,推理速度慢;而且中心像元类别与图像块边界信息不一致时,容易在边缘处产生错分。
Patch-CNN 现在已经很少作为主模型使用,但它留下的“切块训练”习惯仍在影响遥感实践。大影像显存放不下,切块是公认的工程解法,区别只在于相邻块之间是否做重叠推理。后面讲的多尺度融合和测试时增强,就是针对切块推理的边界效应发展出来的后处理手段。
3.2 从FCN到U-Net、DeepLab:端到端语义分割的骨架怎么选
全卷积网络 FCN 把传统 CNN 最后的全连接层替换成卷积层,输入任意尺寸的影像,输出与输入同分辨率的类别概率图,这是语义分割的基本框架。FCN 的问题在于连续池化不断压缩特征图,细节边界丢失严重。U-Net 用跳跃连接把编码器每一级的细节特征拼到解码器对应层,小目标与边界保留能力显著提升。DeepLab 系列则用空洞卷积在保持分辨率的同时扩大感受野,并引入 ASPP(空洞空间金字塔池化)融合多尺度上下文。
import torch import torch.nn as nn class DoubleConv(nn.Module): def __init__(self, in_ch, out_ch, mid_ch=None): super().__init__() mid_ch = mid_ch or out_ch self.block = nn.Sequential( nn.Conv2d(in_ch, mid_ch, 3, padding=1, bias=False), nn.BatchNorm2d(mid_ch), nn.ReLU(inplace=True), nn.Conv2d(mid_ch, out_ch, 3, padding=1, bias=False), nn.BatchNorm2d(out_ch), nn.ReLU(inplace=True), ) def forward(self, x): return self.block(x) class EncoderDown(nn.Module): def __init__(self, in_ch, out_ch): super().__init__() self.down = nn.Sequential(nn.MaxPool2d(2), DoubleConv(in_ch, out_ch)) def forward(self, x): return self.down(x)这是 U-Net 编码器的核心模块。DoubleConv做两次 3×3 卷积加批归一化,padding=1保证特征图尺寸不变;EncoderDown先做 2×2 最大池化下采样,再进DoubleConv,通道数按[64, 128, 256, 512]逐级翻倍。bias=False是因为后面接了BatchNorm2d,卷积偏置会被归一化抵消,属于常用写法。遥感大图切块训练时 batch size 往往只有 4 或 8,批归一化统计不稳定,遇到训练集与验证集精度差距大,优先换成GroupNorm,这是工程里最容易踩的坑,没有之一。
| 网络 | 关键结构 | 强项 | 典型问题 |
|---|---|---|---|
| FCN | 全卷积化 | 框架简单,推理直接 | 细节边界差,小目标易丢 |
| U-Net | 编码器-解码器、跳跃连接 | 小目标与边界保留好 | 显存占用偏高 |
| DeepLab系列 | 空洞卷积、ASPP | 多尺度上下文强 | 训练配置复杂,推理较慢 |
选型上没有绝对最优。小数据集、单 GPU、类别边界精细,优先 U-Net;大规模多类别制图任务,DeepLabV3+ 或带高效注意力头的 U-Net 变体往往更稳。
3.3 Transformer与注意力机制:大感受野改变了什么
ViT 把影像切成固定大小的 patch,做 patch embedding 后送入 Transformer 编码器,通过自注意力计算任意两个位置之间的依赖关系。对遥感影像而言,这意味着某个像元是否属于不透水面,可以直接参考几百米外的同材质区域,而不是只依赖局部卷积感受野。SegFormer、Swin Transformer 与 U-Net 的混合结构在遥感语义分割中表现亮眼,正是因为这个特性符合地物分布的长程相关性。
代价也很直接:自注意力的计算量随序列长度二次增长,大尺寸遥感影像必须切块,切块又打断跨块依赖。ViT 类模型通常需要更多数据才能收敛,在只有几千张切片的小数据集上,效果可能还不如 U-Net。实践里我的做法是:先跑一个 U-Net 基线,再看影像中是否存在跨大范围才能判别的类别,如果有,再尝试 SegFormer 这类混合结构,不要一上来就选择大模型。
3.4 高分辨率影像的精细化分类:边界细节与尺度问题
精细化分类的瓶颈通常不在网络结构,而在训练数据的边界标注质量。遥感标注是在影像上画矢量多边形,多边形边缘与真实地物边界之间存在锯齿误差,模型学到的边界只不过是在拟合这些锯齿。对边界敏感的任务,训练前对标注做一次“边缘平滑与蚀刻”预处理,比更换更强的解码器更有效。
尺度问题是另一个隐性因素。同一栋建筑在 0.5 米分辨率下有清晰屋顶结构,在 10 米分辨率下只是几个混合像元。多尺度推理(把影像缩放 0.5、1.0、1.5 倍分别预测再平均)能稳定提升切割指标,代价是推理时间翻倍。项目节奏紧张时,可以只对验证集表现最差的两个类别局部启用多尺度推理,而不是全图统一跑。
4. 训练范式与数据瓶颈:遥感图像分类落地的真实约束
4.1 标注贵、样本少:自监督预训练如何降低标注依赖
光学遥感影像的标注成本远高于自然图像,因为地物类别在影像上的面积大、边界模糊,画一个精细的水体或建筑多边形可能要好几分钟。全监督训练动辄需要数万张切片,很多项目凑不齐。自监督预训练因此成为遥感分类里增长最快的方向:用无标注影像学习通用特征,再在少量标注数据上微调。
常见路线分为两类。一类是对比学习,如 SimCLR、MoCo,让同一影像不同增强视角的特征尽量接近,不同影像的特征尽量分离;另一类是掩码重建,如 MAE,随机遮蔽部分 patch 后让网络重建原图。在语义分割任务里,掩码重建的迁移性通常优于对比学习,原因是它强迫模型学习完整空间结构,而对比学习更容易依赖全局纹理捷径。遥感影像还有天然的时间维与多传感器信息,可以用同一区域的季相序列作为正样本对,让编码器理解“同一地物在不同时相下光谱变化但语义不变”这一规律。
使用上有一个务实建议:直接下载 ImageNet 预训练权重作为初始化,然后用无标注遥感影像继续做 MAE 式自监督,这一步通常需要几百张到几千张影像即可稳定提升下游精度,尤其是建筑物、道路这类结构特征强的类别。
4.2 类别不均衡与损失函数:交叉熵之外的工程调整
遥感分类的样本天生不均衡:一幅影像里植被可能占 60%,而工业厂房只占 0.1%。普通交叉熵损失在多数类主导下,少数类的梯度被淹没。最简单有效的办法是用类别权重重新加权损失函数,权重与类别样本数成反比,常用公式是w_c = N / (K * N_c),其中N是总像素数,K是类别数,N_c是第c类的像素数。
import torch def class_weights_from_counts(counts, num_classes): # counts: dict 或 list,每个类别的训练集像素数 total = sum(counts) weights = [] for c in range(num_classes): weights.append(total / (num_classes * counts[c])) return torch.tensor(weights, dtype=torch.float32) # 以 PyTorch 为例 criterion = torch.nn.CrossEntropyLoss(weight=weights)代码里total / (num_classes * counts[c])对多数类输出小于 1 的权重,对少数类输出大于 1 的权重。注意,counts应该从训练集掩码里统计,而不是验证集;权重只参与训练损失,不影响验证指标计算。权重过大会导致少数类过拟合、验证集上反降,出现这种情况就把权重做平方根缩放:w_c = sqrt(w_c),能在拉抬少数类和抑制过拟合之间取一个中间值。
另一个常用组合是交叉熵加 Dice Loss。Dice Loss 直接优化类别区域重叠度,对小目标更友好,典型做法是loss = ce_loss + dice_loss,两个损失各占 1.0 或让 Dice Loss 权重为 0.5 起步。它与类别权重可以共存,实践中往往先加权重,再看小类的 mIoU 是否仍然明显低于平均,若低于平均再引入 Dice。
4.3 跨域泛化:训练在A区、部署到B区时的分布漂移
遥感模型跨区域部署时,精度下降幅度经常超预期。原因不只是地物外观差异,更包括传感器响应差异、太阳高度角、时相、大气条件共同作用下的光谱漂移。同一个随机森林在 A 城市训练、直接搬到 B 城市,整体精度可能从 90% 跌到 75%,这在国内外大量业务项目里都是普遍现象,也是当前研究现状里最集中的攻坚方向之一。
缓解手段从便宜到昂贵排序如下。第一,把输入特征从原始反射率换成物理意义明确的归一化指数,如 NDVI、NDWI、EVI,能抵消一部分光照和大气差异。第二,用目标区域的少量样本做无监督域适应,典型结构是特征提取器接一个域判别器,用对抗训练让特征分布对齐。第三,用 CycleGAN 把源域影像模拟成目标域风格,用生成影像扩充训练集。第四,多传感器联合训练,让模型见过不同卫星的成像差异,提升对传感器的鲁棒性。
一个容易忽略的细节是坐标泄漏。切训练样本时如果不做空间分块,同一栋建筑的不同部分可能同时出现在训练集和验证集,模型其实“背下了”该建筑的纹理,验证精度虚高。换到新区域后精度崩掉,就是这个原因。规范做法是按地理区块划分训练集与测试集,保证任意区块内的像元完整落入同一侧。
5. 评估指标、复现技巧与趋势研判
5.1 OA、Kappa、mIoU三个指标怎么搭配使用
整体精度 OA 简单直观,但在类别分布严重失衡时会掩盖少数类完全错分的问题。Kappa 引入随机一致性校正,理论上比 OA 更稳健;mIoU 对每个类别的 IoU 取平均,少数类表现会被显著拉低,是语义分割研究里最受关注的指标。三个指标要搭配着看,而不是只看一个。
import numpy as np def classification_metrics(cm): # cm: 混淆矩阵,行=真实类别,列=预测类别 cm = np.asarray(cm, dtype=np.float64) n = cm.sum() oa = np.trace(cm) / n # 随机一致性概率:按各类行列占比乘积求和 pe = (cm.sum(axis=0) * cm.sum(axis=1)).sum() / (n * n) kappa = (oa - pe) / (1 - pe) iou_per_class = np.diag(cm) / ( cm.sum(axis=1) + cm.sum(axis=0) - np.diag(cm) ) return oa, kappa, iou_per_class.mean()np.trace(cm)提取对角线元素之和,即被正确分类的像元总数;pe模拟的是随机分类时预测与真实碰巧一致的概率,用各类别行和与列和的乘积除以总样本数的平方得到。iou_per_class的分母是“真实该类 + 预测该类 – 正确该类”,对应两个集合的并集面积。返回的 mIoU 是所有类别 IoU 的算术平均,所以它比 OA 更诚实:某个小类完全没识别出来,mIoU 会有明显缺口,而 OA 可能只掉零点几个百分点。
5.2 复现遥感分类实验的三个检查项
复现一篇遥感图像分类论文时,先别急着换模型,按以下三项检查数据管线。第一,空间划分是否泄漏:训练集与测试集是否按地理区块分离,还是随机切块混合;随机切块报告的精度普遍偏高,换到真实区域后会打折扣。第二,多尺度推理是否启用:很多高分论文在测试阶段用多尺度投票,复现时要确认自己是在多尺度还是单尺度下比较,最好两种结果都记录。第三,统计口径是否一致:以像元为单位的逐像元精度,与以地理抽样区块为单位的精度,本身就存在天然差异;对照一定要保持口径一致。
5.3 从论文走向工程:趋势研判的四个信号
回看国内外近年来的研究脉络,遥感图像分类的趋势信号集中在四个方向。其一是大模型与基础模型适配,以 SAM 为代表的分割基础模型在自然图像上表现亮眼,但直接应用到遥感影像上会出现域差异,需要微调或引入遥感自监督预训练。其二是多模态融合,光学影像联合 SAR、DSM、夜光数据共同分类,正成为提升复杂场景精度的主流路径。其三是分类体系由应用场景动态定义,光伏板提取、建筑变化检测、灾后损毁评估这类按需任务逐渐取代固定类别的地表覆盖制图。其四是生成式模型的介入,扩散模型和掩码重建不仅在数据增强上发挥作用,也被用于直接生成带标注的合成训练集,缓解数据瓶颈。
对你自己的项目,判断某个新方法是否值得跟进,可以用一个简单问题检验:它是否让验证集上最低的类别 IoU 提升了,还是只提升了整体 OA。如果答案在前者,说明它对小类和困难场景有真实价值;如果答案只落在后者,大概率是样本不均衡带来的假象,不值得为它替换现有模型。
本文还有配套的精品资源,点击获取