【GEE】基于GEE进行非监督学习

1 简介与摘要

之前写了多季节叠加的监督学习,所以这次简单写一个非监督学习吧。。
这次为了简单明了,就不整那么多虚的了,在这里我不叠图层了,有需要的可以参考前一篇博客自己添加输入的图层。

2 制作输入影像

首先,同样的我们需要制作一个自带n个图层(波段)的影像。
我们需要先根据我们所选的卫星数据先放一个云掩膜函数。本例中我使用的是sentinel2影像(10m分辨率),所以我先放一个他的云掩膜函数在上面:

function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}

然后,我们开始筛选我们需要的影像。时间段是start到end之间(这个参数需要自填),筛选云量在20%以下的影像再进行云掩膜:

var s2 = ee.ImageCollection('COPERNICUS/S2_SR');var img = ee.Image(s2.filterBounds(roi).filterDate(start, end).filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20)).map(maskS2clouds).mean().clip(roi));

然后开始选我们需要的波段,叠成一个新的影像。我写这个例子的时候懒得算指数了,如果要叠出花样了可以参考我上一篇博客计算各种指数叠波段的方法。下面我简单地把哨兵自带的1-9波段放进去:

var image = img.select('B2');
var image = image.addBands([img.select('B3'), img.select('B4'), img.select('B5'),img.select('B6'), img.select('B7'), img.select('B8'),img.select('B9')]);

然后得到的这个image就是我们要扔进去非监督学习的输入影像了。

3 非监督学习

我们有了影像,我们要在影像的范围内生成采样点,这样机器才知道要自己学什么。范围是roi,尺度是scale(本例中为10),numpixels是生成的个数:

// sampling
var training = image.sample({region: roi,scale: scale,numPixels: numpixels
});

采样完开始选择方法。方法选我比较喜欢的wekaKMeans,里面填的classes是期望划分的类别数,training是刚才采的样,result是非监督分类完的图:

// select method
var clusterer = ee.Clusterer.wekaKMeans(classes).train(training);var result = image.cluster(clusterer);

如果想要使用其他非监督分类方法可以在GEE代码界面左上角的docs检索,或者参考这篇博客:google earth engine(GEE)进行非监督分类

4 影像的显示与结果

最后我们用几行代码让结果显示在在地图上:

Map.centerObject(roi, 11);
Map.addLayer(image.clip(roi), {bands: ["B4", "B3", "B2"], min:0, max:0.25}, "raw_img");
Map.addLayer(result.randomVisualizer(), {}, 'clusters')

下面是我用真彩色合成的影像:
在这里插入图片描述

下图是分类结果:
在这里插入图片描述

然后设置一下cluster这个图层,给他调一下色:
在这里插入图片描述

通过inspector我们可以查询cluster的值,然后和合成的真彩色进行对比,然后调色。比如我们点一下点发现原来深绿色这类是海冰,然后它在cluster的值是1,所以我们设置第二个色块palette为海冰的颜色(0是第一个色块,1是第二个,依此类推)(记得把上面range也调一下,比如我这里分五类那就是0-5):
在这里插入图片描述

上图0是积雪(白)、1是海冰(灰)、2是海洋(蓝)、3是植被(绿)、4是裸地(褐)。

5 本例完整代码

本例使用sentinel2影像,对2020年11月1日到2021年3月1日海参崴地区的影像进行合成与非监督分类(5类)。代码的参数写在最前面,可以根据需要自行调整。

var classes = 5;
var scale = 10;
var numpixels = 5000;
var start = '2020-11-01'
var end = '2021-03-31'function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}// select images
var s2 = ee.ImageCollection('COPERNICUS/S2_SR');var img = ee.Image(s2.filterBounds(roi).filterDate(start, end).filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20)).map(maskS2clouds).mean().clip(roi));var image = img.select('B2');
var image = image.addBands([img.select('B3'), img.select('B4'), img.select('B5'),img.select('B6'), img.select('B7'), img.select('B8'),img.select('B9')]);                          // sampling
var training = image.sample({region: roi,scale: scale,numPixels: numpixels
});// select method
var clusterer = ee.Clusterer.wekaKMeans(classes).train(training);var result = image.cluster(clusterer);Map.centerObject(roi, 11);
Map.addLayer(image.clip(roi), {bands: ["B4", "B3", "B2"], min:0, max:0.25}, "raw_img");
Map.addLayer(result.randomVisualizer(), {}, 'clusters')

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

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

相关文章

97.qt qml-自定义Table之实现ctrl与shift多选

我们之前实现了:93.qt qml-自定义Table优化(新增:水平拖拽/缩放自适应/选择使能/自定义委托)-CSDN博客 实现选择使能的时候,我们只能一行行去点击选中,非常麻烦,所以本章我们实现ctrl多选与shift多选、 所以在Table控件新增两个属性: 1.实现介绍 ctrl多选实现原理:当我…

模块化Common JS 和 ES Module

目录 历程 1.几个函数&#xff1a;全局变量的污染&#xff0c;模块间没有联系 2.对象&#xff1a;暴露成员&#xff0c;外部可修改 3.立即执行函数&#xff1a;闭包实现模块私有作用域 common JS module和Module 过程 模块依赖&#xff1a;深度优先遍历、父 -> 子 -…

