哨兵二号数据计算ndvi和evi
时间: 2025-06-28 15:15:55 浏览: 18
### 使用 Sentinel-2 数据计算 NDVI 和 EVI
#### 计算 NDVI 和 EVI 的公式
NDVI(归一化差异植被指数)和 EVI(增强植被指数)是常用的遥感植被指数。这两个指数可以帮助评估植被健康状况。
对于 NDVI,其定义如下:
\[ \text{NDVI} = \frac{(NIR - RED)}{(NIR + RED)} \]
其中 NIR 表示近红外波段,RED 表示红光波段[^1]。
EVI 则通过引入蓝光波段来减少大气影响,具体公式为:
\[ \text{EVI} = G \times \frac{(NIR - RED)}{(NIR + C_1 \times RED - C_2 \times BLUE + L)} \]
这里 \(G\) 是增益系数,默认值为 2.5;\(C_1\) 和 \(C_2\) 分别代表气溶胶阻力系数,默认分别为 6 和 7.5;而 \(L\) 称作 canopy 背景调整因子,默认设为 1。
#### 获取并处理 Sentinel-2 数据
为了获得高质量的结果,在实际操作前需先从 ESA 官方网站下载所需时间范围内的哨兵二号卫星图像数据集。这些数据可通过访问欧空局提供的在线资源获取,路径为【Data Access】-> 【Access to sentinel data】[^2]。
#### Python 实现代码示例
下面展示一段基于 `rasterio` 库读取 TIFF 文件以及 NumPy 进行数值运算的简单例子,用于说明如何利用 Python 来加载 Sentinel-2 图像文件,并据此计算 NDVI 及 EVI 值。
```python
import rasterio
import numpy as np
def calculate_ndvi(red_band_path, nir_band_path):
with rasterio.open(nir_band_path) as src_nir:
nir = src_nir.read(1).astype(float)
with rasterio.open(red_band_path) as src_red:
red = src_red.read(1).astype(float)
ndvi = (nir - red) / (nir + red)
return ndvi
def calculate_evi(blue_band_path, red_band_path, nir_band_path):
g = 2.5
c1 = 6.
c2 = 7.5
l = 1.
with rasterio.open(blue_band_path) as src_blue:
blue = src_blue.read(1).astype(float)
with rasterio.open(red_band_path) as src_red:
red = src_red.read(1).astype(float)
with rasterio.open(nir_band_path) as src_nir:
nir = src_nir.read(1).astype(float)
evi = g * ((nir - red) / (nir + c1 * red - c2 * blue + l))
return evi
```
上述函数分别实现了 NDVI 和 EVI 的计算逻辑,输入参数应指向对应波段的 GeoTIFF 文件路径。注意这里的实现假设所有带宽已经过预处理校正并且具有相同的空间分辨率和地理配准[^4]。
阅读全文
相关推荐















