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

        在遥感中,图像分类是尝试将图像中的所有像素分类为有限数量的标记土地覆盖和/或土地利用类别。 生成的分类图像是从原始图像导出的简化专题图(图 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发,对于前端开发来说,究竟是福是祸呢?

提前声明: 先说好哈,不要一上来就开喷,好吧,不感兴趣的话你可以不用看下文直接划走,直接喷俺有点承受不住,心脏不好。如果你感兴趣,你可以先把这篇文章看完,看完后感觉俺讲的还挺有道…

堆和二叉树的动态实现(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

Linux - 基础IO

1、回顾 1.1、来段代码回顾C文件接口 hello.c写文件 #include <stdio.h> #include <string.h> int main() {FILE *fp fopen("myfile", "w");if(!fp){printf("fopen error!\n");}const char *msg "hello bit!\n";int …

xss.haozi.me:0x03及04

这里有一个正则所以&#xff08;&#xff09;要用到实体编码 <a href"javascript:alert1">cc</a> 03 04都一样

在线客服系统部署ssl开启https无法自动获取提示消息解决办法

▇ 增加https无法收发消息&#xff1a; 严格按照教程修改 1./站点目录/public目录下,修改index.php define(whost,wss://kf.tpym.cn); define(wport,443); 2./站点目录/service 目录下,修改config.php // websocket 端口&#xff0c;客服系统网页会连这个端口 $websocket_…

防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五

1. OceanBase为什么要做巡检功能 尽管OceanBase拥有很好的MySQL兼容性&#xff0c;但在长期的生产环境中&#xff0c;部署不符合标准规范、硬件支持异常&#xff0c;或配置项错误等问题&#xff0c;这些短期不会出现的问题&#xff0c;仍会对数据库集群构成潜在的巨大风险。为…

1999-2022年30省平均受教育年限(含原始数据和具体计算过程+计算结果)

1999-2022年30省平均受教育年限&#xff08;含原始数据和具体计算过程&#xff09; 1、时间&#xff1a;1999-2022年 2、范围&#xff1a;30省&#xff08;剔除西藏&#xff09; 3、计算方式&#xff1a;平均受教育年限&#xff08;未上学人数*0小学人数*6初中人数*9高中人数…

AI大模型的预训练、迁移和中间件编程

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

python.模块与包

1.模块是什么 本质上是一种python文件&#xff0c;以.py结尾&#xff0c;里面有类&#xff0c;函数&#xff0c;变量等&#xff0c;认为这是一个工具包&#xff0c;每个模块有不同的功能&#xff0c;导入后可以直接使用 2.模块的导入 方法1 import 模块名 使用&#xff1a…

展示模型展台的高度一般为多少---模大狮模型网

展示模型展台的高度一般取决于多个因素&#xff0c;包括展示物品的大小、展台的设计风格、展览场地的限制等。一般来说&#xff0c;展示模型展台的高度可以根据以下几点考虑&#xff1a; 展示物品的大小&#xff1a;如果展示物品比较大或需要竖立展示&#xff0c;展台的高度可能…

GraphGeo参文19:Auto-Encoding Variational Bayes

https://arxiv.org/abs/1312.6114 [19] Diederik P Kingma and Max Welling. 2014. Auto-encoding variational bayes. In ICLR. 【前言】:VAE模型是Kingma(也是Adam的作者)大神在2014年发表的文章,是一篇非常非常经典,且实现非常优雅的生成模型,同时它还为bayes概率图模型…

LVS负载均衡集群——NAT地址转换模式与DR直接路由

目录 一、LVS集群基本介绍 1、集群是什么&#xff1f; 2、集群的类型 ①负载均衡集群 ②高可用群集 ③高性能运算群集 3、负载均衡集群的结构 第一层&#xff0c;负载调度器 第二层&#xff0c;服务器池 第三层&#xff0c;共享存储 4、LVS负载均衡集群的三种工作模…

学习计算天数

学习计算天数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 输入y和m两个整数&#xff0c;y表示年份&#xff0c;m表示月份&#xff0c;计算y年m月有多少天&#xff0c;并输出天数。 测试1&#xff1a; 输⼊&…

Redis常见的15个【坑】,避坑指南

一、常见命令 1.1 过期时间意外丢失 原因&#xff1a; SET命令如果不设置过期时间&#xff0c;那么Redis会自动【擦除】这个key的过期时间 1.2 DEL命令阻塞redis key是String类型时&#xff0c;DEL时间复杂度是O(1)key是List/Hash/Set/ZSet类型&#xff0c;DEL时间复杂度是…

FRM模型十五:净值归因之Fama_French三因子模型

文章目录 一、起源二、构建因子三、投资组合的净值归因1. 市场因子2. 规模因子3.价值因子4. 基于净值的归因方法 三、代码实现 一、起源 在多因子模型推出之前&#xff0c;CAPM模型被视为资产定价的第一标准。随着市场不断发展&#xff0c;发现了越来越多CAPM模型无法解释的现…

Microsoft@ppt@快速掌握核心功能@常用功能培训

文章目录 refs动画动画的用途逐部分显示内容实现问答效果部分地修改页面内容动画效果 常用窗口对象选择窗口&#x1f47a;批量选择对象 如何为重叠的对象高效的命名重命名方式方案1方案2对象重命名原则重命名后如何使用tips 动画窗口&#x1f47a; 幻灯片管理幻灯片母版幻灯片母…

【软件测试】一个扫码支付的二维码怎么测(测试点分析)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试的时候&#…

VS统计代码行数

1.使用查找和替换方式 按CTRLSHIFTF (Find in files)&#xff0c;勾上支持正则表达式&#xff0c; 然后输入搜索内容&#xff1a;^:b*[^:b#/].*$ 如图所示&#xff1a; 2.查看查询结果 需要注意&#xff1a;#开头和/开头或者空行都不计入代码量。

javascript操作DOM的方法

目录 1. 弹出框 2. 定时器 3. 导航与URL 4. 浏览器信息 5. 窗口控制 6. 屏幕信息 7. 历史对象 1. 弹出框 警告框&#xff08;Alert&#xff09; window.alert(这是一个警告消息); 确认框&#xff08;Confirm&#xff09; var isConfirmed window.confirm(您确定要执…

【开源】SpringBoot框架开发用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…