首页 > 其他分享 >GEE入门及进阶教程|使用表达式处理图像

GEE入门及进阶教程|使用表达式处理图像

时间:2024-03-22 22:00:14浏览次数:21  
标签:EVI 教程 divide 进阶 sfoImage GEE var select BAI

目录

1.EVI的算术计算

2.使用表达式计算 EVI

3.使用表达式计算 BAI


1.EVI的算术计算

        增强植被指数 (EVI) 旨在最大限度地减少 NDVI 的饱和度和其他问题,在叶绿素含量高的地区(例如雨林),EVI 不会像 NDVI 那样饱和(即达到最大值),从而更容易检查这些地区植被的变化。 计算 EVI 的广义方程为:

        其中 G、C1、C2 和 L 是常数。 我们不需要记住这些值,因为它们是由其他研究人员确定的,并且可以在线查找,对于 Sentinel-2,方程为 :

        使用基本算术,我们计算并显示 Sentinel-2 图像的 EVI,我们需要提取波段,然后除以 10,000 以考虑数据集中的缩放。 

// Import and filter imagery by location and date.
var sfoPoint = ee.Geometry.Point(106.39614 , 29.80574);
var sfoImage = ee.ImageCollection('COPERNICUS/S2')
                .filterBounds(sfoPoint)
                .filterDate('2020-02-01', '2020-04-01')
                .first();
Map.centerObject(sfoImage, 11);
// Calculate EVI using Sentinel 2
// Extract the bands and divide by 10,000 to account for scaling done.
var nirScaled = sfoImage.select('B8').divide(10000);
var redScaled = sfoImage.select('B4').divide(10000);
var blueScaled = sfoImage.select('B2').divide(10000);
// Calculate the numerator, note that order goes from left to right.
var numeratorEVI =(nirScaled.subtract(redScaled)).multiply(2.5);
// Calculate the denominator.
var denomClause1 = redScaled.multiply(6);
var denomClause2 = blueScaled.multiply(7.5);
var denominatorEVI = nirScaled.add(denomClause1).subtract(denomClause2).add(1);
// Calculate EVI and name it.
var EVI =numeratorEVI.divide(denominatorEVI).rename('EVI');
// And now map EVI using our vegetation palette.
var vegPalette = ['red', 'white', 'green'];
var visParams = {min: -1, max: 1, palette: vegPalette};
Map.addLayer(EVI, visParams, 'EVI');

图1 重庆市北碚区使用Sentinel-2计算 的 EVI 显示

2.使用表达式计算 EVI

        EVI 代码可以工作(图 1),但创建大量变量并显式调用加法、减法、乘法和除法可能会造成混乱,并可能导致错误。 在这些情况下,您可以创建一个函数以使步骤更加稳健且易于重复。 在下面概述的另一个简单策略中,Earth Engine 有一种方法来定义表达式来实现相同的结果。

// Calculate EVI.
var eviExpression = sfoImage.expression({
    expression: '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5* BLUE + 1))',
    map: { // Map between variables in the expression and images.
    'NIR': sfoImage.select('B8').divide(10000),
    'RED': sfoImage.select('B4').divide(10000),
    'BLUE': sfoImage.select('B2').divide(10000)
}
});
// And now map EVI using our vegetation palette.
Map.addLayer(eviExpression, visParams, 'EVI Expression');

         该表达式首先被定义为使用人类可读名称的字符串, 然后,我们通过选择适当的波段来定义这些名称。

3.使用表达式计算 BAI

        现在我们已经了解了表达式的工作原理,让我们使用表达式来计算另一个索引。 Martin(1998)开发了烧伤面积指数(BAI)来帮助描述烧伤痕迹和评估烧伤严重程度,它依靠火留下灰烬和木炭,不会产生灰烬或木炭的火灾以及灰烬和木炭已被冲走或覆盖的旧火将无法很好地检测到。 BAI 计算每个像素到燃烧区域往往相似的光谱参考点的光谱距离, 远离该参考的像素(例如,健康的植被)将具有非常小的值,而接近该参考的像素(例如,火中的木炭)将具有非常大的值。

        该方程中有两个常数:ρc r 是红光波段的常数,等于0.1; ρc nir 用于近红外波段,等于 0.06。
        要检查燃烧指数,请加载 2021年显示重庆北碚边缘火灾的图像,我们将使用 Landsat 8 来探索这场火灾,在新脚本中输入以下代码。

// Examine the true-color Landsat 8 images for the 2013 RimFire.
var burnImage =ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterBounds(ee.Geometry.Point(106.39614 , 29.80574))
.filterDate('2021-07-15', '2021-09-27')
.sort('CLOUD_COVER')
.first();
Map.centerObject(ee.Geometry.Point(106.39614 , 29.80574), 11);
var rgbParams = {
bands: ['B4', 'B3', 'B2'],
min: 0,
max: 0.3
};
Map.addLayer(burnImage, rgbParams, 'True-Color BurnImage');

