【发布时间】:2021-05-21 00:14:45
【问题描述】:
我对 python 还很陌生。我正在使用一些 Landsat 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 的数字显示为零……但我不确定。任何帮助表示赞赏。 NDVI的图像如下。
【问题讨论】:
-
测试一下:print(np.all(nir>=red))
-
它说“假”。这意味着没有 NIR 值大于或等于红色......这意味着我应该得到负的 NDVI 值,对吧?
标签: python arrays numpy image-processing