【GEE笔记1】Landsat8/9的NDVI计算,并计算区域NDVI平均值

·  阅读 349
【GEE笔记1】Landsat8/9的NDVI计算,并计算区域NDVI平均值

NDVI简介

什么是NDVI

NDVI是归一化植被指数(Normalized Difference Vegetation Index, NDVI)

NDVI有什么用

  • 1、NDVI的应用:检测植被生长状态、植被覆盖度和消除部分辐射误差等;
  • 2、-1可见光高反射;0表示有岩石或裸土等,NIR和R近似相等;正值,表示有植被覆盖,且随覆盖度增大而增大;
  • 3、NDVI的局限性表现在,用非线性拉伸的方式增强了NIR和R的反射率的对比度。对于同一幅图象,分别求RVI和NDVI时会发现,RVI值增加的速度高于NDVI增加速度,即NDVI对高植被区具有较低的灵敏度;
  • 4、NDVI能反映出植物冠层的背景影响,如土壤、潮湿地面、雪、枯叶、粗糙度等,且与植被覆盖有关;

NDVI一般怎么计算

即(NIR-R)/(NIR+R) NIR为近红外波段的反射值 R为红光波段的反射值 英文缩写为 NDVI。归一化植被指数是反映农作物长势和营养信息的重要参数之一。根据该参数,可以知道不同季节的农作物对氮的需求量, 对合理施用氮肥具有重要的指导作用。 NDVI——归一化植被指数:NDVI=(NIR-R)/(NIR+R),或两个波段反射率的计算。

常见的卫星数据的NDVI计算公式:

Landsat8-9: NDVI = (band5 - band4) / (band5 + band4) 
# Landsat 8或称LDCM携带2个主要载荷: 运行陆地成像仪(Operational Land Imager, OLI) 和热红外传感器(Thermal Infrared Sensor, TIRS)。
# 以上公式也适用于Landsat9.

Sentinel-2: NDVI = (band8 - band4) / (band8 + band4)
Modis: NDVI = (band2 - band1) / (band2 + band1)
ETM/TM: NDVI = (band4 - band3) / (band4 + band3)
# Landsat或称ETM+,Landsat5或称TM

AVHRR: NDVI = (CH2 - CH1) / (CH2 + CH1)
复制代码

在GEE中计算Landsat8/9的NDVI

// 第一步,指定研究区的范围,可以直接ee.Geometry.Polygon然后写四至点的经纬度
var roi = ee.Geometry.Polygon([[
    [116.2589558694436,28.54241791617638]
	[116.2589558694436,28.87485297022366]
	[115.8634480569436,28.87485297022366]
	[115.8634480569436,28.54241791617638]
	]]);  
// 也可以自己画范围,然后引用自己的范围
var roi = ee.FeatureCollection(geometry); // 这行代码和上面的都是表示研究区范围的,具体使用如下图

Map.centerObject(roi, 8);  // 以roi为中心显示地图,缩放等级8
var image = ee.Image("LANDSAT/LC09/C02/T1_TOA/LC09_122040_20220506");  // 数据名称、时间、等级
var ndvi = image.normalizedDifference(["B5", "B4"]).rename("NDVI");  //NDVI显示配置,NDVI值范围是-1到1
var visParam = {  
  min: -0.2,   
  max: 0.8,  
  palette: ["FFFFFF", "CE7E45", "DF923D", "F1B555", "FCD163",   
            "99B718", "74A901", "66A000", "529400", "3E8601",   
            "207401", "056201", "004C00", "023B01", "012E01",   
            "011D01", "011301"]  
};  
Map.addLayer(ndvi, visParam, "NDVI");  // 加载计算好的NDVI数据图层
Map.addLayer(roi, {color: "red"}, "roi");   // 加载roi,并显示为红色
var mean = ndvi.reduceRegion({  
   reducer: ee.Reducer.mean(),  
   geometry: roi,   
   scale: 30  
});  
// 调用Image中的ReduceRegion方法计算roi区域内的NDVI均值
// 参数分别是Reducer均值计算器、Geometry计算区域roi、scale计算使用的分辨率为30m。
print("reduceRegion value is: ", mean); 
复制代码

下图是自己画范围,然后引用自己的范围 在这里插入图片描述

计算过程和结果

在这里插入图片描述

计算结果

在这里插入图片描述

注: 本文案例仅仅展示了NDVI计算过程最简单的部分,没有对影像进行处理,如去云处理、大气校正,有的人直接用TOA(calibrated top-of-atmosphere,大气层顶表观反射率,未经过大气校正。)做NDVI,也有的人用SR(Surface Reflectance,表面反射率数据)数据,笔者在写这篇文章时候所用到的数据还没有生产对应的的SR数据。

分类:
开发工具
标签:
收藏成功!
已添加到「」, 点击更改