![26c4995d4abe0c117ba01162476d589c.png](https://i-blog.csdnimg.cn/blog_migrate/4bf888d1108c0437f35b9c3a17a11812.jpeg)
引言
在遥感应用领域,植被指数已广泛用于定性和定量评价植被覆盖及其长势。由于植被光谱表现为植被、土壤亮度、环境影响、阴影、土壤颜色和湿度复杂混合反应,而且受大气时空间变化的影响,因此植被指数没有一个普遍的值,其研究经常表明不同的结果。而归一化植被指数(NDVI)是遥感领域中最常用的植被指数之一。
本文提供了一种批量化计算NDVI的Python计算程序,将图像置于某一文件夹后,设定计算结果目录,运行该代码即可。注意:本程序无法处理含有NoData值的遥感图像,解决方法是先利用ENVI中的波段运算方法,去除NoData值。
数据介绍
4波段遥感图像,分别为蓝、绿、红、近红外波段,数据类型为uint16。下图显示了本实验所用的真彩色图像:
![f1efc70f8947970d4b3c9502ddb2d5d8.png](https://i-blog.csdnimg.cn/blog_migrate/e40cca64325e355e399aa70281333d65.jpeg)
Python代码实现
import numpy as np
from osgeo import gdal
import os
#定义图像的打开方式
def image_open(img):
data = gdal.Open(img)
if data == "None":
print("图像无法读取")
return data
#定义相关变量
FilePath = r"E:yynctryedataNDVI批处理实验"
image_name = os.listdir(FilePath)
SavePath = r"E:yynctryedataNDVI批处理实验结果"
##批量+NDVI处理+输出
#1.1 批量过程
for i in range(len(image_name)):
QZ = os.path.splitext(image_name[i])[0]
HZ = os.path.splitext(image_name[i])[1]
if (HZ == ".tif"):
image = FilePath + "/" + image_name[i]
#NDVI处理
data = image_open(image)
Red = data.GetRasterBand(3).ReadAsArray().astype(np.float32)
Nir = data.GetRasterBand(4).ReadAsArray().astype(np.float32)
NDVI = (Nir - Red) / (Nir + Red)
NDVI[np.isnan(NDVI)] = 0 # 空值转0
NDVI = NDVI.astype(np.float32)
#输出数据
output1 = gdal.GetDriverByName("GTiff")
output2 = output1.Create(SavePath + QZ + "_NDVI.tif", NDVI.shape[1], NDVI.shape[0], bands = 1, eType = gdal.GDT_Float32)
output2.SetProjection(data.GetProjection())
output2.SetGeoTransform(data.GetGeoTransform())
output5 = output2.GetRasterBand(1).WriteArray(NDVI)
处理结果
下面是其中一副遥感图像的NDVI结果:
![f21d2f888807f06c0bb6460299fc0c09.png](https://i-blog.csdnimg.cn/blog_migrate/d58b2dddb9199bef9a2771b72f4cf816.jpeg)