在遥感影像处理领域,非监督分类凭借其无需人工标注样本的优势,成为快速了解地物分布的得力助手。它能自动依据像素光谱特征的相似性完成聚类,这种“无师自通”的特性,让地理空间分析变得更加高效。
今天,我们就来深入探讨如何在Google Earth Engine(GEE)中实现4种经典的非监督分类算法。从基础原理到具体代码实现,再到结果分析,全方位为你讲解,文中案例均可直接运行,参数也能灵活调整,非常适合新手入门学习。
一、GEE非监督分类基础认知
1. 非监督分类的核心概念
非监督分类是一种无标签的机器学习方法,它的核心原理是让算法自主去发现影像中像素之间的内在联系。简单来说,就是把具有相似光谱特征的像素归为同一类别,而这个过程不需要我们提前告诉计算机“这是耕地”“那是建筑”。
2. 为什么选择GEE进行非监督分类?
GEE作为一个强大的云平台,为非监督分类提供了诸多便利:
- 拥有海量的遥感影像数据,无需我们自己费力去收集和预处理数据。
- 集成了多种成熟的聚类算法,省去了我们自己编写复杂算法的麻烦。
- 具备强大的计算能力,能快速处理大规模的遥感影像数据。
3. 非监督分类的核心优势
- 节省时间成本:不需要人工标注大量样本,大大减少了前期准备工作的时间。
- 快速探索未知区域:对于我们不熟悉的区域,能快速了解其地物分布规律。
- 适合大规模处理:可以高效地对大范围的遥感影像进行自动化分类。
二、实战案例:旧金山湾区土地覆盖分类
本次实战案例以旧金山湾区为研究区域,采用Landsat 8影像作为数据源,通过4种不同的非监督分类算法,对该区域的土地覆盖情况进行分类,并对比分析它们的效果。
1. 数据准备详情
研究区域:旧金山湾区,其地理坐标范围为(-122.6, 37.4, -122.2, 37.8)。这个区域地物类型丰富,包含了城市建筑、植被、水体、裸地等多种类型,非常适合作为分类案例的研究区域。
数据源:选用Landsat 8 TOA反射率数据,时间范围为2023年6月1日至2023年9月1日。选择这个时间段的数据,是因为此时段该区域天气相对晴朗,云量较少,能保证影像的质量。
特征波段选择:选取了B4(红波段)、B3(绿波段)、B2(蓝波段)、B5(近红外波段)、B6(短波红外1波段)、B7(短波红外2波段)这6个波段作为分类特征。这些波段能较好地反映不同地物的光谱特性,比如近红外波段对植被的反射率较高,能很好地区分植被和其他地物。
样本量确定:生成5000个随机采样点作为训练样本。样本量的多少会影响分类结果的准确性,过少的样本可能无法充分反映地物的特征,过多的样本则会增加计算量,5000个样本在保证分类效果的同时,也能兼顾计算效率。
// 定义研究区域
var region = ee.Geometry.Rectangle({coords: [-122.6, 37.4, -122.2, 37.8],proj: 'EPSG:4326'
});// 加载影像并筛选
var image = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA').filterBounds(region) // 筛选出研究区域内的影像.filterDate('2023-06-01', '2023-09-01') // 筛选出指定时间范围内的影像.sort('CLOUD_COVER') // 按照云量排序.first() // 选取云量最少的影像.clip(region); // 裁剪出研究区域// 选择特征波段
var bands = ['B4', 'B3', 'B2', 'B5', 'B6', 'B7'];
var input = image.select(bands);// 生成训练样本
var training = input.sample({region: region, // 采样区域scale: 30, // 采样尺度,与Landsat 8影像分辨率一致numPixels: 5000, // 采样数量seed: 42, // 随机种子,保证结果可重复tileScale: 4 // 提高采样效率
});
2. 4种算法实现与深度对比
(1)K-Means算法
算法原理:K-Means算法是一种经典的聚类算法,它首先随机选择k个初始聚类中心,然后将每个样本分配到距离最近的聚类中心所在的类别中,接着重新计算每个类别的聚类中心,重复这个过程,直到聚类中心不再发生明显变化。
特点:作为经典的聚类算法,它需要我们预先设定聚类数量,计算速度相对较快。
核心参数详解:
nClusters
:聚类数,这个参数需要我们根据研究目标和地物类型的复杂程度来设定。init
:初始化方式,选择1表示使用k-means++优化初始化,这种方式能使初始聚类中心的分布更加合理,提高分类效果。seed
:随机种子,保证每次运行结果的一致性。
var kmeans = ee.Clusterer.wekaKMeans({nClusters: 4, // 预设4类,可根据实际情况调整init: 1, // 采用k-means++优化初始化seed: 42
}).train(training, bands); // 用训练样本和特征波段训练聚类器
var kmeansResult = input.cluster(kmeans); // 对输入影像进行分类
分类效果分析:分类结果的边界清晰,能较好地将不同地物区分开来。非常适合已知目标类别数量的场景,比如在进行固定类型的土地利用分类时,我们可以根据经验设定合适的聚类数,得到理想的分类结果。
(2)X-Means算法
算法原理:X-Means算法是K-Means算法的扩展,它在K-Means的基础上,通过贝叶斯信息准则(BIC)来自动确定最优的聚类数量。它先从较少的聚类数开始,然后不断尝试分裂聚类,判断分裂后的结果是否更优,直到找到最优的聚类数量。
特点:作为K-Means的扩展算法,它最大的优势是可以自动确定最优聚类数量,不需要我们手动去尝试和调整。
核心参数详解:
minClusters
:最小聚类数,设定聚类数量的下限。maxClusters
:最大聚类数,设定聚类数量的上限。useKD
:是否启用KDTree加速计算,启用后能提高算法处理高维数据的效率。seed
:随机种子,保证结果的可重复性。
var xmeans = ee.Clusterer.wekaXMeans({minClusters: 2, // 最小聚类数为2maxClusters: 6, // 最大聚类数为6useKD: true, // 启用KDTree加速计算seed: 42
}).train(training, bands); // 训练聚类器
var xmeansResult = input.cluster(xmeans); // 进行分类
分类效果分析:由于能自动确定聚类数量,它的分类结果能更好地适应数据的分布特征。适合进行探索性分析,当我们对研究区域的地物类型不太了解时,使用X-Means算法可以快速得到较为合理的分类结果。
(3)级联K-Means算法
算法原理:级联K-Means算法通过多轮迭代和多次重启来寻找全局最优解。它在每一轮迭代中都会尝试不同的初始聚类中心,通过多次重启,避免算法陷入局部最优解,从而提高分类结果的稳定性和准确性。
特点:该算法通过多轮迭代优化,多次重启寻找全局最优解,得到的结果稳定性高,抗噪声能力强。
核心参数详解:
minClusters
:最小聚类数。maxClusters
:最大聚类数。manual
:是否手动选择聚类数,设为false表示自动选择。restarts
:重启次数,重启次数越多,找到最优解的可能性越大,但计算时间也会相应增加。init
:是否使用优化的初始化方式。distanceFunction
:距离函数,这里选择欧几里得距离。
var cascadeKmeans = ee.Clusterer.wekaCascadeKMeans({minClusters: 2,maxClusters: 6,manual: false, // 自动选择聚类数restarts: 10, // 10次重启优化,可根据计算资源调整init: true,distanceFunction: "Euclidean" // 使用欧几里得距离
}).train(training, bands); // 训练聚类器
var cascadeResult = input.cluster(cascadeKmeans); // 进行分类
分类效果分析:分类结果的稳定性高,对于影像中存在的噪声点有较强的抵抗能力。适合对分类精度要求较高的场景,比如在进行土地利用变化监测时,需要分类结果具有较高的一致性和准确性,级联K-Means算法就能满足这样的需求。
(4)Cobweb算法
算法原理:Cobweb算法是一种增量式聚类算法,它通过构建分类层次结构来对数据进行聚类。在处理数据的过程中,它会不断地调整分类结构,当新的数据进来时,会判断其与现有类别之间的关系,决定是将其归入现有类别,还是创建新的类别。
特点:作为增量式聚类算法,它可以生成层次化的分类结构,能很好地反映类别之间的层次关系。
核心参数详解:
acuity
:敏锐度,值越小,算法对数据中的细微差异越敏感,越容易区分不同的类别。cutoff
:新类创建阈值,值越小,越容易创建新的类别。seed
:随机种子,保证结果的可重复性。
var cobweb = ee.Clusterer.wekaCobweb({acuity: 0.1, // 降低阈值,提高对差异的敏感度cutoff: 0.0001, // 降低新类创建门槛,使算法更容易生成新类seed: 42
}).train(training, bands); // 训练聚类器
var cobwebResult = input.cluster(cobweb); // 进行分类
分类效果分析:分类结果呈现出类别间的层次关系,能很好地反映地物的嵌套结构。比如在分析城市-郊区-农村的梯度变化时,Cobweb算法可以清晰地展示出这种层次关系,帮助我们更好地理解地物的空间分布规律。
3. 结果可视化代码详解
// 真彩色影像显示
Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, '真彩色影像');
// 这里设置了红、绿、蓝三个波段,以及显示的最小值和最大值,使影像能以真彩色显示,方便我们直观地观察研究区域的地物情况// 分类结果添加到地图
Map.addLayer(kmeansResult, {min:0, max:3, palette: ['#0000FF','#00FF00','#FF0000','#FFFF00']}, 'K-Means分类');
// 为K-Means分类结果设置了颜色 palette,每个颜色代表一个类别,min和max对应聚类数的范围Map.addLayer(xmeansResult, {min:0, max:5, palette: ['#FF5733','#33FF57','#3357FF','#F3FF33','#FF33F3','#33FFF3']}, 'X-Means分类');
Map.addLayer(cascadeResult, {min:0, max:5, palette: ['#8B4513','#228B22','#87CEFA','#FFD700','#FF6347','#9370DB']}, '级联K-Means分类');
Map.addLayer(cobwebResult, {min:0, max:11, palette: ['#FFA500','#008000','#000080','#800080','#00FFFF','#FF0000','#808080','#FFFF00','#00FF00','#0000FF','#FF00FF','#C0C0C0']}, 'Cobweb分类');
结果展示:
真彩色影像
K-means
X-mean
级联K-means
CobWeb
三、完整代码获取与详细使用指南
1. 代码使用步骤
- 打开GEE编辑器:在浏览器中输入code.earthengine.google.com,进入GEE代码编辑器页面。
- 复制代码:将本文提供的完整代码复制到编辑器中。
- 运行代码:点击编辑器上方的“Run”按钮,等待代码运行完成,地图会加载出分类结果。
- 查看结果:在地图窗口可以切换不同的分类结果图层进行查看,控制台会显示聚类数量统计等信息,帮助我们评估分类效果。
- 导出结果:如果需要保存分类结果,在左侧的“Tasks”面板中找到对应的导出任务,点击“Run”按钮,按照提示设置导出参数,即可将结果导出到Google Drive中。
2. 参数调节详细建议
(以下为基础参考值,实际应用中需根据具体数据特征进行调整)
- 样本量:一般建议在3000-10000个像素之间。当研究区域的数据量较大时,可以适当减小样本量,以提高计算速度;当数据量较小时,可增加样本量,保证分类的准确性。
- 聚类数量:对于土地利用分类,建议设置5-10类;如果需要进行更精细的分类,比如区分不同种类的植被,可以适当增加聚类数量。
- Cobweb参数:
acuity
的取值范围建议在0.1-1之间,cutoff
的取值范围建议在0.0001-0.01之间。这两个参数值越小,分类结果越精细,但也可能会导致过度分类。 - 波段选择:除了本文选用的波段外,还可以添加NDVI(归一化植被指数)、NDBI(归一化建筑指数)等指数作为特征波段,这些指数能增强不同地物之间的差异,提高分类效果。
四、注意事项与常见问题解决
1. 研究区域更换
如果要将案例应用到其他区域,需要修改region
的坐标值。可以通过GEE编辑器中的绘图工具,绘制新的研究区域,然后获取其坐标范围进行修改。
2. 数据源更换
当使用不同传感器的数据(如Sentinel-2)时,需要对应调整bands
参数。不同传感器的波段设置不同,要选择适合分类的波段。例如,Sentinel-2的波段更多,分辨率更高,可以根据研究需求选择合适的波段。
3. 分类结果解读
聚类结果的颜色只是为了区分不同的类别,并不代表实际的地物类型。在解读分类结果时,需要结合实地调研数据、高分辨率影像等进行验证,才能准确判断每个类别对应的地物类型。
4. 分类效果提升
在复杂的场景中,仅依靠光谱特征可能无法得到理想的分类结果。此时,可以考虑增加纹理特征(如均值、方差等)或多时相数据。纹理特征能反映地物的空间结构信息,多时相数据能反映地物的动态变化,这些都能帮助提高分类的精度。
通过对这4种算法的分类结果进行对比,我们可以根据不同的研究目标选择合适的算法:如果追求分类效率,K-Means算法是不错的选择;如果需要探索未知区域的地物分布,X-Means算法能自动确定聚类数量,非常方便;如果对分类结果的稳定性要求较高,级联K-Means算法更合适;如果要分析地物的层次关系,Cobweb算法能满足需求。
在实际应用中,建议先通过非监督分类对研究区域的数据规律进行探索,了解地物的大致分布情况,然后结合少量的样本进行监督分类优化,这样既能提高分析效率,又能保证分类精度。希望本文能帮助你更好地掌握GEE中的非监督分类方法,为你的地理空间分析工作提供有力支持。
若您认为本文的技术方法对研究或实践有参考价值,欢迎关注并推荐给更多从事遥感应用的同行,以便共同交流完善相关技术体系。