本节以一个具体遥感影像处理的案例——基于遥感影像的监督分类,介绍一下使用Earth Engine对遥感影像进行监督分类的具体操作流程。
监督分类:监督分类是遥感图像分类的一种,即用被确认类别的样本像元去识别其他未知类别像元的过程。已被确认类别的样本像元是指那些位于训练区的像元。在这种分类中,分析者在图像上对每一种类别选取一定数量的训练区,计算机计算每种训练样区的统计或其他信息,每个像元和训练样本作比较,按照不同规则将其划分到和其最相似的样本类。监督分类可分两个基本步骤:选择训练样本和提取统计信息,以及选择分类算法。
① 监督分类的分类器: CART、RandomForest、NaiveBayes 和 SVM。具体分类方法的详细介绍,此处不做补充,可自行百度查找。
② GEE中监督分类的方法放在了ee.Classifier里面,具体的分类方法如下图所示:
下面就来详细介绍一下,在geemap中如何进行遥感影像的监督分类~
监督分类的一般工作流程是:
① 收集训练数据。组合具有存储已知类标签的属性和存储预测变量数值的属性的特征。
② 实例化一个分类器。如有必要,设置其参数
③ 使用训练数据训练分类器。
④ 对图像或特征集合进行分类。
⑤ 使用独立的验证数据估计分类精度。
首先,需要在jupyter notebook中加载可交互地图地图数据,详细代码如下所示:
# Class_32 geemap进行监督分类实例
# part 1 创建可交互地图底图
import ee
import geemap
Map = geemap.Map()
Map
本案例加载研究区2016.01.01-2016.12.31植被生长季云量最少(云量筛选)的Landsat-8 SR影像,参与后续的监督分类,详细代码如下:
# part 2在地图中加载影像
point = ee.Geometry.Point([-122.4439, 37.7538])
# point = ee.Geometry.Point([-87.7719, 41.8799])
image = (
ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(point)
.filterDate('2016-01-01', '2016-12-31')
.sort('CLOUD_COVER')
.first()
.select('B[1-7]')
)
vis_params = {'min': 0, 'max': 3000, 'bands': ['B5', 'B4', 'B3']}
Map.centerObject(point, 8)
Map.addLayer(image, vis_params, "Landsat-8")
这里以筛选出研究区生长季云量最小的Landsat-8影像,进行假彩色可视化展示。
① 监督分类样本点的创建,这里以USGS/NLCD/NLCD2016的分类结果为例选择样本数据集,加载分类结果图,详细的代码如下。
# 训练样本的创建,以USGS/NLCD/NLCD2016的分类结果为例选择样本数据集
nlcd = ee.Image('USGS/NLCD/NLCD2016').select('landcover').clip(image.geometry())
Map.addLayer(nlcd, {}, 'NLCD')
Map
# part 3 随机绘制样本点
points = nlcd.sample(
**{
'region': image.geometry(),
'scale': 30,
'numPixels': 4000,
'seed': 0,
'geometries': True, # Set this to False to ignore geometries
}
)
Map.addLayer(points, {}, 'training', False)
这里的监督分类分类器选择CART方法,ee.Classifier.smileCart(),详细的代码如下所示:
# part 4 训练分类器
# Use these bands for prediction.
bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7']
# This property of the table stores the land cover labels.
label = 'landcover'
# Overlay the points on the imagery to get training.
training = image.select(bands).sampleRegions(
**{'collection': points, 'properties': [label], 'scale': 30}
)
# 训练随机森林分类器.
trained = ee.Classifier.smileCart().train(training, label, bands)
# part 5 影像分类.
result = image.select(bands).classify(trained)
# # Display the clusters with random colors.
Map.addLayer(result.randomVisualizer(), {}, 'classified')
Map
分类图颜色修改,为便于与USGS/NLCD/NLCD2016分类结果图对比,定义相同的分类类别和颜色。
# part 6 分类图颜色修改(为便于与USGS/NLCD/NLCD2016分类结果图对比,定义相同的分类类别和颜色)
# 获取USGS/NLCD/NLCD2016分类结果的类别名称
class_values = nlcd.get('landcover_class_values').getInfo()
class_values
# 获取USGS/NLCD/NLCD2016分类结果的类别颜色
class_palette = nlcd.get('landcover_class_palette').getInfo()
class_palette
landcover = result.set('classification_class_values', class_values)
landcover = landcover.set('classification_class_palette', class_palette)
Map.addLayer(landcover, {}, 'Land cover')
Map
① 首先,在分类结果中添加各类别的图例信息,详细代码如下所示:
# part 8 添加图例
Map.add_legend(builtin_legend='NLCD')
Map
② 为进一步增强分类结果的可视化效果,可以修改其分类结果的透明度,详细代码如下:
# part 7 可视化结果(调整透明度)
print('Change layer opacity:')
cluster_layer = Map.layers[-1]
cluster_layer.interact(opacity=(0, 1, 0.1))
将监督分类结果导出带自己的本地电脑中存储,详细代码如下:
# part 9 分类结果图导出
import os
out_dir = os.path.join(os.path.expanduser('~'), 'Downloads')
out_file = os.path.join(out_dir, 'landcover.tif')
geemap.ee_export_image(landcover, filename=out_file, scale=900)
这里导出的路径为默认路径,也可以自行修改存储位置,存储路径中最好不要有中文。
以上就是今天要讲利用geemap进行监督分类的案例介绍啦,后续会继续更新利用geemap处理遥感影像的详细案例,尽请期待~