GEE入门篇|图像处理(二):在Earth Engine中进行波段计算

目录

波段计算

1.NDVI的计算

[2.NDVI 归一化差值的单次运算计算](#2.NDVI 归一化差值的单次运算计算)

[3.使用 NDWI 的归一化差值](#3.使用 NDWI 的归一化差值)


波段计算

许多指数可以使用 Earth Engine 中的波段运算来计算。 波段运算是对图像中两个或多个波段进行加、减、乘或除的过程。 在这里,我们将首先手动执行此操作,然后向您展示一些在 Earth Engine 中执行波段运算的更有效方法。

1.NDVI的计算

由于植被在这些波长下的高反射率,红色和近红外波段提供了大量有关植被的信息。 看一下图 1,特别注意植被曲线(以绿色表示)在 NIR 范围(大约 750-900 nm)内具有相对较高的反射率。 另请注意,植被在红色范围(约 630-690 nm)的反射率较低,此时阳光被叶绿素吸收。 这表明,如果可以将红光和近红外波段结合起来,它们将提供有关植被的大量信息。 1972 年 Landsat 1 发射后不久,分析人员致力于设计一个强大的单一值,以传达沿线植被的健康状况。 比例为 -1 到 1。使用以下公式得出 NDVI:

其中 NIR 和red指的是这两个波段各自的亮度, 该亮度可以用反射率、辐射率或数字量化值(DN) 等单位来表示; NDVI 旨在在使用这些波长的平台上提供几乎相同的值。 该方程的一般形式称为"归一化差值",分子是"差值",分母是"归一化"值。 NDVI 的输出在 -1 和 1 之间变化,大量绿色植被的值约为 0.8--0.9, 没有绿叶的值接近 0,水的值接近 -1。

图1 地球表面不同物体在电磁波谱的可见光和红外部分不同波长下的反射量图;1微米(μm)=1000纳米(nm)

为了计算NDVI,我们将介绍Earth Engine的波段运算实现。 基于云的波段计算是 Earth Engine 最强大的方面之一,因为该平台的计算机针对这种类型的繁重处理进行了优化。 即使在行星尺度上,波段的计算也可以非常快地完成------这个想法在基于云的遥感出现之前是遥不可及的。 Earth Engine 根据需要自动在大量计算机之间进行计算分区,并组合结果进行显示。

作为示例,让我们检查旧金山的图像(图 2)。

javascript 复制代码
/
// Band Arithmetic
/
// Calculate NDVI using Sentinel 2
// Import and filter imagery by location and date.
var sfoPoint = ee.Geometry.Point(-122.3774, 37.6194);
var sfoImage = ee.ImageCollection('COPERNICUS/S2')
.filterBounds(sfoPoint).filterDate('2020-02-01', '2020-04-01').first();
// Display the image as a false color composite.
Map.centerObject(sfoImage, 11);
Map.addLayer(sfoImage, {
    bands: ['B8', 'B4', 'B3'],
    min: 0,
    max: 2000
}, 'False color');

图2 旧金山及周边地区的假彩色 Sentinel-2 图像

Earth Engine 中最简单的数学运算是加法、减法、乘法和除法。 让我们选择近红外和红光波段,并使用这些操作来计算图像的 NDVI。

javascript 复制代码
// Extract the near infrared and red bands.
var nir = sfoImage.select('B8');
var red = sfoImage.select('B4');
// Calculate the numerator and the denominator using subtraction and addition respectively.
var numerator = nir.subtract(red);
var denominator = nir.add(red);
// Now calculate NDVI.
var ndvi = numerator.divide(denominator);
// Add the layer to our map with a palette.
var vegPalette = ['red', 'white', 'green'];
Map.addLayer(ndvi, {
    min: -1,
    max: 1,
    palette: vegPalette
}, 'NDVI Manual');

检查生成的索引,如果需要,使用检查器挑选出植被和非植被区域的像素值(图 3)。使用这些简单的算术工具,您可以构建几乎任何索引或开发和可视化您自己的索引。 Earth Engine 允许您快速、轻松地计算和显示大范围内的指数。

图3 使用 Sentinel-2 计算的 NDVI,请记住,NDVI 的输出在− 1 和 1 之间变化,大量绿色植被的值约为 0.8--0.9, 没有绿叶时的值接近 0,而有水时的值接近 − 1

2.NDVI 归一化差值的单次运算计算

像 NDVI 这样的归一化差异在遥感中非常常见,因此 Earth Engine 提供了使用归一化差异方法在单个步骤中执行特定序列的减法、加法和除法的能力。 此方法采用输入图像以及您指定的波段,并创建这两个波段的标准化差异。 之前使用波段算法创建的 NDVI 计算可以用一行代码替换:

javascript 复制代码
// Now use the built-in normalizedDifference function to achieve the same outcome.
var ndviND = sfoImage.normalizedDifference(['B8', 'B4']);
Map.addLayer(ndviND, {
    min: -1,
    max: 1,
    palette: vegPalette
}, 'NDVI normalizedDiff');

请注意,向 normalizedDifference 提供两个波段的顺序很重要。 我们使用近红外波段 B8 作为第一个参数,使用红波段 B4 作为第二个参数。 如果您的两次 NDVI 计算在绘制到屏幕上时看起来不相同,请检查以确保 NIR 和红色波段的顺序正确。

3.使用 NDWI 的归一化差值

如前所述,归一化差异法用于许多不同的指数。 让我们将相同的归一化差异方法应用于另一个指数。归一化差异水分指数(NDWI)是由Gao(1996)开发的作为植被水分含量的指数。 该指数对植被冠层液体含量的变化敏感。 这意味着该指数可用于检测经历干旱条件的植被或区分作物

灌溉水位。 在干旱地区,灌溉作物可以与自然植被区分开来, 有时也称为归一化差异水分指数 (NDMI)。 NDWI 的公式如下:

其中 NIR 是近红外,中心在 860 nm (0.86 µm) 附近,SWIR 是短波红外,中心在1240 nm (1.24 µm) 附近。

使用归一化差异方法在 Earth Engine 中计算并显示 NDWI。 请记住,对于 Sentinel-2,B8 是 NIR 波段,B11 是 SWIR 波段。

javascript 复制代码
// Use normalizedDifference to calculate NDWI
var ndwi = sfoImage.normalizedDifference(['B8', 'B11']);
var waterPalette = ['white', 'blue'];
Map.addLayer(ndwi, {
    min: -0.5,
    max: 1,
    palette: waterPalette
}, 'NDWI');

检查到NDVI 识别为拥有大量植被的地图区域,注意哪些颜色更蓝, 这是含水量较高的植被(图 4)。

图4 Sentinel-2 在旧金山上空显示的 NDWI

相关推荐
古希腊掌管学习的神8 分钟前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
赵钰老师9 分钟前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言
就爱学编程17 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
wakangda28 分钟前
React Native 集成原生Android功能
javascript·react native·react.js
吃杠碰小鸡31 分钟前
lodash常用函数
前端·javascript
Oneforlove_twoforjob40 分钟前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
emoji11111141 分钟前
前端对页面数据进行缓存
开发语言·前端·javascript
每天都要学信号1 小时前
Python(第一天)
开发语言·python
TENET信条1 小时前
day53 第十一章:图论part04
开发语言·c#·图论
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js