图2 真彩色显示 

        检查该图像的真彩色显示。 你能发现火吗? 如果没有,BAI 可能会有所帮助。与 EVI 一样,使用上面的方程以及您对 Landsat 8 频段的了解,在 Earth Engine 中使用表达式来计算 BAI:

// Calculate BAI.
var bai = burnImage.expression(
'1.0 / ((0.1 - RED)**2 + (0.06 - NIR)**2)', {
'NIR': burnImage.select('B5'),
'RED': burnImage.select('B4'),
});

        显示结果: 

// Display the BAI image.
var burnPalette = ['green', 'blue', 'yellow', 'red'];
Map.addLayer(bai, {
min: 0,
max: 400,
palette: burnPalette
}, 'BAI');

 图3 BAI 边缘火

标签:EVI,教程,divide,进阶,sfoImage,GEE,var,select,BAI
From: https://blog.csdn.net/qq_46689623/article/details/136891401

相关文章

  • C#进阶篇
    ArrayList1、Arraylist本质上是一个可以自动扩容的object数组2、由于用万物之父来存储数据,自然存在装箱拆箱3、当往其中进行值类型存储时就是在装箱,当将值类型对象取出来转换使用时,就存在拆箱。4、所以ArrayList尽量少用,之后我们会学习更好的数据容器(泛型)。底层原理:底层......
  • 【恒源智享云】在云服务器上安装tensorflow_gpu教程
    在云服务器上安装tensorflow_gpu1.创建实例在恒源智享云中创建新的实例时,可以选择需要使用的框架,并且框架版本和cuda版本、python版本都是对应的:2.新建一个conda虚拟环境condacreate-ntensorflow_gpupython==3.8.0conda指令详见博客:【恒源智享云】conda虚拟环境......
  • postman进阶功能学习,别再简单的发请求了!
    1.Postman数据驱动  想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中,然后再通过Runner批量执行。这种方式适用于接口用例参数固定的情况下,但也存在另一个问题,如果每次运行时,接口参数都在变化,该如何操作了?  认真看过前面文章的童鞋可能已经猜......
  • pytest教程-18-内置fixture
    领取资料,咨询答疑,请➕wei: June__Go上一小节我们学习了pytest运行上次失败用例的方法,本小节我们讲解一下pytest几种内置fixture的使用方法。pytest的开发者在pytest中包含了一些常用的Fixture。pytest预包装的Fixture可以帮助你在测试中轻松而一致地做一些非常有用的事情。......
  • 【GIT】最好用的git可视化教程网站推荐
    最好用可视化学习git网站:https://learngitbranching.js.org/?demo=&locale=zh_CN玩遍所有关卡,花半天时间便能掌握git......
  • Vue和SpringBoot实现的通用商城系统,高质量毕业论文范例,附送源码、数据库脚本,项目导入
    1.项目技术栈前端必学三个基础:“HTML、CSS、JS”,基本每个B/S架构项目都要用到,基础中的基础。此外项目页面使用Vue等前端框架技术。后端使用Java主流的框架 SpringBoot,使用MySQL数据库,是一个JavaWEB进阶学习的好资源。2.适合对象Java初学者、Java课题设计、Java毕业设......
  • Redis的安装和部署教程(Windows环境)
    一、安装Redis服务1、下载Redis压缩包以下这个是我网盘里面的(这个是v8.0版本的,支持导入.rdb数据文件)链接:百度网盘请输入提取码提取码:x0f1--来自百度网盘超级会员V5的分享2、解压到文件夹将下载的压缩包解压到指定的文件夹中,如:D:\redis,内容如下:3、修改redis.conf......
  • 开窗函数进阶last_value特别地方
    有了开窗函数,让我们做统计方便很多。row_number(),sum,等常规用法,便不在这里讲。我们从一个问题开始withabcas(select1asidunionallselect2unionallselect3unionallselect4)selectid,FIRST_VALUE(id)over(orderbyid)asfirstid,LAST_VALUE(id)o......
  • 【教程】深入探究 JS代码混淆与加密技术
     ......
  • LRC软件、Adobe Lightroom Classic最新版破解安装下载合集教程
    AdobeLightroomClassic(简称LR)是AdobeCreativeCloud大家庭中的一款专业的图片管理和编辑工具,用于专业摄影师、摄影爱好者以及所有不断优化数码影像的人等。其目标是以丰富的功能提供高效、一致的体验,帮助用户汇聚、组织、管理、编辑和分享数码图片。AdobeLightroomClassi......