土地利用和土地覆盖 (LULC) 分类在林业和农业领域发挥着重要作用,无论是种植园管理、生态系统恢复、碳市场计划还是其他应用。监测土地覆盖和土地利用变化是特许权所有者的一项强制性任务,需要对其特许权区域进行一致且准确的分析。
作为一名 GIS 分析师,我最初依靠手动流程或预构建的软件工具来执行这些分类。虽然这些方法有效,但它们通常缺乏灵活性,无法满足特定需求或应对独特挑战。在管理大面积区域时,手动工作流程也变得不切实际,尤其是在需要频繁或实时更新的情况下。
LULC 分类通常依赖于卫星图像、航拍照片或无人机图像。卫星图像可作为免费或高分辨率的商业选项,提供针对不同目标的各种传感器和分辨率。光学和合成孔径雷达 (SAR) 数据对于捕捉各种景观特征特别有价值。这些数据集的时间性质允许近乎实时的监控,从而更容易跟踪变化并有效管理森林资产。
本文提供了使用 Python 进行土地覆盖分类的分步指南,涵盖数据采集和预处理、特征提取和训练/测试数据集的准备、模型训练和准确性评估以及结果的预测和导出。通过利用 Python 强大的机器学习和地理空间数据处理工具和库,我们可以创建针对土地覆盖分类的定制、高效解决方案。这次旅程代表了我将 Python、机器学习和空间数据结合起来的第一步——让我们一起深入研究吧!
1. 数据采集和预处理
对于这个项目,我将使用Sentinel-2A的光学数据,这是哥白尼计划的一部分,可从此处下载。在其 13 个光谱波段中,我将重点分析 7 个波段,特别是那些捕获RGB(红、绿、蓝)和NIR(近红外)波长的波段。此外,还将结合归一化差异植被指数 (NDVI) 来提高预测准确性。
预处理步骤可确保数据已准备好进行分析。由于我的感兴趣区域 (AoI) 无云,因此我跳过了云遮罩。相反,我将数据剪裁到 AoI,堆叠选定的波段,并通过将反射率值除以 10,000 来缩放反射率值。此缩放将原始值转换为标准化反射率单位,使其更易于使用。
为了获得标记的样本数据,我参考了环境和林业部根据林业规划总干事条例第 P.1/VII-IPSDH/2015 号关于监测土地覆盖指南提供的数据集。使用 GIS 软件,我创建了一个包含点位置的 Shapefile,每个点位置都用其各自的土地利用/土地覆盖 (LULC) 类别作为属性进行注释。对于本教程,数据集包括十个不同的 LULC 类别。
从这一步开始,我将利用 Python 库(例如Geopandas、Rasterio和NumPy)来处理空间数据,并使用Scikit-learn来构建和评估机器学习模型。
2.特征提取和训练/测试数据准备
特征提取涉及从选定的光谱带中检索像素值并将它们组织成适合机器学习分析的格式。
将包含十个 LULC 类别的 Shapefile 中的标记数据与栅格数据叠加,以将类别标签分配给相应的像素。然后使用这些标记像素创建训练和测试数据集,确保模型训练和验证的类别分布均衡。
输入图像的图像合成可视化(左:假彩色;右:自然色)
由于代码比较复杂,这里就不展示了。不过,完整的脚本可以通过文章末尾提供的链接访问。
3.模型训练和准确度评估
准备好训练和测试数据集后,我使用随机森林 (RF)算法对土地覆盖类型进行分类。随机森林是一种强大的机器学习算法,由于其能够处理大型数据集、管理特征之间的复杂关系并最大限度地减少过度拟合,因此广泛应用于遥感应用。
然后,我使用Scikit-learn在训练数据集上训练 RF 模型,这涉及拟合多个决策树并组合它们的输出以进行分类。训练后,使用测试数据集验证模型。我通过将预测标签与真实标签进行比较来评估其准确性,并计算出准确率、精确率、召回率和f-1 分数等指标。还生成了混淆矩阵来评估模型在所有十个土地覆盖类别中的表现。
RF模型的分类报告和供述矩阵
分类报告显示总体准确率为 62.90%,在开放水域和次生红树林类别中表现强劲,实现了较高的精度、召回率和 F1 分数。然而,该模型很难预测定居点、混合旱作农业和稻田类别,这些类别的精度、召回率和 F1 分数接近于零,表明这些类别的模型性能较差。由于挖掘类别的支持有限,只有一个样本可用,因此也带来了挑战。与加权平均值相比,较低的宏观平均分数进一步凸显了类别不平衡,其中较大的类别对整体性能指标的影响不成比例。
混淆矩阵显示,该模型对开放水域和次生红树林类别的分类效果良好,大多数预测都正确分类(例如,次生红树林的分类正确率为 14/14)。但是,对于定居点和混合旱地农业等类别,存在明显的错误分类,这些类别经常与其他类别(如次生红树林和稻田)混淆。稀疏类别(包括稻田和采矿)的预测计数较低或根本没有预测,表明很难区分这些类别。总体而言,该矩阵突出显示了代表性不足的类别的严重错误分类,以及占主导地位、代表性良好的类别的出色表现。
4.预测及导出结果
在训练和验证 RF 模型后,下一步是使用它来预测整个研究区域的土地覆盖类别。使用训练后的模型,我通过将所选波段的像素值作为输入特征来将预测应用于栅格数据。输出是分类栅格,其中每个像素被分配一个与十个 LULC 类别之一相对应的土地覆盖标签。
生成分类栅格后,我使用Rasterio将结果导出为 GeoTIFF 文件,确保与ArcGIS Pro或QGIS等 GIS 软件兼容,以便进一步进行可视化和分析。打开后,分类地图可以清晰地显示研究区域内的土地覆盖类型,是决策和监测的宝贵工具。通过设置颜色、标签和地图图例等其他配置,可以自定义输出,以便更好地进行解释和呈现。
LULC 分类的最终结果
总体而言,该模型在某些类别上表现出色,但在稀疏或不平衡的类别上表现不佳,这凸显了解决类别不平衡、增强特征表示和增加训练数据多样性的必要性。整合其他数据源(例如将光学数据与 SAR 数据相结合)或引入新特征(例如纹理指标或替代植被指数),可以进一步提高模型区分具有挑战性的类别的能力并提高整体性能。
结论
该项目突出了将机器学习与 Python 相结合进行土地覆盖分类的强大功能,展示了从数据预处理到导出结果的端到端工作流程。通过使用Geopandas、Rasterio、NumPy和Scikit-learn等工具,我们实现了灵活、高效的空间数据分析流程。 RF 模型提供了准确的分类,证明了其对大规模土地覆盖制图的有效性。这种方法不仅简化了工作流程,还为将机器学习集成到地理空间应用中开辟了新的可能性,为林业和农业部门提供了宝贵的见解。
与本文相关的代码可以在我的GitHub上免费获取。