非监督分类是遥感影像中非常常用的一种分类方式,下图是Earth Engine中常用的聚类方法,本节就以landsat 8数据为例,采用 ee.Clusterer.wekaKMeans() 方法进行聚类分类。
import ee
import geemap
Map = geemap.Map()
Map
point = ee.Geometry.Point([-87.7719, 41.8799]) #初始化点坐标
image = (
ee.ImageCollection('LANDSAT/LC08/C01/T1_SR') #Landsat 8数据
.filterBounds(point) #过滤经过该点的影像
.filterDate('2019-01-01', '2019-12-31') #时间
.sort('CLOUD_COVER') #按照云量进行排序
.first() #选择第一景影像
.select('B[1-7]') #选择1-7个波段
)
vis_params = {'min': 0, 'max': 3000, 'bands': ['B5', 'B4', 'B3']}
Map.centerObject(point, 8)
Map.addLayer(image, vis_params, "Landsat-8")
props = geemap.image_props(image) #获取图像所有信息
props.getInfo()
props.get('IMAGE_DATE').getInfo() #图像获取时间
props.get('CLOUD_COVER').getInfo() #云量
#有多种方法可以创建用于生成训练数据集的区域
# region = Map.user_roi #可以在地图绘制ROI
# region = ee.Geometry.Rectangle([-122.6003, 37.4831, -121.8036, 37.8288]) #可以自定义矩形范围
# region = ee.Geometry.Point([-122.4439, 37.7538]).buffer(10000) #也可以创建缓冲区
training = image.sample(
**{
# 'region': region, #可以自定义区域生成样本,否则就是全影像
'scale': 30,
'numPixels': 5000, #这是要生成的样本点数
'seed': 0,
'geometries': True, # Set this to False to ignore geometries
}
)
Map.addLayer(training, {}, 'training', True)
Map
n_clusters = 5 #聚类中心的个数
clusterer = ee.Clusterer.wekaKMeans(n_clusters).train(training)
#使用经过训练的聚类器对输入进行聚类
result = image.cluster(clusterer)
#用随机颜色显示簇。
Map.addLayer(result.randomVisualizer(), {}, 'clusters')
Map
legend_keys = ['One', 'Two', 'Three', 'Four', 'ect'] #定义名称
legend_colors = ['#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3'] #定义颜色
#重新分类map
result = result.remap([0, 1, 2, 3, 4], [1, 2, 3, 4, 5])
Map.addLayer(
result, {'min': 1, 'max': 5, 'palette': legend_colors}, 'Labelled clusters'
) #为结果添加自定义颜色
Map.add_legend(
legend_keys=legend_keys, legend_colors=legend_colors, position='bottomright'
) #为结果添加图例
Map
geemap.ee_export_image_to_drive(
result, description='clusters', folder='export', scale=30
) #导出结果
大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。