在非监督分类中,我们有与监督分类相反的过程。 首先对光谱类进行分组,然后将其分类为簇。因此,在 Earth Engine 中,这些分类器是 ee.Clusterer 对象。 它们是“自学”算法,不使用一组标记的训练数据(即它们是“无监督的”)。 您可以将其视为执行一项您以前从未经历过的任务,首先收集尽可能多的信息。 例如,想象一下在不了解基本语法的情况下学习一门新语言,仅通过观看该语言的电视剧、听示例和寻找模式来学习。
与监督分类类似,Earth Engine 中的非监督分类具有以下工作流程:
1. 组和具有数字属性的特征,以在其中查找聚类(训练数据)。
2. 选择并实例化集群器。
3. 使用训练数据训练聚类器。
4. 将聚类器应用到场景中(分类)。
5. 标记聚类。
为了生成训练数据,我们将使用样本方法,该方法从一个区域中随机抽取样本(与从预定义位置抽取样本的sampleRegions不同)。 我们将通过调用几何方法使用图像的足迹作为区域, 此外,我们将定义要采样的像素数 (numPixels)(在本例中为 1000 个像素),并将tileScale 定义为 8,以避免由于区域大小而导致的计算错误。 复制并粘贴以下代码,从 Landsat 图像中采样 1000 个像素。 将代码添加到与之前监督分类的脚本中,以在最后比较监督分类结果与非监督分类结果。
Unsupervised classification
// Make the training dataset.
var training = landsat.sample({
region: landsat.geometry(),
scale: 30,
numPixels: 1000,
tileScale: 8
});
现在我们可以实例化一个集群器并训练它。 与有监督算法一样,有许多无监督算法可供选择。 我们将使用 k 均值聚类算法,这是遥感中常用的方法。 该算法通过使用迭代重组策略来识别光谱空间(图像 x 波段)中彼此靠近的像素组。 我们定义多个簇 k,然后该方法将该数量的种子点随机分布到谱空间中。 然后将大量像素样本分组为其最接近的种子,并计算该组的平均光谱值。 该平均值类似于点的质心,称为质心。 每次迭代都会重新计算类均值,并根据新均值对像素进行重新分类。重复此过程,直到质心保持相对稳定,并且只有少数几个
像素在后续迭代中从一个类到另一个类发生变化(图 1)。
图1 K-means视觉概念
// Instantiate the clusterer and train it.
var clusterer =ee.Clusterer.wekaKMeans(4).train(training);
现在复制并粘贴以下代码,将聚类器应用到图像,并将生成的分类添加到地图(图 2)。 注意,我们使用一种名为 randomVisualizer 的方法来为可视化分配颜色。 我们不会将非监督类与我们之前在监督分类中定义的调色板关联起来。相反,我们为这些类分配随机颜色,因为我们还不知道哪个无监督类最适合每个指定类( 例如,森林、草本)。 注意,图 2 中的颜色可能与您在地图上看到的颜色不同,因为它们是随机分配的。
// Cluster the input using the trained clusterer.
var Kclassified = landsat.cluster(clusterer);
// Display the clusters with random colors.
Map.addLayer(Kclassified.randomVisualizer(), {},'K-means classified - random colors');
图2 K-means 分类结果
【GEE代码】
https://code.earthengine.google.com/111ede698211e5d4e8d3efdb75d68635