Moments/GIS

[QGIS] Landsat 8/9 활용 3편: NDWI/MNDWI 추출하기 💧 (수체지수/수계분석/위성이미지 비교)

행복한 메타몽 2026. 3. 8. 11:23

지난 편까지 Landsat 데이터로 식생지수 NDVI와 건축지수 NDBI를 뽑아봤는데, 이번엔 수체(물)를 탐지하는 NDWI(Normalized Difference Water Index)와 개선된 버전인 MNDWI(Modified NDWI)를 추출해 볼 차례다.
강, 호수, 저수지 같은 수체 분포를 파악하거나, 홍수 피해 범위를 분석하는 데 많이 쓰이는 지수들이다. 두 공식의 차이도 함께 정리해두니 필요에 따라 골라 쓰면 된다. 레츠꼬 💧

 

👉 1편 — Landsat으로 NDVI 추출하기 🌿 (Landsat Band 소개/위성이미지 다운로드/래스터 계산기)
👉 2편 — Landsat으로 NDBI 추출하기 🏙️ (도시지역 추출/Built-up Index 계산/NDVI 비교)

 


 

1. Landsat 위성과 밴드 — 복습

NDWI/MNDWI 계산에 필요한 밴드를 짚고 가자. Landsat은 USGS와 NASA가 공동 운영하는 지구관측 위성 시리즈로, 다양한 분광 밴드를 통해 식생·수체·도시·토양 등 지표면 특성을 무료로 분석할 수 있다.

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

👉 Spectral Bandpasses for all Landsat Sensors

 

USGS 제공 Landsat 시리즈별 분광 밴드 비교표Landsat 8 OLI/TIRS 밴드 상세 정보 (파장 범위 및 해상도)
Landsat 시리즈별 분광 밴드 비교표 / andsat 8 OLI/TIRS 밴드 상세 정보 (출처: USGS)

 

이번 편에서 쓸 밴드는 세 가지다.
Band 3 (Green): 파장 0.53~0.59 µm, 해상도 30m
Band 5 (NIR, Near Infrared): 파장 0.85~0.88 µm, 해상도 30m
Band 6 (SWIR 1, Shortwave Infrared): 파장 1.57~1.65 µm, 해상도 30m

 

NDWI는 Band3 + Band5, MNDWI는 Band3 + Band6을 사용한다. 어떤 공식을 쓰느냐에 따라 필요한 밴드 파일이 달라지니 참고하자.

 

 

2. L1 vs L2 — 대기보정 여부

이 시리즈에서 계속 강조하지만, 지수 계산에는 반드시 L2(Level-2) Surface Reflectance 데이터를 써야 한다.

 

구분 Level-1 (L1) Level-2 (L2)
처리 단계 기하 보정만 완료 기하 보정 + 대기 보정 완료
반사율 단위 DN (Digital Number, 원시값) 지표면 반사율 (Surface Reflectance)
지수 계산 시 추가 변환 과정 필요 바로 계산 가능 ✅
파일명 접두어 _B3.TIF, _B5.TIF _SR_B3.TIF, _SR_B5.TIF

 

EarthExplorer에서 데이터를 받는 방법은 1편에 자세히 정리되어 있다.
👉 1편 — EarthExplorer에서 Landsat L2 데이터 다운로드하는 방법

 

 

3. NDWI vs MNDWI — 무슨 차이?

수체를 탐지하는 지수에는 크게 두 가지가 있다. NDWI(McFeeters, 1996)와 이를 개선한 MNDWI(Xu, 2006)다.

 

① NDWI (Normalized Difference Water Index)

McFeeters가 제안한 원조 수체지수다. Green 밴드와 NIR 밴드를 사용한다.

 

$$\text{NDWI} = \frac{\text{Green} - \text{NIR}}{\text{Green} + \text{NIR}}$$

 

Landsat 8/9 기준으로 밴드 번호를 대입하면:

 

$$\text{NDWI} = \frac{\text{Band3} - \text{Band5}}{\text{Band3} + \text{Band5}}$$

 

물은 Green 밴드를 상대적으로 강하게 반사하고 NIR은 거의 흡수한다. 그래서 수체는 NDWI 값이 높게, 식생·토양은 낮게 나온다. 일반적으로 NDWI > 0이면 수체로 분류한다.

 

 

② MNDWI (Modified Normalized Difference Water Index)

Xu가 제안한 개선 버전으로, NIR 대신 SWIR 밴드를 사용한다.

 

$$\text{MNDWI} = \frac{\text{Green} - \text{SWIR}}{\text{Green} + \text{SWIR}}$$

 

Landsat 8/9 기준으로 밴드 번호를 대입하면:

 

$$\text{MNDWI} = \frac{\text{Band3} - \text{Band6}}{\text{Band3} + \text{Band6}}$$

 

SWIR 밴드는 NIR보다 건축물·토양에 더 민감하게 반응한다. 그래서 MNDWI는 도시 지역에서 건물 노이즈를 더 잘 억제하고 수체를 더 뚜렷하게 구분해낸다. 두 지수의 차이를 정리하면 아래와 같다.

 

구분 NDWI (McFeeters) MNDWI (Xu)
공식 (Green - NIR) / (Green + NIR) (Green - SWIR) / (Green + SWIR)
Landsat 8/9 밴드 Band3, Band5 Band3, Band6
장점 단순하고 범용적 도시 지역 수체 탐지 정확도 높음
단점 건축물과 혼동 가능성 있음 탁한 물이나 얕은 수체에서 과소 추정 가능
추천 상황 자연 수체, 농촌 지역 도시 내 하천·수체 분석

 

