2017-01-28 9 views
2

L8 대역을 뺀 : 출력이 서명 숫자가 있음을포화 나는 다음과 같은 <code>gdal_calc.py</code>와 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를 계산하는 첫 번째 단계입니다.

답변

0

당신은 calcAB가 나타내는 데이터 형식이다 numpy.ndarrayastype()의 방법을 사용하여 해결할 수있다.

--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를 설정하면 더욱 좋습니다. 이렇게하면 래스터의 좋은 부분에있는 계산 된 0의 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))" –