geemap学习笔记 07 geemap 监督分类案例

文章目录

  • 前言
  • 一、监督分类介绍
    • 1. 定义
    • 2. 监督分类方法
  • 二、geemap中监督分类的详细步骤
    • 1. 加载地图底图
    • 2. 加载研究区影像数据
    • 3. 创建训练样本
    • 4. 分类器训练
    • 5. 影像监督分类
    • 6. 分类结果颜色修改
    • 7. 添加图例和可视化展示
    • 8. 分类结果导出
  • 总结


前言

本节以一个具体遥感影像处理的案例——基于遥感影像的监督分类,介绍一下使用Earth Engine对遥感影像进行监督分类的具体操作流程。


一、监督分类介绍

1. 定义

监督分类:监督分类是遥感图像分类的一种,即用被确认类别的样本像元去识别其他未知类别像元的过程。已被确认类别的样本像元是指那些位于训练区的像元。在这种分类中,分析者在图像上对每一种类别选取一定数量的训练区,计算机计算每种训练样区的统计或其他信息,每个像元和训练样本作比较,按照不同规则将其划分到和其最相似的样本类。监督分类可分两个基本步骤:选择训练样本和提取统计信息,以及选择分类算法。

2. 监督分类方法

监督分类的分类器: CART、RandomForest、NaiveBayes 和 SVM。具体分类方法的详细介绍,此处不做补充,可自行百度查找。
② GEE中监督分类的方法放在了ee.Classifier里面,具体的分类方法如下图所示:
geemap学习笔记 07 geemap 监督分类案例_第1张图片
下面就来详细介绍一下,在geemap中如何进行遥感影像的监督分类~

二、geemap中监督分类的详细步骤

监督分类的一般工作流程是:
① 收集训练数据。组合具有存储已知类标签的属性和存储预测变量数值的属性的特征。
② 实例化一个分类器。如有必要,设置其参数
③ 使用训练数据训练分类器。
④ 对图像或特征集合进行分类。
⑤ 使用独立的验证数据估计分类精度。

1. 加载地图底图

首先,需要在jupyter notebook中加载可交互地图地图数据,详细代码如下所示:

# Class_32 geemap进行监督分类实例
# part 1 创建可交互地图底图
import ee
import geemap
Map = geemap.Map()
Map

geemap学习笔记 07 geemap 监督分类案例_第2张图片

2. 加载研究区影像数据

本案例加载研究区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")

geemap学习笔记 07 geemap 监督分类案例_第3张图片
这里以筛选出研究区生长季云量最小的Landsat-8影像,进行假彩色可视化展示。

3. 创建训练样本

① 监督分类样本点的创建,这里以USGS/NLCD/NLCD2016的分类结果为例选择样本数据集,加载分类结果图,详细的代码如下。

# 训练样本的创建,以USGS/NLCD/NLCD2016的分类结果为例选择样本数据集
nlcd = ee.Image('USGS/NLCD/NLCD2016').select('landcover').clip(image.geometry())
Map.addLayer(nlcd, {}, 'NLCD')
Map

geemap学习笔记 07 geemap 监督分类案例_第4张图片
② 在研究区中随机绘制样本点。

# 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)

geemap学习笔记 07 geemap 监督分类案例_第5张图片

4. 分类器训练

这里的监督分类分类器选择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)

5. 影像监督分类

# part 5 影像分类.
result = image.select(bands).classify(trained)

# # Display the clusters with random colors.
Map.addLayer(result.randomVisualizer(), {}, 'classified')
Map

geemap学习笔记 07 geemap 监督分类案例_第6张图片

6. 分类结果颜色修改

分类图颜色修改,为便于与USGS/NLCD/NLCD2016分类结果图对比,定义相同的分类类别和颜色。

# part 6 分类图颜色修改(为便于与USGS/NLCD/NLCD2016分类结果图对比,定义相同的分类类别和颜色)
# 获取USGS/NLCD/NLCD2016分类结果的类别名称
class_values = nlcd.get('landcover_class_values').getInfo()
class_values

geemap学习笔记 07 geemap 监督分类案例_第7张图片

# 获取USGS/NLCD/NLCD2016分类结果的类别颜色
class_palette = nlcd.get('landcover_class_palette').getInfo()
class_palette

geemap学习笔记 07 geemap 监督分类案例_第8张图片
修改各类别分类结果的颜色。

landcover = result.set('classification_class_values', class_values)
landcover = landcover.set('classification_class_palette', class_palette)
Map.addLayer(landcover, {}, 'Land cover')
Map

geemap学习笔记 07 geemap 监督分类案例_第9张图片

7. 添加图例和可视化展示

① 首先,在分类结果中添加各类别的图例信息,详细代码如下所示:

# 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))

geemap学习笔记 07 geemap 监督分类案例_第10张图片
在这里插入图片描述

8. 分类结果导出

将监督分类结果导出带自己的本地电脑中存储,详细代码如下:

# 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处理遥感影像的详细案例,尽请期待~

你可能感兴趣的:(geemap,python,分类,学习,机器学习)