当减去L8波段时,gdal_calc.py中的负值饱和度

时间:2017-01-28 09:13:16

标签: python gdal subtraction

我试图用gdal_calc.py减去两个Landsat8乐队如下:

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

很明显输出是带符号的数字(即Int16),但是我从来没有得到负值,当减法后我认为值为负值时,我得到值32767.有没有办法在--calc表达式中修复此问题?这是计算L8的NDVI的第一步。

1 个答案:

答案 0 :(得分:1)

您可以使用astype()的{​​{1}}方法来解决此问题,numpy.ndarrayA表达式中Bcalc所代表的数据类型。< / p>

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

这些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&#34; NDVI&#34;相同的值。来自NoData空间。

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