numpy 如何在NDVI图像中显示负值?

blpfk2vs  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(144)

我对python相当陌生。我在用陆地卫星8号。tiff图像生成NDVI图像。当我生成图像时,河流不显示为负值。NDVI从-1到1,但在此图像中最低为0。这是我使用的代码的一部分:

import os
from glob import glob

import sys
import numpy as np 
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap  
import rasterio as rio 
from rasterio.plot import plotting_extent 
import rioxarray as rxr
import geopandas as gpd 
import earthpy as et  
import earthpy.spatial as es  
import earthpy.plot as ep
#create image stack
arr_st, meta = es.stack(stack_bands_path, nodata = -9999)

#allow division by 0
np.seterr(divide='ignore', invalid='ignore')

#create NDVI
red = arr_st[3].astype(float)
nir = arr_st[4].astype(float)

ndvi = np.divide((nir-red), (nir+red))
ep.plot_bands(ndvi, cmap="RdYlGn", cols=1, vmin=-1, vmax=1)
plt.show()

我不确定我做错了什么。我最初使用的是Earthpy。spatial.normalized_difference,但河流显示为绿色(或色条上的1)。
我的理论是小于0的数字显示为0。但我不确定任何帮助都很感激。NDVI的图像在下面。

jljoyd4f

jljoyd4f1#

NDVI将落在-1+1的范围内,因此整数不是一个很好的表示,因为在该范围内只有3个可能的整数结果,即-1,0和1。
我不熟悉您使用的特定包,但是,如果您想要小数(十进制)结果,我想您应该使用float类型,i。即:

red = arr_st[3].astype(float)
nir = arr_st[4].astype(float)

相关问题