第8期| 传统机器学习遥感解译:SVM 随机森林分类全流程实操
2026/6/8 22:23:33 网站建设 项目流程

前言

在前两期内容中,我们系统学习了遥感影像全流程预处理人工目视解译判读体系。目视解译依托从业者经验完成地物识别,具备判读直观、边界精准的优势,但也存在效率低下、主观偏差大、难以规模化作业等短板,无法满足当下大范围遥感监测、长时序动态分析的工程需求。

在深度学习技术普及之前,传统机器学习算法凭借低算力依赖、可解释性强、小样本适配等特性,成为遥感影像自动分类的主流技术方案。其中支持向量机(SVM)随机森林(Random Forest)更是行业标杆算法,至今仍是本科毕业设计、期刊论文、小型工程项目中使用率最高的分类基线模型。

不同于深度学习的端到端自动特征学习,传统机器学习依赖人工特征工程,通过提取影像光谱、纹理、遥感指数等多维特征实现像素级分类。本期将完整拆解:两类技术路线的核心差异、遥感影像特征构建方法、SVM与随机森林分步实操、遥感领域专属精度评价体系,全程搭配落地代码与优化思路,零基础也可复现实验结果。


一、传统机器学习 VS 深度学习 遥感解译核心差异

在开展实验前,首先厘清两大技术路线的适用场景、原理区别与优劣势,根据自身数据条件、硬件配置、项目需求合理选型。

对比维度传统机器学习(SVM/随机森林)深度学习(U-Net/YOLO等)
特征来源人工设计特征(光谱、纹理、遥感指数)网络自动挖掘深层特征
样本需求少量标记样本即可训练依赖大规模标注数据集
硬件要求仅需CPU,普通电脑即可运行建议GPU加速,大模型显存要求高
训练速度极速,单景影像数秒完成训练训练周期长,动辄数小时/数天
可解释性特征、分类逻辑清晰,结果易解读黑盒模型,特征逻辑难以溯源
适用场景小范围分类、对比实验、论文基线、快速出图复杂场景、精细化地物提取、大规模工程落地

选型建议

  1. 样本数量少、硬件配置一般、仅需完成基础地物分类:优先选择随机森林 / SVM
  2. 地物类型复杂、存在大量细碎目标、拥有充足标注数据与GPU设备:优先选择深度学习模型。

二、遥感影像核心特征体系构建

特征是机器学习分类的核心载体,特征质量直接决定分类精度上限。遥感影像分类主流使用光谱特征+纹理特征组合方案,部分场景可叠加植被、水体、建筑等专题遥感指数,进一步区分同谱异物、同物异谱难题。

2.1 光谱特征

光谱特征是遥感影像最本质的判别依据,由不同地物对电磁波的反射、吸收特性决定。

  • 基础构成:多波段原始像素灰度值,单波段、多波段组合均可作为输入特征;
  • 拓展应用:衍生各类遥感专题指数,典型代表:
    • NDVI 归一化植被指数:区分植被与非植被区域;
    • NDWI 归一化水体指数:精准提取水体,区分水体与阴影;
    • NDBI 归一化建筑指数:快速识别城镇建设用地。

2.2 纹理特征

单纯依靠光谱特征极易出现同谱异物问题(例如阴影与水体、裸土与低矮建筑色调相近,难以区分)。纹理描述地物表面的空间分布规律、粗糙程度,是弥补光谱缺陷的关键。

本次实操选用工程中最常用的两类纹理指标:

  • 灰度均值:反映局部区域整体亮度;
  • 灰度方差:反映局部区域像素离散程度,表征纹理粗糙与否。

通过滑动窗口逐像素遍历整图,提取邻域纹理信息,让模型兼顾像素灰度与空间形态。


三、SVM & 随机森林 地物分类完整实操

3.1 整体技术流程

标准遥感机器学习分类全链路:
影像预处理 → 多维特征融合 → 训练样本采集 → 模型训练与验证 → 全域影像预测 → 结果输出

3.2 环境依赖安装

执行以下命令安装所需依赖库,适配 Windows / Linux 全平台:

pipinstallnumpy rasterio opencv-python scikit-learn-ihttps://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn

3.3 完整可运行代码

代码实现功能:影像读取、光谱+纹理特征提取、样本划分、SVM分类、随机森林分类、全图预测,可直接替换路径运行。

importrasterioimportnumpyasnpimportcv2fromsklearn.svmimportSVCfromsklearn.ensembleimportRandomForestClassifierfromsklearn.model_selectionimporttrain_test_split# ===================== 【参数配置区 - 仅修改此处】 =====================# 待分类遥感影像路径(支持tif格式)IMAGE_PATH=r"校正后遥感影像.tif"# 纹理提取滑动窗口大小,建议取值 3 / 5 / 7TEXTURE_WINDOW=5# 训练样本数量,根据影像大小调整SAMPLE_NUM=3000# 地物分类类别数CLASS_NUM=4# =====================================================================defextract_texture(gray_img,win_size):""" 提取纹理特征:局部均值 + 局部方差 :param gray_img: 单波段灰度影像 :param win_size: 滑动窗口尺寸 :return: 拼接后的纹理特征矩阵 """# 计算局部均值mean_feat=cv2.blur(gray_img,(win_size,win_size))# 计算局部方差 Var = E(X²) - [E(X)]²square_mean=cv2.blur(np.square(gray_img),(win_size,win_size))var_feat=square_mean-np.square(mean_feat)# 特征拼接texture_combined=np.dstack([mean_feat,var_feat])returntexture_combineddefbuild_total_feature(raster_data):""" 融合光谱特征 + 纹理特征,构建全局特征矩阵 :param raster_data: 原始多波段影像 (C, H, W) :return: 二维特征矩阵 (像素总数, 特征维度) """# 维度转换 (C, H, W) → (H, W, C)h,w=raster_data.shape[1],raster_data.shape[2]spec_feat=np.transpose(raster_data,(1,2,0))# 生成灰度图,用于提取纹理gray=np.mean(spec_feat,axis=-1)# 提取纹理特征tex_feat=extract_texture(gray,TEXTURE_WINDOW)# 光谱、纹理特征拼接total_feat=np.concatenate([spec_feat,tex_feat],axis=-1)# 转为二维矩阵:(H*W, 特征数),适配机器学习输入total_feat_flat=total_feat.reshape(-1,total_feat.shape[-1])returntotal_feat_flat,h,wif__name__=="__main__":# 1. 读取遥感影像withrasterio.open(IMAGE_PATH)assrc:img_data=src.read()profile=src.profile# 保存影像地理信息,用于后续保存结果# 2. 构建全局特征矩阵all_features,height,width=build_total_feature(img_data)print(f"✅ 特征构建完成,总像素数:{height*width}")# 3. 模拟训练样本(实际项目替换为矢量样本点/标注样本)# X:样本特征 Y:样本标签sample_idx=np.random.choice(len(all_features),SAMPLE_NUM,replace=False)X_sample=all_features[sample_idx]y_sample=np.random.randint(0,CLASS_NUM,size=SAMPLE_NUM)# 4. 划分训练集 & 测试集(8:2划分)X_train,X_test,y_train,y_test=train_test_split(X_sample,y_sample,test_size=0.2,random_state=42)# ===================== SVM 模型训练与预测 =====================print("\n----- 开始训练 SVM 分类模型 -----")svm_model=SVC(kernel="rbf",random_state=42)svm_model.fit(X_train,y_train)pred_svm_test=svm_model.predict(X_test)# 全图预测pred_svm_full=svm_model.predict(all_features).reshape(height,width)# ===================== 随机森林 模型训练与预测 =====================print("----- 开始训练 随机森林 分类模型 -----")rf_model=RandomForestClassifier(n_estimators=120,random_state=42)rf_model.fit(X_train,y_train)pred_rf_test=rf_model.predict(X_test)# 全图预测pred_rf_full=rf_model.predict(all_features).reshape(height,width)print("\n✅ 两类模型分类预测全部完成!")

实操补充说明

  1. 样本替换:代码中为模拟随机样本,正式项目可结合geopandas读取SHP矢量样本点,提取对应像素标签;
  2. 参数调优:SVM可调整核函数、惩罚系数;随机森林可调整决策树数量n_estimators
  3. 结果保存:可基于rasterio将分类结果写入TIFF文件,保留原始坐标与投影信息。


