REMOTE SENSING

QGIS 3.4 Orfeo ToolBox(OTB) - (8) 가시광선 식생지수 계산하기(파이썬 콘솔)

유병혁 2019. 1. 14. 11:21

이번 글은 파이썬 콘솔에서 무인기 영상의 식생지수를 계산해 보도록 하겠습니다.

앞서 OTB BandMath 도구를 사용했던 부분을 파이썬으로 구현했다고 보시면 됩니다.


QGIS 3.4 파이썬 활용과 관련해서는 아래 글을 참조하시기 바랍니다.

PyQGIS Developer Cookbook | https://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/index.html


저는 식생지수의 일종인 NDGRI를 계산하기 위한 파이썬 코드를 NGRDI.py로 작성했습니다.


원본 파이썬 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 래스터 레이어 추가
rasLayer = QgsRasterLayer('D:/GEODATA/orph_pta.tif''orph_pta')
if rasLayer.isValid():
    QgsProject.instance().addMapLayer(rasLayer)
 
entries = []
 
#1번 밴드 정의(Red)
ras1 = QgsRasterCalculatorEntry()
ras1.ref = 'ras@1'
ras1.raster = rasLayer
ras1.bandNumber = 1
entries.append(ras1)
 
#2번 밴드 정의(Green)
ras2 = QgsRasterCalculatorEntry()
ras2.ref = 'ras@2'
ras2.raster = rasLayer
ras2.bandNumber = 2
entries.append(ras2)
 
#3번 밴드 정의(Blue)
ras3 = QgsRasterCalculatorEntry()
ras3.ref = 'ras@3'
ras3.raster = rasLayer
ras3.bandNumber = 3
entries.append(ras3)
 
#NGRDI 계산 (G - R) / (G + R)
outputLayer = "D:/GEODATA/orph_pta_ngrdi.tif"
calc = QgsRasterCalculator('(ras@2 - ras@1) / (ras@2 + ras@1)',
                           outputLayer, 'GTiff', rasLayer.extent(), rasLayer.width(), rasLayer.height(), entries)
calc.processCalculation()
addLayer = QgsRasterLayer(outputLayer, "NGRDI")
QgsProject.instance().addMapLayer(addLayer)
 
cs


IDLE에서 해당 코드를 실행하면 당연히 오류가 나겠죠?!. QGIS 3.4 파이썬 콘솔에서 동작시켜 보겠습니다.


QGIS 3.4를 실행하고 '플러그인 > 파이썬 콘솔'을 실행합니다.


아래와 같이 파이썬 콘솔 창이 실행되는데요,


파이썬 콘솔 창의 상단 메뉴에서 '편집기 보이기' 버튼을 클릭하면,


아래와 같이 화면이 분할됩니다.


화면 우측에서 '스크립트 열기'를 클릭하고 앞서 작성한 NGRDI.py 파일을 추가해 줍니다.

코드가 추가되었습니다.


이제 '스크립트 실행' 버튼을 클릭해볼까요?!


아래와 같이 NGRDI 레이어가 자동 계산되어 추가되었습니다.