2017-01-28 1 views
2

Я пытаюсь вычитать две полосы Landsat8 с gdal_calc.py следующим образом:насыщенность отрицательных значений в gdal_calc.py при вычитании L8 полос

gdal_calc.py -A LC8_B4.TIF -B LC8_B5.TIF --outfile="$pathout"/B5minusB4.tif --type='Int16' --calc="B-A" 

Очевидно, что выход знаковое число (т.е. Int16) , однако я никогда не получаю отрицательные значения, когда значение должно быть отрицательным после вычитания, я получаю значение 32767. Есть ли способ исправить это в выражении --calc? Это первый шаг в вычислении NDVI для L8.

ответ

0

Проблему можно решить с помощью метода astype()numpy.ndarray, который является типом данных, представленное A и B в выражении calc.

--calc="B.astype(int16) - A.astype(int16)"

These int16 фактически numpy.int16 но выражение для вычисления происходит в numpy пространстве имен.

gdal_calc.py -A LC8_B4.TIF -B LC8_B5.TIF \ 
    --outfile="$pathout"/B5minusB4.tif --type='Int16' \ 
    --calc="B.astype(int16) - A.astype(int16)" 

Что еще лучше, если вы заранее установили NoDataValue для входных растров. Это гарантирует, что значения NDVI с вычисленным нулем в пределах хорошей части растра не помечены как NoData, потому что они имеют то же значение, что и 0 - 0 «NDVI» из пространства NoData.

gdal_edit.py -a_nodata 0 LC8_B4.TIF 
gdal_edit.py -a_nodata 0 LC8_B5.TIF 
# gdal_calc.py ... 
+0

Это работает! Я закончил с одной строкой для вычисления NDVI: gdal_calc.py -A LC8_B4.TIF -B LC8_B5.TIF \ --outfile = "$ pathout" /ndvi_stackoverflow_oneoff.tif --type = 'Float32' \ --calc = "(B.astype (float32) - A.astype (float32))/(B.astype (float32) + A.astype (float32))" –

Смежные вопросы