GEE必须会教程—栅格影像数据的处理

今天继续GEE的学习,我们依然看到影像数据的处理,今天将涉及到的函数命令时栅格掩膜、栅格裁剪、栅格的波段选择创建、栅格的波段添加、栅格重投影以及栅格的色彩转换。

A.栅格掩膜

掩膜的意思就是以其中一个为边界范围,将边界范围内覆盖的数据保留,而将边界外的数据都赋值为0进行去除的过程,效果类似于ArcGIS里面的掩膜提取工具,此处我们以DEM的掩膜为例:

//栅格的掩膜分析
var DEM = ee.Image("CGIAR/SRTM90_V4");
var LandCover = ee.Image("ESA/GLOBCOVER_L4_200901_200912_V2_3").select("landcover").eq(14);
var Mask = DEM.mask(LandCover);
print("DEM:",DEM,"LandCover:",LandCover,"Mak:",Mask);
Map.setCenter(100,30);
var palettes = require('users/gena/packages:palettes');
Map.addLayer(DEM,{"opacity":1,"bands":["elevation"],min:0,max:8000,palette:palettes.colorbrewer.RdYlGn[11].reverse()},"DEM");
Map.addLayer(LandCover,{"opacity":1,"bands":["landcover"],"palette":["FFFFFF","FF0000"]},"landCover");
Map.addLayer(Mask,{"opacity":1,"bands":["elevation"],min:0,max:8000,"palette":["0D33FF","FF0000"]},"Mask");

DEM数据用到的是NASA提供的CGIAR数据,分辨率是90m,掩膜的提取数据采用ESA提供的全球土地覆盖数据,该数据波段下的不同值代表不同的土地利用覆盖类别,代码中我们选择值为14,代指“Rainfed croplands”即雨养农田,从图中我们可以看出大部分地区的农业发展都极大依赖于雨水灌溉的进行,使用DEM.Mask(landcover)便能够提取雨养农田覆盖区域的DEM数据,结果如下所示:

上为雨养农田的土地覆盖分布,右为DEM,在地图上点击,得到的结果为:

B.栅格裁剪

利用边界范围对影像数据进行裁剪,这个与掩膜提取得到结果类似,但原理不同,我们还是要稍作区别。

//栅格裁剪
var DEM1 = ee.Image("USGS/SRTMGL1_003");
var Jiangxi = ee.FeatureCollection("users/hesuixinya511/Province").filterBounds(ee.Geometry.Point([115.08,26.48]));
var JXDEM = DEM.clip(Jiangxi);
Map.addLayer(JXDEM,{min:0,max:2000,"bands":["elevation"],palette:palettes.colorbrewer.RdYlGn[10].reverse()},"JXDEM");

DEM数据采用USGS和NASA联合提供的数据,边界范围是小编自主上传的矢量数据,利用点进行空间过滤,使用clip方法即可裁剪,结果将得到江西省内的DEM。

C.栅格波段选择创建

由于卫星传感器的发展,栅格影像数据一般是多波段数据,每一个波段单独存储信息,用户在实际环境中并不需要全部的数据,需要的只是其中1到2个波段的数据,而利用select方法,就能够选择想要的波段来进行显示。这里我们举个例子,Copernicus提供的土地覆盖数据有多个波段(下图显示了一部分),我们想把离散化分类和树木覆盖率单独提取出来,代码上应该如何实现?

//栅格波段选择创建
var collection = ee.Image('COPERNICUS/Landcover/100m/Proba-V-C3/Global');
var cover = collection.select("discrete_classification");
var tree = collection.select("tree-coverfraction");
Map.addLayer(cover,{},"cover");
Map.addLayer(tree,{palette:palettes.colorbrewer.YlGn[9]},"tree");

先调用数据集,再利用select选择想要波段,再进行可视化操作即可,是不是很简单呢!接下来欣赏一下华丽结果!!

D.波段裁剪

波段的裁剪就是保留想要的波段,去除不想要的波段,一般使用slice,波段切片,结果将返回一个保留切片波段的影像。

//栅格的波段裁取创建
var L9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var L9Image = ee.Image(L9.filterBounds(ee.Geometry.Point(115.83,28.66)).first());
var L9Image1 = L9Image.slice(1,4);
print("L9Image",L9Image,"L9Image1",L9Image1);

