Выход из границы Ошибка в скрипте Python при поиске индекса NDVI из образа tiff
Я работаю над получением индекса NDVI из изображения в числовое значение, чтобы я мог напечатать числовое значение NDVI.
Для этой цели я гуглил и нашел один код на Python. Я использую Ubuntu, и у меня установлены Pyhton 2 и 3.
И я очень плохо знаком с Python.
# Import the Python 4 print function
from __future__ import print_function
# Import the "gdal" and "gdal_array" submodules from within the "osgeo" module
from osgeo import gdal
from osgeo import gdal_array
# Import the NumPy module
import numpy as np
# Open a GDAL dataset
dataset = gdal.Open('/home/path to directory/A0_200_T.TIF', gdal.GA_ReadOnly)
# Allocate our array using the first band's datatype
image_datatype = dataset.GetRasterBand(1).DataType
image = np.zeros((dataset.RasterYSize, dataset.RasterXSize, dataset.RasterCount),
dtype=gdal_array.GDALTypeCodeToNumericTypeCode(image_datatype))
# Loop over all bands in dataset
for b in xrange(dataset.RasterCount):
# Remember, GDAL index is on 1, but Python is on 0 -- so we add 1 for our GDAL calls
band = dataset.GetRasterBand(b + 1)
# Read in the band's data into the third dimension of our array
image[:, :, b] = band.ReadAsArray()
print('Red band mean: {r}'.format(r=image[:, :, 2].mean()))
print('NIR band mean: {nir}'.format(nir=image[:, :, 3].mean()))
b_red = 2
b_nir = 3
ndvi = (image[:, :, b_nir] - image[:, :, b_red]) / \
(image[:, :, b_nir] + image[:, :, b_red]).astype(np.float64)
print('NDVI matrix: ')
print(ndvi)
print('\nMax NDVI: {m}'.format(m=ndvi.max()))
print('Mean NDVI: {m}'.format(m=ndvi.mean()))
print('Median NDVI: {m}'.format(m=np.median(ndvi)))
print('Min NDVI: {m}'.format(m=ndvi.min()))
Теперь, когда я запускаю этот скрипт, используя "python name.py", он выдает следующую ошибку.
Traceback (most recent call last):
File "ndvi.py", line 29, in <module>
print('Red band mean: {r}'.format(r=image[:, :, 5].mean()))
IndexError: index 5 is out of bounds for axis 2 with size 1
Кажется, что массив хранит из связанных данных, но я не знаю, как это исправить.(!??)
Я также не знаю, дает ли он индекс NDVI или нет, но я на это надеюсь (пожалуйста, подскажите, есть ли другой способ сделать это).
Любая помощь в этом была бы очень заметна.
Пожалуйста, дайте мне знать, если вам требуется дополнительная информация.
Заранее спасибо. Р.