GEE 案例:利用sentinel-2数据计算的NDVI指数对比植被退化情况

2024-09-19 07:59:19 浏览数 (1)

简介

利用sentinel-2数据计算的NDVI指数对比植被退化情况

NDVI指数

NDVI(Normalized Difference Vegetation Index,归一化植被指数)是通过计算红外波段和可见光波段的反射值之间的差异来评估植被的状况。利用NDVI指数可以监测植被的退化情况。

植被退化指的是植被由于外界因素(如气候变化、土地利用变化、人为活动等)导致的健康状况恶化,包括植被生长减缓、植被凋落、植被数量减少等。

利用NDVI指数监测植被退化的步骤如下:

  1. 收集遥感数据:利用遥感技术获取适当的遥感数据,包括可见光和红外波段的反射值数据。
  2. 计算NDVI指数:使用以下公式计算NDVI指数:NDVI = (NIR - Red) / (NIR Red),其中NIR代表红外波段的反射值,Red代表可见光波段的反射值。
  3. 分析NDVI图像:将计算得到的NDVI指数数据转化成图像,通过观察图像中不同区域的NDVI值,可以评估该区域的植被状况。
  4. 对比分析:将监测期的NDVI图像与历史数据进行对比,可以发现植被退化的迹象。如果当前的NDVI值较低,且较之前的数据有显著下降,说明该区域植被退化程度较高。
  5. 确认植被退化原因:通过对退化区域进行实地调查或者结合其他环境数据,可以确定植被退化的原因,为进一步的植被恢复提供依据。

利用NDVI指数监测植被退化可以及时发现退化现象,并采取相应的措施进行修复,保护生态环境。

数据

哨兵2号(Sentinel-2)是一颗由欧空局(European Space Agency)和欧盟委员会合作发射的地球观测卫星。哨兵2号搭载了多光谱成像仪(Multispectral Imager,MSI),能够以高分辨率获取红外、可见光和近红外波段的影像数据。该卫星具有全球覆盖、高重复频率和较高空间分辨率等特点,可用于植被监测、土地利用/覆盖变化监测、水体监测等应用。

基于哨兵2号影像进行NDVI计算的步骤如下:

  1. 获取哨兵2号影像数据:可以通过欧空局的数据存档或其他相关数据提供商获取哨兵2号影像数据。这些数据通常以每个波段的辐射校正反射率值的形式提供。
  2. 选择红外波段和可见光波段:哨兵2号影像提供了多个波段的数据,应选择红外波段和可见光波段用于NDVI计算。一般而言,红外波段对应的波长范围为0.73-0.94微米,可见光波段对应的波长范围为0.49-0.67微米。
  3. 计算NDVI指数:根据所选的红外和可见光波段数据,使用以下公式计算NDVI指数:NDVI = (NIR - Red) / (NIR Red),其中NIR代表红外波段的反射率值,Red代表可见光波段的反射率值。这个计算过程可以针对每个像素进行执行。
  4. 可视化NDVI图像:将每个像素计算得到的NDVI值转化为图像,可以使用不同颜色表示不同的NDVI值范围。一般而言,绿色表示较高的NDVI值,表示较好的植被生长状况,红色表示较低的NDVI值,表示较差的植被生长状况。

基于哨兵2号影像进行NDVI计算可以获得高分辨率的植被指数图像,从而对植被的健康状况和退化情况进行定量和定性的评估。这有助于实时监测植被的变化,了解植被退化的程度,并采取适当的措施进行保护和恢复。

函数

ui.Chart.image.series(imageCollection, region, reducer, scale, xProperty)

Generates a Chart from an ImageCollection. Plots derived values of each band in a region across images. Usually a time series.

  • X-axis: Image, labeled by xProperty value.
  • Y-axis: Band value.
  • Series: Band names.

Returns a chart.

Arguments:

imageCollection (ImageCollection):

An ImageCollection with data to be included in the chart.

region (Feature|FeatureCollection|Geometry):

The region to reduce.

reducer (Reducer, optional):

Reducer that generates the values for the y-axis. Must return a single value. Defaults to ee.Reducer.mean().

scale (Number, optional):

Scale to use with the reducer in meters.

xProperty (String, optional):

Property to be used as the label for each image on the x-axis. Defaults to 'system:time_start'.

Returns: ui.Chart

代码

代码语言:javascript复制
var cor = [
  [24.664959178687543,64.99123253965863],
  [24.66427253317973,64.99087875350403],
  [24.66504500937602,64.98997612402353],
  [24.664948449851483,64.98982643880142],
  [24.665688739539593,64.98954974572945],
  [24.666203723670453,64.98957242559722],
  [24.666203723670453,64.98957242559722],
  [24.66606424880168,64.99008498547678],
  [24.664959178687543,64.99123253965863]
  ]
  
var geometry = ee.Geometry.Polygon(cor)

Map.centerObject(geometry)

var sen = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")
.filterBounds(geometry)
.filterDate('2017','2024')
.filter(ee.Filter.calendarRange(6,9,'month'))
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))
.map(function(img){
  var bands = img.select('B.*').multiply(0.0001)
  var ndvi = bands.normalizedDifference(['B8','B4']).rename('ndvi')
  return ndvi
  .copyProperties(img, ['system:time_start', 'system:time_end'])
  });

print(
  ui.Chart.image.series(sen, geometry, ee.Reducer.median(), 10, 'system:time_start')
  .setChartType('ColumnChart')
  )
  
var before = sen.filterDate('2018','2019').median().rename('before')
var after = sen.filterDate('2023', '2024').median().rename('after')

Map.addLayer(before.clip(geometry),[],'before',false)
Map.addLayer(after.clip(geometry),[],'after',false)

print(
  ui.Chart.image.histogram(before, geometry, 10)
  .setOptions({
    title: 'before'
    })
  )
  
print(
  ui.Chart.image.histogram(after, geometry, 10)
  .setOptions({
    title: 'after'
    })
  )


var tree_area = sen.map(function(img){
  var thr = img.gt(0.5);
  var mask = thr.updateMask(thr);
  var area = mask.multiply(ee.Image.pixelArea())
  return area
  .copyProperties(img, img.propertyNames())
  });

print(
  ui.Chart.image.series(tree_area, geometry, ee.Reducer.sum(),
  10, 'system:time_start').setChartType('ColumnChart')
  )

结果

0 人点赞