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

相关推荐
海阔天空_20135 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑12 分钟前
php 使用qrcode制作二维码图片
开发语言·php
夜雨翦春韭16 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
小远yyds17 分钟前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
何曾参静谧30 分钟前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
阿伟来咯~1 小时前
记录学习react的一些内容
javascript·学习·react.js
吕彬-前端1 小时前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱1 小时前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
许野平1 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono