이번 포스트는 NDVI(Normalized Difference Vegetation Index), 정규화 식생지수를 QGIS에서 추출하는 전 과정을 정리해 보았다.
데이터 다운로드부터 USGS EarthExplorer 사용법, Landsat 밴드 이해, QGIS 래스터 계산기까지 정리할 예정이니 래스터 분석이 처음이라면 차근차근 따라오면 된다. 레츠꼬 🌿
1. Landsat 위성과 밴드 이해하기
NDVI를 계산하려면 NIR 밴드와 Red 밴드가 필요한데, 이걸 제공하는 대표적인 무료 위성이 Landsat이다.
Landsat은 USGS(미국지질조사국)와 NASA가 공동으로 운영하는 지구관측 위성 시리즈로 1972년부터 지금까지 지구 전역의 다중 분광 영상을 무료로 제공하고 있다.
아래 그림은 Landsat 시리즈별 분광 밴드 비교표다. 위성마다 밴드 번호가 다르기 때문에 어떤 위성을 쓰느냐에 따라 NDVI 계산에 쓰는 밴드 번호가 달라진다.

이 글에서 사용할 Landsat 8/9 OLI의 밴드 구성은 아래와 같다.

NDVI 계산에 필요한 밴드는 두 개다.
Band 4 (Red): 파장 0.64~0.67 µm, 해상도 30m
Band 5 (NIR, Near Infrared): 파장 0.85~0.88 µm, 해상도 30m
2. L1 vs L2 — 어떤 데이터를 받아야 할까?
EarthExplorer에서 데이터를 받을 때 Level-1(L1)과 Level-2(L2) 중 선택해야 하는데, 이 차이를 알고 가야 한다.
| 구분 | Level-1 (L1) | Level-2 (L2) |
| 처리 단계 | 기하 보정만 완료 | 기하 보정 + 대기 보정 완료 |
| 반사율 단위 | DN (Digital Number, 원시값) | 지표면 반사율 (Surface Reflectance) |
| 지수 계산 시 | 추가 변환 과정 필요 | 바로 계산 가능 ✅ |
| 파일명 접두어 | _B4.TIF, _B5.TIF | _SR_B4.TIF, _SR_B5.TIF |
L2는 대기 보정(Atmospheric Correction)이 완료된 지표면 반사율(Surface Reflectance) 데이터다. 대기 중 수증기, 에어로졸 등의 영향을 제거해서 지표면 실제 반사율에 가깝게 만든 것이다.
NDVI처럼 밴드 간 비율을 계산하는 지수를 구할 때는 L2 데이터를 쓰는 게 좋다. 이 글에서도 L2 데이터를 사용한다.
3. USGS EarthExplorer에서 Landsat 데이터 다운로드
① 회원가입 및 로그인
EarthExplorer에서 데이터를 다운로드하려면 USGS 계정이 필요하다. 접속 후 우측 상단 Login을 클릭하고, 계정이 없으면 Create New Account로 무료 가입하면 된다.


② 검색 지역 설정
로그인 후 Search Criteria 탭에서 분석하고 싶은 지역을 설정한다. 지도를 직접 클릭해서 폴리곤을 그리거나, 좌표를 직접 입력해도 된다.

아래처럼 Use Map을 누르면 현재 지도 영역 네 꼭짓점 좌표로 분석 범위를 설정할 수 있다.

③ 운량(Cloud Cover) 설정
지역 설정이 끝나면 Cloud Cover 탭에서 운량 범위를 설정한다. 구름이 많으면 분석에 방해가 되므로 0~20%로 필터링하는 게 좋다. 설정 후 Data Sets 버튼을 클릭한다.

④ 데이터셋 선택
Data Sets 탭에서 Landsat 카테고리를 펼치고 Landsat Collection 2 Level-2 안에 있는 Landsat 8-9 OLI/TIRS C2 L2를 체크하면 된다.
L2가 포함된 항목을 선택해야 대기보정 완료된 Surface Reflectance 데이터를 받을 수 있다.

⑤ 검색 결과 확인 및 다운로드
Results 탭으로 이동하면 조건에 맞는 Landsat 영상 목록이 나온다. 발바닥 아이콘을 누르면 지도 위에 각 영상의 footprint(촬영 범위)가 표시되므로 원하는 영역을 커버하는 장면을 골라 다운로드 버튼을 클릭한다.

다운로드 아이콘 클릭 시 Download Options 팝업이 열린다. Level-2 Surface Reflectance Bands 항목에서 Download All Files Now를 클릭하거나 개별 파일을 선택해 받을 수 있다.

전체 번들은 약 800MB 이상이므로 필요한 밴드만 받아도 된다. 하지만 어차피 다운로드하는 김에 다 받는 게 좋다. (나중에 어떤 밴드가 필요해질지 모르기 때문..)

4. 다운로드 파일 구조 이해하기
압축을 풀면 여러 파일이 들어 있다. 파일명 규칙은 LC09_L2SP_116034_20260216_20260217_02_T1_SR_B4.TIF 와 같은 식이다.
- 파일명 구성:
LC09 → Landsat 9 / L2SP → Level-2 Surface Reflectance Product / 116034 → Path/Row / 20260216 → 촬영 날짜 / SR_B4 → Surface Reflectance Band 4
NDVI 계산에 필요한 파일은 딱 두 개다.
_SR_B4.TIF (Red 밴드)와 _SR_B5.TIF (NIR 밴드)

5. NDVI(Normalized Difference Vegetation Index)란?
NDVI(Normalized Difference Vegetation Index)는 위성 영상에서 식생(녹지)의 밀도와 건강 상태를 수치화한 지수다.
수식은 아래와 같다.
$$\text{NDVI} = \frac{\text{NIR} - \text{Red}}{\text{NIR} + \text{Red}}$$
여기서 NIR은 근적외선(Near Infrared) 밴드, Red는 적색광 밴드를 의미한다.
식물은 엽록소 때문에 적색광은 흡수하고 근적외선은 강하게 반사하는 특성이 있다. 그래서 NIR 반사율이 높고 Red 반사율이 낮을수록 NDVI 값이 높아지고 식생이 풍부하다는 의미다.
Landsat 8/9 기준으로 밴드 번호를 대입하면 아래와 같다.
$$\text{NDVI} = \frac{\text{Band5} - \text{Band4}}{\text{Band5} + \text{Band4}}$$
NDVI 값의 범위는 -1 ~ +1이며, 일반적인 해석은 아래와 같다.
| NDVI 값 범위 | 의미 |
| 0.6 ~ 1.0 | 울창한 산림, 밀집 식생 |
| 0.3 ~ 0.6 | 일반 식생 (농경지, 초지) |
| 0.1 ~ 0.3 | 희박한 식생, 관목 |
| 0 ~ 0.1 | 나지, 암반, 모래 |
| 음수 (~0) | 수체(강, 호수), 구름, 눈 |
6. QGIS에서 밴드 불러오기
QGIS를 열고 SR_B4.TIF와 SR_B5.TIF 파일을 드래그 앤 드롭으로 불러온다.
불러오면서 헷갈리지 않게 이름을 Band4 (Red)와 Band5 (NIR)로 바꿔줬다. 두 밴드가 동일한 지역을 커버하는지 확인하면 된다.

7. 래스터 계산기로 NDVI 계산하기
QGIS 상단 메뉴에서 래스터(Raster) → 래스터 계산기(Raster Calculator)를 클릭한다.

래스터 계산기 창이 열리면 아래 표현식을 입력한다.
$$\text{NDVI} = \frac{\text{"Band5 (NIR)@1"} - \text{"Band4 (Red)@1"}}{\text{"Band5 (NIR)@1"} + \text{"Band4 (Red)@1"}}$$
("Band5 (NIR)@1" - "Band4 (Red)@1") / ("Band5 (NIR)@1" + "Band4 (Red)@1")
@1은 해당 래스터 파일의 첫 번째 밴드를 의미한다. 단일 밴드 TIF 파일을 불러왔을 때는 항상 @1이라고 이해하면 된다.
산출 레이어 경로를 설정하고 OK를 누르면 계산이 시작된다.

8. NDVI 결과 확인 및 색상 적용
계산이 완료되면 NDVI 레이어가 추가된다. 처음에는 흑백으로 표시된다.

색상을 입히면 식생 분포를 훨씬 직관적으로 확인할 수 있다. NDVI 레이어 선택 → 속성창 → Symbology 탭에서 렌더링 타입을 단일 밴드 유사색상(Singleband pseudocolor)으로 변경한다.
색상표는 내가 정의한 그래디언트로 지정했는데, 자주 쓰는 스타일은 나중에 정리해서 포스팅해 보겠다. 대충 비슷하게 낮은 값은 파란색~오렌지, 높은 값(식생)은 초록으로 표현하면 된다.

결과를 보면 산림 지역은 짙은 초록(높은 NDVI), 한강 같은 수체는 파란색(낮은 NDVI), 시가지·나지는 오렌지~노란색으로 구분되는 게 바로 보인다. ㅎㅎ

다음 편에서는 같은 Landsat 데이터를 활용해서 도시 건축물 밀도를 분석하는 NDBI(정규화 건축지수)를 계산하는 방법을 다뤄보겠다. 이상 끝! 🌿