지난 편까지 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


이번 편에서 쓸 밴드는 세 가지다.
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만 있으면 된다. 둘 다 한 번에 할 거라면 세 개 모두 준비하면 된다.

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

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

래스터 계산기가 열리면 아래 표현식을 입력한다.
$$\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를 누르면 계산이 시작된다.

계산이 완료되면 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를 누른다.

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

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


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

이렇게 Landsat L2 데이터 하나로 NDWI와 MNDWI를 모두 추출할 수 있다. 분석 목적과 지역 특성에 따라 두 지수를 비교해가며 쓰는 걸 추천한다. 다음 편에서는 같은 Landsat 데이터로 지표면 온도(LST, Land Surface Temperature)를 추출하는 방법을 다뤄보려고 한다. 이상 끝! 💧
'Moments > GIS' 카테고리의 다른 글
| DSM, DEM, DTM 차이 완벽 정리 🏔️ [수치표면모델/수치표고모델/수치지형모델] (0) | 2026.03.17 |
|---|---|
| [QGIS] Landsat 8/9 활용 4편: LST 추출하기 🌡️ (지표면온도/열섬/위성영상) (0) | 2026.03.08 |
| [QGIS] Landsat 8/9 활용 2편: NDBI 추출하기 🏙️ (도시지역 추출/Built-up Index 계산/NDVI 비교) (0) | 2026.03.04 |
| [QGIS] Landsat 8/9 활용 1편: NDVI 추출하기 🌿 (Landsat Band 소개/위성이미지 다운로드/래스터 계산기) (0) | 2026.03.04 |
| [QGIS] 중심점 기준으로 반경이 다른 헥사곤 생성하기 📐 (Geometry by expression) (0) | 2026.02.20 |