numpy 使用python计算NDVI会导致全零

hzbexzde  于 2023-02-12  发布在  Python
关注(0)|答案(1)|浏览(168)

我想从Sentinel-2图像计算ndvi。

import os
import numpy as np
import rasterio as rio

# suppress true divide warning numpy for 0 divide
np.seterr(divide='ignore', invalid='ignore')

red_f = absolute/path/to/band/4
nir_f = absolute/path/to/band/8

def calc_ndvi():
    
    with rio.open(red_f) as src:
        red = src.read()
        red = red.astype(np.float64)
    
    with rio.open(nir_f) as src:
        nir = src.read()
        nir = red.astype(np.float64)

    ndvi = np.divide((nir - red),(nir + red))
    
    return ndvi

ndvi = calc_ndvi()

"red"和"nir"最初被加载为"uint16数组",形状为(1,10980,10980)。在使用astype计算之前,我将其转换为浮点数。据我所知,没有必要将数组扁平化为2d形状。我尝试过这种方法,但没有成功。
不幸的是,结果是一个完全填充0的数组。
我哪里做错了?

rt4zxlrg

rt4zxlrg1#

您有一个打字错误:

nir = red.astype(np.float64)

应为:

nir = nir.astype(np.float64)

在:

ndvi = np.divide((nir - red),(nir + red))

你真的在做:

ndvi = np.divide((red - red),(red + red))

得到0的数组

相关问题