此处使用最新的L9举例,L9有多个波段,通过slice,我们保留波段索引号为1到3,注意slice末尾虽然写的是4,但是到4的前一个就停止了,我们可以看成是slice[1,4),用数学上的开合闭来理解,因为索引是从0开始的,那么1代表B2,因此,这里得到了一个包含L9的B2,B3,B4,即蓝,绿,红波段的影像,我们看看影像打印信息确认一下。

E.波段添加

波段添加利用addBands可以往影像数据中添加新的波段信息,我们举个例子:

//栅格的波段添加
var L9a = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var L9Imagea1 = ee.Image(L9.filterBounds(ee.Geometry.Point(115.83,28.66)).first());
var Band1 = L9Imagea1.select("QA_PIXEL");
var Band2 = L9Imagea1.select("QA_RADSAT");
var BandImage = Band1.addBands(Band2);
print("BandImage:",BandImage);

此处利用select得到Band1和Band2两张单波段影像,再利用addBands将“QA_RADSAT”波段添加到Bands中,形成一张双波段影像,结果如下:

F.栅格重投影

为了保证栅格影像的投影坐标一致性,投影的使用显得重要。栅格投影选用的是.reproject,注意,矢量数据的重投影是.transform,两个工具不要混用了。

//栅格重投影
var rawL9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var rawImageL9 = ee.Image(L9.filterBounds(ee.Geometry.Point(121.65,31.59)).first());
var Reproject = rawImageL9.reproject("EPSG:3857",null,100);
print("Raw:",rawImageL9.projection,"Reproject:",Reproject.projection());
Map.addLayer(rawImageL9,{ min: 0.0, max: 0.4,"bands":["B4","B3","B2"]},"Raw");
Map.addLayer(Reproject,{ min: 0.0, max: 0.4,"bands":["B4","B3","B2"]},"Reproject");

此处利用投影,将栅格影像投影成代号为3857坐标系,并且制定投影的分辨率是100m,投影前和投影后结果对比如下:

从结果上看,影像的分辨率确实发生了改变,放大之后,第二张图的马赛克感来了。

G.影像的颜色转变

最后我们来看一下影像的颜色转换,由于颜色的方案有多种,RGB,HSV等,栅格影像之间如何进行颜色的转换,我们一起来看看:

//栅格的色彩转换
var color = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var color1 = ee.Image(L9.filterBounds(ee.Geometry.Point(120.34,36.08)).first().slice(1,4).unitScale(0,32468));
var colorHSV = color1.rgbToHsv();
var colorRGB = colorHSV.hsvToRgb();
print("color1:",color1,"colorHSV",colorHSV,"colorRGB",colorRGB);
Map.addLayer(color,{},"Origin");
Map.addLayer(colorHSV,{},"HSV");
Map.addLayer(colorRGB,{},"RAW");

此处我们主要是将原始RGB影像转为HSV影像,而后又转回RGB影像,使用的颜色转换工具为rgbToHSV和hsvToRgb,得到的结果如下:

关于今天的分享到这里就结束了,如果对你的学习有帮助,不要忘记了给小编点赞哦。谢谢支持!

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

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

相关文章

3_相机模型

相机标定对于联系相机测量和真实三维世界测量也很重要。它的重要性在于场景不仅仅是三维的,也是物理单位度量的空间。因此,确定相机的自然单位(像素)与物理单位(如mm)的关系是三维场景重构的重要部分。相机标定的过程既给出相机的几何模型又给出透镜的畸…

typescript 的常用方式

文章目录 前言一、绑定props 默认值的方式:withDefaults1.vue2 的props设置默认值2.vue3 的props设置默认值(1) 不设置默认值的写法(2) 设置默认值的写法(分离模式)(3) 设置默认值的写法(组合模式) 二、定义一个二维数…

Java数据结构之ArrayList与顺序表

一.线性表 什么是线性表,字面意思,就是可以连成一条线的表,这里的线可以是物理上的一条线,也可以是逻辑上的一条线 物理上的一条线就是类似于数组,即它在内存上是有一块连续的空间,叫做顺序表&#xff0c…

python 中常用的热门库介绍

阅读本文之前请参阅-----如何系统的自学python Python 是一种非常流行的编程语言,它的一个主要优势是拥有一个庞大的生态系统,其中包括许多强大的库。这些库为各种任务提供了解决方案,从数据分析到机器学习,从网络爬虫到图像处理。…

面试数据库篇(mysql)- 02定位慢查询和分析

定位慢查询 聚合查询多表查询表数据量过大查询深度分页查询表象:页面加载过慢、接口压测响应时间过长(超过1s) 方案一:开源工具 调试工具:Arthas 运维工具:Prometheus 、Skywalking 方案二:MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_tim…

