GEE入门篇|图像分类(一):监督分类

news2024/11/18 0:15:01

        在遥感中,图像分类是尝试将图像中的所有像素分类为有限数量的标记土地覆盖和/或土地利用类别。 生成的分类图像是从原始图像导出的简化专题图(图 1), 土地覆盖和土地利用信息对于许多环境和社会经济应用至关重要,包括自然资源管理、城市规划、生物多样性保护、农业监测和碳核算。

图1 图像分类概念 

        用于生成土地覆盖和土地利用信息的图像分类技术自 20 世纪 80 年代以来一直在使用, 在关于图像分类的系列内容中,我们将介绍基于像素的监督和无监督分类的概念,并测试不同的分类器,本期内容我们将介绍监督分类。

※监督分类

        监督分类使用具有已知标签并代表每个感兴趣的土地覆盖类别的光谱特征的训练数据集来“监督”分类。 Earth Engine 中监督分类的总体方法总结如下:

        1. 获取场景;
        2.收集训练数据;
        3. 使用训练数据选择并训练分类器;
        4. 使用选定的分类器对图像进行分类。

        我们将首先根据清晰的陆地卫星图像手动创建训练数据(图 2),复制下面的代码块来定义您的 Landsat 8 场景变量并将其添加到地图中, 我们将使用意大利米兰的一个点作为图像分类区域的中心。

// Create an Earth Engine Point object over Milan.
var pt = ee.Geometry.Point([9.453, 45.424]);
// Filter the Landsat 8 collection and select the least cloudy image.
var landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(pt).filterDate('2019-01-01', '2020-01-01')
.sort('CLOUD_COVER').first();
// Center the map on that image.
Map.centerObject(landsat, 8);
// Add Landsat image to the map.
var visParams = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],
  min: 7000,
  max: 12000
};
Map.addLayer(landsat, visParams, 'Landsat 8 image');

 图2 Landsat图像

        我们将使用几何(geometry)工具,在 Landsat 图像上创建代表感兴趣的土地覆盖类别的点,以用作我们的训练数据。 我们需要做两件事:(1) 确定每个土地覆盖在地面上的位置,(2) 用正确的类别编号标记点。 对于本练习,我们将使用表 1 中给出的类和代码。