算法分类结果对比图


四、遥感专用精度评价体系解读

分类结果可视化仅能做定性判断,量化精度指标是论文、项目验收的硬性要求。遥感领域通用三大评价指标:混淆矩阵、总体精度(OA)、Kappa系数,下文结合原理+代码完整讲解。

4.1 混淆矩阵 (Confusion Matrix)

混淆矩阵是分类结果的全景统计表,矩阵行代表真实地物类别,列代表模型预测类别。

  • 核心作用:直观查看各类地物错分、漏分情况,快速定位混分严重的地物(如水影与阴影、耕地与裸土);
  • 应用价值:针对性优化特征、补充样本,解决类别混淆问题。

4.2 总体精度 OA (Overall Accuracy)

所有像素中分类正确的像素占总像素的比例,反映模型整体分类效果,数值越接近1,整体精度越高。

4.3 Kappa 系数

遥感分类核心权威指标,也是期刊、毕设最看重的评价标准。该指标剔除了随机分类带来的正确率干扰,客观评价模型实际分类能力。

  • 评价分级(行业通用标准):
    • Kappa ≥ 0.80:分类效果优秀,结果可靠;
    • 0.60 ≤ Kappa < 0.80:分类效果良好,可满足常规需求;
    • Kappa < 0.60:分类误差较大,需优化特征、样本或模型参数。

4.4 精度评价完整代码

在上述分类代码后追加以下代码,自动计算并打印全部精度指标:

fromsklearn.metricsimportconfusion_matrix,accuracy_score,cohen_kappa_scoredefcalculate_evaluation(y_true,y_pred):"""统一计算混淆矩阵、OA、Kappa系数"""cm=confusion_matrix(y_true,y_pred)oa=accuracy_score(y_true,y_pred)kappa=cohen_kappa_score(y_true,y_pred)print("="*40)print("混淆矩阵:")print(cm)print(f"总体精度 OA:{oa:.4f}")print(f"Kappa 系数:{kappa:.4f}")print("="*40)# 分别评估 SVM 与 随机森林print("【SVM 模型精度评价】")calculate_evaluation(y_test,pred_svm_test)print("\n【随机森林 模型精度评价】")calculate_evaluation(y_test,pred_rf_test)

精度指标解读示意图


五、算法对比 & 精度优化实战技巧

5.1 SVM 与 随机森林 算法特性总结

  1. 支持向量机(SVM)

    • 优势:高维特征适配性强、小样本场景稳定性佳;
    • 短板:大尺度影像预测速度慢、参数对分类结果影响大、多类别场景表现一般;
    • 适配场景:地物类别少、样本稀缺的小型区域分类。
  2. 随机森林(Random Forest)

    • 优势:抗过拟合能力强、运算速度快、多类别分类表现均衡、鲁棒性突出;
    • 短板:极端复杂纹理区域精度略逊于SVM;
    • 适配场景:遥感分类首选基线模型,绝大多数论文、工程项目优先选用。

5.2 分类精度偏低?通用优化方案

如果出现Kappa系数偏低、地物混分严重,可从以下维度逐步调优:

  1. 特征层面:叠加NDVI、NDWI等遥感指数,丰富特征维度;调整纹理窗口大小,适配不同尺度地物;
  2. 样本层面:清洗错误标注样本,保证各类别样本数量均衡,增加典型区域样本;
  3. 模型层面:调整SVM核函数、随机森林决策树数量等超参数;
  4. 数据层面:剔除云雾、厚阴影等干扰区域,降低无效像素影响。

💬 互动答疑

你在使用传统机器学习做遥感分类时,是否遇到Kappa系数偏低、地物严重混分、大面积错分类等问题?
可以在评论区描述你的影像场景、地物类型与遇到的难题,我会统一整理并给出针对性的优化方案!


📌 下期预告

第9期:从机器学习到深度学习:AI遥感解译的进化逻辑
详解人工特征、机器特征、AI自动特征提取的区别、深度学习适配遥感大数据的核心原因、AI遥感三大核心任务:分类、检测、分割场景区分、新手该如何选择适合自己的解译任务模型。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询