openstack常用查看命令

1.查看所有虚拟机 nova list2.列举某个虚拟机的详细信息 nova show ID3.获取所有服务列表 nova service-list4.查看镜像列表 glance image-list5.查看虚拟机规格信息 nova flavor-list6.查看网络信息 neutron net-list7.查看虚拟机网卡信息 nova interface-list8.查看vnc…

TCP的三次握手和四次挥手 | 查看网络状态

三次握手和四次挥手是在计算机网络中用于建立和终止TCP连接的协议。这两个过程是TCP协议的重要组成部分,确保数据的可靠传输。 三次握手指的是在客户端和服务器之间建立连接时的步骤。具体流程如下: 客户端向服务器发送一个连接请求报文段(…

Promise 介绍与基本使用 - 学习笔记

Promise 介绍与基本使用 1、 Promise 是什么?2、创建 Promise 实例对象3、Promise 实例方法4、Promise 的基本工作流程5、实例方法6、静态方法7、async 和 await7.1、关键字7.2、实例7.3、区别7.4、为什么使用 async/await 比较好? 1、 Promise 是什么&a…

【EI会议征稿通知】2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024)

2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024) 2024 3rd International Conference on Biomedical and Intelligent Systems (IC-BIS 2024) 2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024) 将于2024年4月…

皇冠测评:网络电视盒子哪个品牌好?电视盒子排行榜

欢迎各位来到我们的测评频道,本期我们要分享的产品是电视盒子,因很多网友留言不知道网络电视盒子哪个品牌好,我们通过为期一个月的测评后整理了电视盒子排行榜,想买电视盒子的可以看看下面这五款产品,它们各方面表现非…

CSS_实现三角形和聊天气泡框

如何用css画出一个三角形 1、第一步 写一个正常的盒子模型&#xff0c;先给个正方形的div&#xff0c;便于观察&#xff0c;给div设置宽高和背景颜色 <body><div class"box"></div> </body> <style>.box {width: 100px;height: 100px…

如何使用Windows系统电脑无公网ip远程桌面Ubuntu系统

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇&#xff0c;第三篇笔记请见&#xff1a; 吴恩达机器学习全课程笔记第…

leetcode 重复的子字符串

前要推理 以abababab为例&#xff0c;这里最主要的就是根据相等前后缀进行推导 s [ 0123 ] 如 t【 0123 】 f 【01 23 】 后两个分别是前后缀&#xff0c;第一个是总的字符串&#xff0c;然后可以推导 //首先还是算出…

Fastadmin列表根据status或者固定条件来显示按钮的显示和隐藏

根据订单状态&#xff0c;显示“退款操作”按钮显示和隐藏 打开页面的js文件&#xff0c;在操作的这一列里面再加一个button按钮。也可以新起一列&#xff08;我在其他文章有写&#xff09;添加按钮。 row就是选中的这一些所有的数据。 {field: operate, title: __(Operate…

【c++】stack和queue模拟实现

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕stack和queue模拟 > 毒鸡汤&#xff1a;…

任务系统之API子任务

日常运维工作中有许多的任务要执行&#xff0c;例如项目发布/数据备份/定时巡检/证书更新/漏洞修复等等&#xff0c;大部分的任务都会有多个步骤共同完成&#xff0c;例如一个发布任务会有拉代码、编译、分发、通知等等步骤&#xff0c;而不同的任务可能还包含相同或相似的步骤…

web前端-html自定义列表

html 自定义列表 <!--有序列表 应用范围&#xff1a;试卷、问答--> <ol><li>Java</li><li>C</li><li>Python</li><li>C</li><li>VB</li> </ol><br><!--无序列表 应用范围&#xff1a…

【粉丝福利第一期】小 明

Q1 - 能否自我介绍下&#xff1f; 嗨&#xff0c;大家好&#xff0c;我是 小 明 &#xff08;小明java问道之路&#xff09;&#xff0c;互联网大厂后端研发专家&#xff0c;2022博客之星TOP3/博客专家/CSDN后端内容合伙人、InfoQ(极客时间)签约作者、阿里云签约博主、全网5万…

Apache Paimon Append Queue表解析

a) 定义 在此模式下&#xff0c;将append table视为由bucket分隔的queue。 同一bucket中的每条record都是严格排序的&#xff0c;流式读取将完全按照写入顺序将record传输到下游。 使用此模式&#xff0c;无需特殊配置&#xff0c;所有数据都将作为queue进入一个bucket&…