表1 土地覆盖类型

         在几何工具中,单击标记选项(图 3, 这将创建一个点几何图形,该几何图形将显示为名为“geometry”的导入。 单击齿轮图标可配置此导入。

图3  在Geometry Imports中创建一个新图层

        我们将从收集森林点开始,因此命名导入forest。 将其导入为 FeatureCollection,然后单击 + 属性。 将新属性命名为“class”并为其指定值 0(图 4)。 我们还可以选择一种颜色来代表这个类,对于森林类来说,自然选择绿色, 您可以通过单击选择您喜欢的颜色,或者为了进行更多控制,您可以使用十六进制值。

图4 编辑几何图层的属性

        十六进制值在整个数字世界中用于表示计算机和操作系统中的特定颜色,它们由分成三对的六个值指定,其中红色、绿色和蓝色亮度值各一对。 如果您不熟悉十六进制值,请想象一下,颜色是以 10 基数对而不是 16 基数对指定的,在这种情况下,明亮的纯红色值将是“990000”; 明亮的纯绿色值为“009900”; 明亮的纯蓝色值为“000099”。 像“501263”这样的值将是三种颜色的混合,不是特别明亮,蓝色和红色的数量大致相等,绿色的数量要少得多:一种带有紫色阴影的颜色。 要在十六进制系统中创建数字(如果人类进化到有 16 个手指,这可能会感觉完全自然),需要十六个“数字”:以 16 为基数的计数器表示 0、1、2、3、4、5、6、7、 8、9、A、B、C、D、E、F,然后是 10、11,依此类推。 考虑到该计数框架,数字“FF”就像以 10 为基数的“99”:最大的两位数。 本书中用于为“FeatureCollection”一词的字母着色的十六进制颜色是“7F1FA2”,这种颜色的蓝色和红色的数量大致相等,绿色的数量少得多。

        回到森林点的着色,十六进制值“589400”有点红色,大约是绿色的两倍,没有蓝色:深绿色如图4所示。 输入该值,前面带或不带“#”,完成配置后单击“确定”。

        现在,在几何导入中,我们将看到导入已重命名为forest。 单击它可激活绘图模式(图 5),以便开始收集森林点。

        现在,开始在森林地区收集点(图 6),根据需要放大和缩小, 您可以使用卫星底图来帮助您,但收集的基础应该是 Landsat 图像。 请记住,您收集的份数越多,分类器从您提供的信息中学到的信息就越多。 现在,让我们设定一个目标,每类获得25个样点,完成后单击“Point drawing”(图 5)旁边的“Exit”。

     通过创建新图层对其他类重复相同的过程(图 7)。不要忘记使用上面提到的 FeatureCollection 选项进行导入。 对于建设用地,在城市地区收集样点,对于水类,收集利古里亚海的点,并寻找其他水体,例如河流。 对于草本类,在农田上收集点, 请记住将每个类别的“class”属性设置为其相应的代码(参见表1),并在如上所述完成每个类别的收集点后单击“退出”。 我们将为其他类别使用以下十六进制颜色:#FF0000 表示建设用地,#1A11FF 表示水,#D0741E 表示草本。

图5 激活森林图层进行收集

图6 收集的森林点 

图7 几何导入中的新图层选项

        您现在应该有四个FeatureCollection 导入,分别命名为forest、development、water 和herbaceous(图8)。

图8 训练样点示例

        下一步是将所有训练特征集合合并为一个。 复制并粘贴下面的代码,将它们合并到一个名为trainingFeatures 的FeatureCollection 中。 在这里,我们使用 flatten 方法来避免拥有特征集合的集合 - 我们希望在特征集合中包含单独的特征。

// Combine training feature collections.
var trainingFeatures = ee.FeatureCollection([
forest, developed, water, herbaceous]).flatten();

       在组合的FeatureCollection中,每个Feature点都应该有一个名为“class”的属性。 类值是从 0 到 3 的连续整数(您可以通过打印训练特征并检查特征的属性来验证这是否正确)。

        现在我们有了训练点,复制并粘贴下面的代码以提取每个点位置处每个类别的波段信息。 首先,我们定义预测波段,以从每个类别的不同波段中提取不同的光谱和热信息。 然后,我们使用sampleRegions方法从Landsat图像中每个点位置的信息进行采样。 此方法需要有关特征集合(我们的参考点)、要提取的属性(“类”)和像素比例(以米为单位)的信息。

// Define prediction bands.
var predictionBands = [
'SR_B1', 'SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6','SR_B7','ST_B10'
];
// Sample training points.
var classifierTraining = landsat.select(predictionBands)
.sampleRegions({
    collection: trainingFeatures,
    properties: ['class'],
    scale: 30
});

        您可以通过打印并扩展第一个特征来检查 classifierTraining 对象是否提取了感兴趣的属性。 您应该会看到波段和类别信息(图 9)。 

        现在我们可以选择一个分类器, 分类器的选择并不总是显而易见的,并且有很多选项可供选择 - 您可以快速展开 Docs 下的 ee.Classifier 对象,以了解我们有多少种图像分类选项。 因此,我们将测试不同的分类器并比较它们的结果。 我们将从分类与回归树 (CART) 分类器开始,这是一种已经存在了数十年的著名分类算法(图10)。

图9 类0(森林)的一个点提取的波段信息示例

图 10 卫星图像分类决策树示例,值和类别是假设的 

        复制并粘贴以下代码以实例化 CART 分类器(ee.Classifier.smileCart) 并训练它。

 CART Classifier ///
// Train a CART Classifier.
var classifier = ee.Classifier.smileCart().train({
    features: classifierTraining,
    classProperty: 'class',
    inputProperties: predictionBands
});

        本质上,分类器包含将标签链接到光谱信息的数学规则。 如果打印变量分类器并展开其属性,则可以确认对象的基本特征(波段、属性和正在使用的分类器)。 如果打印classifier. explain,您可以找到一个名为“tree”的属性,其中包含决策规则。训练分类器后,复制并粘贴以下代码对Landsat图像进行分类并将其添加到地图中。 

// Classify the Landsat image.
var classified =landsat.select(predictionBands).classify(classifier);
// Define classification image visualization parameters.
var classificationVis = {
    min: 0,
    max: 3,
palette: ['589400', 'ff0000', '1a11ff', 'd0741e']
};
// Add the classified image to the map.
Map.addLayer(classified, classificationVis, 'CART classified');

        注意,在可视化参数中,我们定义了一个调色板参数,在本例中它表示每个像素值(0-3,我们的类代码)的颜色。我们使用为每个类创建训练点时使用的相同十六进制颜色。 这样,我们可以在地图中可视化分类图像时将颜色与类别相关联。检查结果:激活 Landsat 复合图层和卫星底图以与分类图像叠加(图 11)。 更改图层的透明度以检查某些区域。 你注意到了什么? 在某些领域,结果可能看起来不太令人满意(例如,建设用地和草地之间的混淆),您认为为什么会发生这种情况? 有一些选项可以处理错误分类错误:

 图11 CART分类

①收集更多的训练数据:我们可以尝试合并更多的点以获得更具代表性的类样本。
②调整模型:分类器通常具有设置为默认值的“超参数”。 例如,在分类树的情况下,有多种方法可以调整树中叶子的数量。
③尝试其他分类器:如果某个分类器的结果不令人满意,我们可以尝试Earth Engine 中的其他一些分类器,看看结果是否更好或不同。
④扩展收集位置:最好在整个图像上收集点,而不仅仅是集中在一个位置。 此外,寻找显示变异性的同一类别的像素(例如,对于建设用地类别,建筑物屋顶看起来与房屋屋顶不同;对于草本类别,农田显示出独特的季节性/物候)。
⑤添加更多预测变量:我们可以尝试向输入变量添加谱索引; 通过这种方式,我们可以向分类器提供有关每个类别的新的、独特的信息。 例如,专门用于检测植被健康状况的植被指数(例如 NDVI)很有可能改善发达的与草本植物的分类。

图12 随机森林的一般概念 

        现在,我们将尝试另一种广泛使用的监督学习分类器:随机森林(RF)。 RF 算法建立在决策树的概念之上,但添加了策略以使其更加强大。 它被称为“森林”,因为它通过构建大量决策树来运作(图 12)。 如前所述,决策树创建用于做出决策的规则。 随机森林将随机选择特征并进行观察,构建决策树森林,然后使用完整的树集来估计类别。 当您对训练数据没有太多了解时,这是一个很好的选择。复制并粘贴下面的代码来训练 RF 分类器 (ee.Classifier.smileRandomForest) 并将分类器应用到图像。 RF 算法需要构建树的数量作为其参数,我们将使用 50 棵树。

/// Random Forest Classifier
/
// Train RF classifier.
var RFclassifier =ee.Classifier.smileRandomForest(50).train({
features: classifierTraining,
classProperty: 'class',
inputProperties: predictionBands
});
// Classify Landsat image.
var RFclassified =landsat.select(predictionBands).classify(RFclassifier);
// Add classified image to the map.
Map.addLayer(RFclassified, classificationVis, 'RF classified');

        注意,在 ee.Classifier.smileRandomForest 文档中(文档选项卡),有一个种子(随机数)参数。 设置种子可以让您在每次运行模型时准确地复制模型。 任何数字都可以作为种子。检查结果(图 13)。 此分类图像与 CART 图像有何不同? 分类是好还是坏? 根据需要放大和缩小并更改图层的透明度。 在第 1 章中。 7、您将看到基于准确性指标的更系统的方法来评估更好或更差。

图13 随机森林算法分类结果 

【GEE里的完整代码链接】https://code.earthengine.google.com/b36ea0a98c587650289b4a56efc5d2a8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

boss app sig及sp参数,魔改base64(下)

本章所有样本及资料均上传123云盘,需要复刻的自行下载. boss官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 boss app sig及sp参数,魔改base64(上)_app 魔改base64-CSDN博客 上篇boss分析sig的地址在上面了,把这个sp分析完后再把响应解密分析完就可以对boss的招聘数据…

雷卯推荐电磁兼容保护器件-MOV压敏电阻

一.雷卯MOV产品表格部分展示 一.雷卯MOV产品表格部分展示 三、MOV概述 MOV是金属氧化物压敏电阻器(Metal Oxide Varistor)的缩写。它是一种电子元器件,通常用于保护电路中的电子设备不受过电压的损害。当电路中电压超…

SwiftUI中的边框、圆角、阴影与渐变色的应用

在SwiftUI中,可以使用边框、圆角、阴影和渐变色来增强视图的外观和风格。 边框: 可以通过在视图上应用边框样式来创建边框效果。使用border()修饰符,并指定边框的颜色、线条宽度和圆角半径,例如: Text("Hello, …

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024)

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024) 2024 International Conference on Algorithms, High Performance Computing and Artificial Intelligence 2024算法、高性能计算与人工智能国际学术会议(AH…

【千字总结】爬虫学习指南-2024最新版

介绍 如何自学爬虫?今天有一个兄弟这样问我,可以看到打了很多字,诚意肯定是很足的,也是对我的内容给予了肯定,让我非常的开心。既然难得有人问我,那我一定要好好做一个回答。 我下面将要说的内容没有任何话…

Unity 刚体组件的碰撞与触发器

添加刚体组件 给球体添加刚体组件,将脚本挂载到上面。 以下效果为:当球体落到平面上会消失。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {void Start(){}void Update(){}// 开…

基于遗传优化的协同过滤推荐算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 最后得到推荐的商品ID号: 推荐商品的ID号:ans 9838175822191114902149021235224732230712349911790154716550165501655011…

游泳耳机品牌排行榜前十名:10大口碑产品力荐!

在现代快节奏的生活中,游泳已经成为许多人放松身心、保持健康的重要方式。而伴随着游泳,一款优秀的游泳耳机则成为了许多游泳爱好者不可或缺的装备之一。它不仅能让你在游泳时享受音乐、广播或是专注训练,还能让整个游泳过程更加愉悦、充满动…

宠物的异味,用空气净化器可以解决吗?宠物空气净化器品牌推荐

养猫的人都了解,一个养猫家庭的环境卫生和气味问题与主人的关系密切相关。主人的勤劳程度和对卫生的重视程度直接影响着家中的气味。尽管主人通常会经常更换猫砂,但有时候仍然会存在一些难闻的气味。事实上,忙碌的猫主人可能会因为没有足够的…

总结zy_不定长数据帧的收发

1、接收部分 身份证模块串口接收解析: #define CRC_16_CCITT 0x1021 unsigned short CRC16_CCITT(unsigned char* pchMsg, unsigned short wDataLen) // 1. MSB { unsigned char i, chChar; unsigned short wCRC 0; while (wDataLen–) { chChar *pchMsg; wCRC ^…

符号函数Sign(博途PLC SCL代码)

符号函数在ADRC自抗扰算法里会有涉及,同时在滑膜控制里也会用到,这篇博客我们介绍符号函数在博途PLC里的实现。 1、ADRC自抗扰算法: https://rxxw-control.blog.csdn.net/article/details/126547180https://rxxw-control.blog.csdn.net/article/details/1265471802、模拟量…

虚拟机内存不够用了?全流程操作Look一下?

虚拟机信息:操作系统:CentOS Linux 7 (Core),用的是VMware Workstation 16 Pro 版本16.2.3 build-19376536;我的主机 Windows 10 Education, 64-bit (Build 22000.1817) 10.0.22000 前言:虚拟机用久了就会出现内存不足…

Java知识点总结(二)

ID生成策略 主键自增id 主键自动增长,不用手工设值、数字型,占用空间小、检索非常有利、有顺序,不会重复,但在迁移旧数据是会出现id冲突 UUID 基于时间,计数器和地址生成32位的id redis生成id 原子性自增,并…

Python 关于函数的使用

一、学习目标 1.掌握函数定义和调用。 2.掌握函数形参与实参的使用。 3.熟练掌握lambda表达式使用。 二、相关练习 1.建立自定义函数实现计算圆的面积和球的体积。 def Count(radius):area 3.14*radius**2volume (4/3)*3.14*radius*…

C 判断

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。 下面…

C语言快速入门之指针详解

一.指针基础 1.指针定义的理解 就像我们住房子划分房间一样,在系统中,内存会被划分为多个内存单元,一个内存单元大小是一个字节,我们在搜索房间时有门牌号,与之类似,每个内存单元都会有一个编号 地址 指…

UCSF DOCK 分子对接详细案例(05)- 遗传算法用于分子生成 DOCK_GA

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、软件及操作环境二、遗传算法三、结构文件准备四、 DOCK_GA4.1 Fragment Library Generation4.2 运行 GA没有RDKit编译的情况RDKit编译的情况在服务器上运行 总结参考资料 前言 本文是UCSF DOC…

能源大数据采集,为您提供专业数据采集服务

随着经济的不断发展,能源产业也逐渐成为国民经济的支柱产业之一。而对于能源行业来说,数据采集是一项至关重要的工作。以往,能源企业采集数据主要依靠人工收集、整理,但是这种方式不仅效率低下,而且容易出现数据不准确…

Spring——Bean的作用域

bean的作用域 Bean Scope Scope说明singleton(默认情况下)为每个Spring IoC容器将单个Bean定义的Scope扩大到单个对象实例。prototype将单个Bean定义的Scope扩大到任何数量的对象实例。session将单个Bean定义的Scope扩大到一个HTTP Session 的生命周期…

Python 面向对象编程——类的使用

一、学习目标 1.掌握类的定义和实例化对象。 2.熟练掌握类的构造函数__init__使用。 3.掌握类的继承机制和使用。 二、相关练习 1、定义一个玩具类Toy(),创建名字为“小汽车”、“手枪”和“积木”的玩具实例,计…