springboot(ssm邮件过滤系统 在线邮箱平台Java(codeLW)

springboot(ssm邮件过滤系统 在线邮箱平台Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09…

uni-app:前端实现心跳机制(全局)+局部页面控制心跳暂停和重新心跳

一、App.vue全局中写入心跳 在data中定义变量heartbeatTimer&#xff0c;便于暂停心跳使用在onLaunch中引用开始心跳的方法startHeartbeat()写入开始心跳方法写入暂停心跳方法写入请求后端刷心跳机制 定义变量 // 在全局设置的心跳机制中添加一个变量来保存定时器的标识 data(…

035、目标检测-物体和数据集

之——物体检测和数据集 目录 之——物体检测和数据集 杂谈 正文 1.目标检测 2.目标检测数据集 3.目标检测和边界框 4.目标检测数据集示例 杂谈 目标检测是计算机视觉中应用最为广泛的&#xff0c;之前所研究的图片分类等都需要基于目标检测完成。 在图像分类任务中&am…

html在线生成二维码(附源码)

文章目录 1.设计来源1.1 主界面1.2 美化功能 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134458927 html二维码生成&#xff08;附源码&#xff09;&#xff0c;生成二…

2023年中国农业机器人行业市场规模及发展趋势分析[图]

农业机器人是一种机器&#xff0c;是机器人在农业生产中的运用&#xff0c;是一种可由不同程序软件控制&#xff0c;以适应各种作业,能感觉并适应作物种类或环境变化&#xff0c;有检测(如视觉等)和演算等人工智能的新一代无人自动操作机械。 农业机器人分类 资料来源&#xf…

Redux-状态管理组件

一、简介 react中的状态只属于某个组件。而Redux是一个全局管理js状态的架构&#xff0c;让组件通信更加容易。 之前是状态在所有组件间传递&#xff0c;而redux通过store来实现这个功能。 Redux特性&#xff1a; 1.Single source Of truth&#xff0c;通过store唯一维护状态…

JDBC编程

1. JDBC 简介 1.1 JDBC概述 : JDBC : Java DataBase Connectivity&#xff0c;是Sun公司制定的Java程序连接和操纵数据库的一组应用接口标准 1.2 JDBC 编程步骤 (1) 引入 java.sql 包的所有类及接口。 (2) 加载相应数据库的JDBC驱动程序。不同数据库系统的JDBC驱动程序不同&…

多视图聚类的论文阅读(一)

当聚类的方式使用的是某一类预定义好的相似性度量时&#xff0c; 会出现如下情况&#xff1a; 数据聚类方面取得了成功&#xff0c;但它们通常依赖于预定义的相似性度量&#xff0c;而这些度量受原始方法的影响:当输入维数相对较高时&#xff0c;往往是无效的。 1. Deep Mult…

python爬取快手视频

原理 F12点击graphql能够看到里面有若干视频信息,一会儿要取其中的url地址 右键复制cURL 然后进入到这个转换器连接 https://curlconverter.com/python/ 点击这个连接复制上述信息,然后就能解析处下面的代码,拷贝到你的项目中替换cookies,headers,json_data 源代码 …

使用 Hugging Face Transformer 微调 BERT

微调 BERT有助于将其语言理解能力扩展到更新的文本领域。BERT 的与众不同之处在于它能够掌握句子的上下文关系,理解每个单词相对于其邻居的含义。我们将使用 Hugging Face Transformers 训练 BERT,还将教 BERT 分析 Arxiv 的摘要并将其分类为 11 个类别之一。 为什么微调 BER…

[和ChatGPT学编程]Python Requests 简介

requests 是一个流行的 Python 库&#xff0c;用于发送 HTTP 请求。它提供了简洁而友好的 API&#xff0c;使得发送 HTTP 请求变得简单而直观。requests 具有许多强大的功能&#xff0c;适用于各种 HTTP 请求场景&#xff0c;包括 GET、POST、PUT、DELETE 等。 目录 requests 库…

【Django-DRF用法】多年积累md笔记,第3篇:Django-DRF的序列化和反序列化详解

本文从分析现在流行的前后端分离Web应用模式说起&#xff0c;然后介绍如何设计REST API&#xff0c;通过使用Django来实现一个REST API为例&#xff0c;明确后端开发REST API要做的最核心工作&#xff0c;然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…

Docker Swarm: 容器编排的力量和优势深度解析

文章目录 Docker Swarm的核心概念1. 节点&#xff08;Node&#xff09;2. 服务&#xff08;Service&#xff09;3. 栈&#xff08;Stack&#xff09; 使用Docker Swarm1. 初始化Swarm2. 加入节点3. 创建服务4. 扩展和缩减服务5. 管理栈6. 管理服务更新 Docker Swarm的优势深度解…

shadow复习之planar shadow

planar shadow 通常来说 shadow都是画一个map 这个map有个很大的问题&#xff0c;那就是size有问题 你希望有很高的精度&#xff0c;就必定要用大size的图片&#xff0c;这显然是不太妙的 那么这里就出现一个取巧的法子&#xff0c;如果你只考虑投影到平面上&#xff0c;光源是…

分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测

分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测 目录 分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测&#xff08;完整源码和数据) 2.多…

C#中的DateTime类

C# 中的 DateTime 类是用于表示日期和时间的结构。它提供了一系列属性和方法&#xff0c;用于处理日期和时间的各种操作和计算。下面是一些常用的 DateTime 类的用法和方法解释&#xff0c;以及相应的示例说明&#xff1a; 创建 DateTime 对象&#xff1a; 使用当前日期和时间创…

Kubernetes学习-概念2

参考&#xff1a;关于 cgroup v2 | Kubernetes 关于 cgroup v2 在 Linux 上&#xff0c;控制组约束分配给进程的资源。 kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源&#xff0c; 这包括为容器化工作负载配置 CPU/内存请求和限制。 Linux 中…

概念理论类: TCP/IP、Http、Socket之间的区别

转载&#xff1a;百度安全验证 一、TCP/IP 1. 定义 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;是一组用于互联网的通信协议&#xff0c;由美国国防部高级研究计划署&#xff08;ARPA&#xff09;在20世纪70年代开发&#xff0c;被广泛…