두 지수 모두 값의 범위는 -1 ~ +1이며, 양수(특히 > 0)이면 수체일 가능성이 높다고 해석한다. MNDWI는 양수 임계값을 더 낮게 잡아도 수체 탐지가 잘 되는 경향이 있다.

 

 

4. 필요한 밴드 파일 준비하기

EarthExplorer에서 받은 Landsat L2 번들에서 이번엔 세 개 파일을 준비한다.
_SR_B3.TIF (Green) / _SR_B5.TIF (NIR) / _SR_B6.TIF (SWIR 1)

 

NDWI만 계산한다면 B3 + B5, MNDWI만 계산한다면 B3 + B6만 있으면 된다. 둘 다 한 번에 할 거라면 세 개 모두 준비하면 된다.

Finder에서 SR_B3.TIF, SR_B5.TIF, SR_B6.TIF 선택 — NDWI/MNDWI 계산용 밴드 파일
Finder에서 다운로드 폴더 →  SR_B3.TIF, SR_B5.TIF, SR_B6.TIF 확인

 

 

5. QGIS에서 밴드 불러오기

QGIS에 세 파일을 드래그 앤 드롭으로 불러온다. 이전 편들에서 작업하던 프로젝트를 이어서 쓴다면 Band3 (Green) 레이어 하나만 추가로 불러오면 된다. (헷갈리지 않게 불러오면서 이름을 바꿔주자.)
레이어 패널에 Band3 (Green), Band5 (NIR), Band6 (SWIR)이 모두 표시되면 준비 완료다.

QGIS에서 Band3(Green), Band5(NIR), Band6(SWIR) 불러온 화면
QGIS에서 Band3(Green), Band5(NIR), Band6(SWIR) 불러온 화면

 

 

6. NDWI 계산하기

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

QGIS 상단 메뉴 → 래스터 > 래스터 계산기 클릭

 

 

래스터 계산기가 열리면 아래 표현식을 입력한다.

 

$$\text{NDWI} = \frac{\text{"Band3 (Green)@1"} - \text{"Band5 (NIR)@1"}}{\text{"Band3 (Green)@1"} + \text{"Band5 (NIR)@1"}}$$

 

("Band3 (Green)@1" - "Band5 (NIR)@1") / ("Band3 (Green)@1" + "Band5 (NIR)@1")

 

산출 레이어 파일명을 NDWI.tif로 지정하고 OK를 누르면 계산이 시작된다.

QGIS 래스터 계산기 → NDWI 수식 입력

 

 

계산이 완료되면 NDWI 레이어가 흑백으로 표시된다. 밝은 픽셀(높은 값)이 수체, 어두운 픽셀(낮은 값)이 식생·토양·건물 영역에 해당한다.

NDWI 계산 완료
NDWI 계산 완료

 

 

색상을 적용하려면 NDWI 레이어 더블클릭 → 속성창 → 심볼로지 탭에서 단일 밴드 유사색상으로 변경한다. 수체는 파랑·하늘색 계열, 비수체는 오렌지·갈색 계열로 표현하면 직관적이다.

NDWI 색상 적용 결과 전체 화면
NDWI 색상 적용 결과

 

 

결과를 보면 한강과 서해안 수체가 파란색으로 선명하게 구분된다. 내륙의 저수지나 소규모 수체도 확인할 수 있다. ㅎㅎ

확대한 화면 — 서해안, 한강 수계가 파란색으로 뚜렷하게 표시
확대한 모습

 

 

7. MNDWI 계산하기

이번엔 MNDWI를 계산해보려고 한다. 래스터 계산기를 다시 열고 이번에는 NIR 대신 SWIR(Band6)을 사용하는 표현식을 입력한다.

 

$$\text{MNDWI} = \frac{\text{"Band3 (Green)@1"} - \text{"Band6 (SWIR)@1"}}{\text{"Band3 (Green)@1"} + \text{"Band6 (SWIR)@1"}}$$

 

("Band3 (Green)@1" - "Band6 (SWIR)@1") / ("Band3 (Green)@1" + "Band6 (SWIR)@1")

 

NDWI 수식과 비교하면 Band5(NIR)가 Band6(SWIR)으로 바뀐 것이 전부다. 산출 레이어 파일명을 MNDWI.tif로 지정하고 OK를 누른다.

QGIS 래스터 계산기 → MNDWI 수식 입력
QGIS 래스터 계산기 → MNDWI 수식 입력

 

 

계산 완료 후 흑백 결과가 표시된다. NDWI 결과와 전체적인 패턴은 비슷하지만, 도심 하천 주변의 수체 경계가 더 뚜렷하게 나타나는 게 특징이다.

MNDWI 계산 완료
MNDWI 계산 완료

 

 

동일한 방식으로 색상을 적용하면 결과를 시각적으로 비교할 수 있다.

MNDWI 색상 적용 결과 전체 화면 — NDWI 대비 수체 경계가 더 선명하게 표현
MNDWI 색상 적용 결과

 

확대한 모습
확대한 모습

 

 

NDWI와 MNDWI 결과를 레이어 패널에서 켜고 끄면서 비교해보면 차이가 잘 느껴진다. 특히 도심 구간 하천에서 MNDWI가 수체 경계를 더 깔끔하게 잡아내는 걸 확인할 수 있다.

NDWI와 MNDWI 비교

 

 

이렇게 Landsat L2 데이터 하나로 NDWI와 MNDWI를 모두 추출할 수 있다. 분석 목적과 지역 특성에 따라 두 지수를 비교해가며 쓰는 걸 추천한다. 다음 편에서는 같은 Landsat 데이터로 지표면 온도(LST, Land Surface Temperature)를 추출하는 방법을 다뤄보려고 한다. 이상 끝! 💧