GEE计算NDVI
时间: 2025-05-18 07:54:55 浏览: 39
### 如何在 Google Earth Engine 中计算归一化植被指数 (NDVI)
在 Google Earth Engine (GEE) 中,可以通过处理遥感影像数据来计算归一化植被指数 (Normalized Difference Vegetation Index, NDVI)[^2]。NDVI 是一种常用的指标,用于评估植被健康状况和密度。其定义如下:
\[
NDVI = \frac{(NIR - Red)}{(NIR + Red)}
\]
其中 \( NIR \) 表示近红外波段反射率,\( Red \) 表示红光波段反射率。
以下是基于 GEE 的 Python 和 JavaScript 实现方法的详细说明以及代码示例。
#### 使用 Python 计算 NDVI
通过 Python 定义函数并将其应用于图像集合中的每张图像,可以实现批量计算 NDVI 值[^2]。下面是一个完整的代码示例:
```python
import ee
# 初始化地球引擎
ee.Initialize()
# 加载 Landsat 8 图像集
landsat = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
# 过滤日期范围和地理区域
filtered = landsat.filterDate('2020-01-01', '2020-12-31') \
.filterBounds(ee.Geometry.Point(-122.08, 37.42))
# 定义 NDVI 函数
def add_ndvi(image):
ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')
return image.addBands(ndvi)
# 应用 NDVI 函数到图像集合
with_ndvi = filtered.map(add_ndvi)
# 打印带有 NDVI 波段的结果
print(with_ndvi.first().bandNames().getInfo())
```
此代码加载了 Landsat 8 数据,并应用了一个自定义函数 `add_ndvi` 来为每个图像添加一个新的 NDVI 波段。
---
#### 使用 JavaScript 计算 NDVI
JavaScript 是 GEE 平台上的默认脚本语言之一。以下是如何利用 Sentinel-2 或其他卫星数据源计算 NDVI 的示例代码:
```javascript
// 定义研究区
var roi = ee.Geometry.Rectangle([76.8, 19.0, 78.0, 20.0]);
// 加载 Sentinel-2 数据
var sentinel2 = ee.ImageCollection('COPERNICUS/S2');
// 筛选时间范围内的图像
var filtered = sentinel2.filterDate('2021-01-01', '2021-12-31')
.filterBounds(roi);
// 添加 NDVI 波段
function addNDVI(image) {
var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI');
return image.addBands(ndvi);
}
var withNDVI = filtered.map(addNDVI);
// 可视化 NDVI 结果
Map.centerObject(roi, 8);
var visParams = {min: 0, max: 1, palette: ['red', 'yellow', 'green']};
Map.addLayer(withNDVI.select('NDVI').mean(), visParams, 'NDVI Mean');
```
上述代码展示了如何从 Sentinel-2 数据集中提取 B8(近红外)和 B4(红色)波段,并计算它们之间的差异以生成 NDVI 影像[^3]。
---
#### 解决 GLCM 特征无结果问题
如果尝试使用灰度共生矩阵 (GLCM) 提取纹理特征而未获得预期结果,则可能是因为输入参数设置不当或缺少必要的预处理步骤[^1]。建议验证以下几点:
1. 输入影像是否已去云、校正大气影响;
2. 是否选择了合适的窗口大小进行局部统计分析;
3. 验证所使用的算法版本与文档描述一致。
---
阅读全文
相关推荐

















