2026-10-01

NaGeoAI 실제 QGIS 실습 4 | Sentinel-2 구름 마스크 실행과 전 픽셀 맑음 결과 검증

실습 목적과 검증 범위

본 실습에서는 QGIS 3.44.12와 NaGeoAI 1.9.0의 추가 분석 → 구름 마스크 기능을 이용하여 Sentinel-2 예제 영상을 처리하였다. 입력 밴드 지정, 모델 실행, 출력 레이어 확인 및 격자 검증을 목적으로 한다. 이번 결과는 540,360픽셀 모두 ‘맑음(0)’으로 분류되었다. 이는 모델 출력에 대한 관찰이며, 실제 구름이 전혀 없거나 정확도가 100%라는 의미는 아니다.

아래 그림은 2026년 10월 1일 QGIS 데스크톱에서 직접 캡처한 화면이다. 입력·설정·완료 로그·속성은 발행 전 재실행 과정에서 확보하였으며, 그림 4는 같은 날 오전 최초 실행 결과를 다시 연 화면이다. 화면을 생성하거나 처리 결과를 꾸미지 않았다.

1. 플러그인 설치와 실행 환경 준비

  1. NaGeoAI-1.9.0.zip 다운로드에서 배포본을 내려받는다. ZIP 파일 자체를 선택하므로 먼저 압축을 풀지 않는다.
  2. QGIS에서 플러그인 → 플러그인 관리 및 설치 → ZIP에서 설치를 연다. 내려받은 ZIP을 선택하여 설치하고 NaGeoAI를 활성화한다.
  3. 상단 NaGeoAI → 필수 프로그램·모델 설치에서 필요한 환경을 확인한다. 이미 설치된 항목은 중복 설치하지 않는다. 이번 실습은 설치된 플러그인을 사용하였으며 재설치하지 않았다. 실제 과거 설치 화면은 실습 1: 설치부터 변화탐지까지를 참고한다.
  4. 구름 마스크에는 OmniCloudMask와 PyTorch 환경이 필요하다. 이번 실행 환경에서는 PyTorch 2.14.0+cu126 및 Rasterio 1.5.1을 확인하였다. 초해상도용 opensr-model을 사용하는 실습은 아니다. 최초 모델 다운로드에는 인터넷 연결이 필요하며, 설치 완료 표시만으로 분석 성공을 판단하지 말고 실제 실행 로그를 확인한다.

2. 예제 파일 다운로드와 자료 확인

GeoAI 공개 Sentinel-2 예제 TIFF 다운로드 링크를 열고 파일을 저장한다. 브라우저에서 파일 내용이 열리면 다운로드 또는 링크를 다른 이름으로 저장 기능을 사용한다. 이번 저장 위치는 D:\QGIS_Plugin\SampleData\NaGeoAI\S2A-L2A-20190318-N0211-R061-6Bands-S2.tif이다. 폴더 위치는 변경할 수 있으나 패널에 실제 파일 경로를 입력해야 한다.

이 자료는 GeoAI 예제에 사용되는 Sentinel-2 L2A 6밴드 TIFF이며, 파일명에 표시된 관측일은 2019년 3월 18일이다. 이번 실습에서 내려받은 파일은 760×711픽셀, UInt16 6밴드, EPSG:32647, 10×10m 격자이다. 로컬 예제 설명에 따른 밴드 순서는 B2·B3·B4·B8·B11·B12이다. TIFF 밴드 설명에는 파장명이 기록되어 있지 않으므로 다른 자료에도 같은 순서를 적용해서는 안 된다.

자료 출처는 opengeos의 GeoAI 예제 배포 경로이다. Sentinel 자료의 기본 이용 조건은 Copernicus Data Space 이용 조건과 Sentinel 자료 이용 고지를 확인하였다. Contains modified Copernicus Sentinel data (2019). 본 글은 분석 화면과 출처 링크를 제공하며, 예제 TIFF 원본을 별도로 재배포하지 않는다. 예제 배포본 자체의 추가 이용 조건은 내려받는 시점에 확인할 필요가 있다.

파일 확인용 SHA-256: 14b92a5523ae8d18b04d61d7a640a4bce26dbb6ce19eb33eac285c75748bffa3.

3. 시작 프로젝트와 입력 레이어 확인

프로젝트 → 열기에서 QGIS_Play.qgz를 연 후 다른 이름으로 저장하여 실습용 복사본을 만든다. 이번 원본 프로젝트는 EPSG:5187이며 원본을 덮어쓰지 않았다. 오전 실행 내용을 저장한 복사본 QGIS_Play_NaGeoAI_20261001_cloudmask.qgz를 발행 전에 다시 열어 확인하였다. 배경지도는 분석 입력으로 사용하지 않았다.

레이어 → 레이어 추가 → 래스터 레이어 추가에서 예제 TIFF를 불러온다. 입력 영상만 보려면 출력 마스크의 체크를 해제한다. 그림 1은 기존 결과를 잠시 숨기고 입력을 확인한 화면이다. 프로젝트의 즉시 재투영 때문에 영상 외곽이 회전되어 보이지만, 원본 래스터의 EPSG:32647과 10m 격자는 바뀌지 않는다. 화면의 기본 RGB 표시 밴드는 1·2·3이며 자연색 조합은 아니다. 자연색 확인이 필요하면 레이어 속성의 심볼에서 빨강 3·초록 2·파랑 1을 지정한다. 지도 표시용 밴드와 모델 입력 밴드를 구분해야 한다.

QGIS 실제 화면 1 입력 영상과 실습 프로젝트 확인

그림 1. 실습 복사본과 입력 영상 확인. 출력 레이어를 숨긴 상태이며, 오른쪽 아래 프로젝트 CRS와 래스터 자체 CRS를 혼동하지 않는다. 그림을 누르면 원본 크기로 확인할 수 있다.

4. 구름 마스크 기능과 입력값 설정

NaGeoAI → 추가 분석을 열고 기능 목록에서 구름 마스크를 선택한다. 입력 래스터에는 예제 TIFF 전체 경로를 넣는다. 빨강 밴드는 3, 초록 밴드는 2, 근적외선 밴드는 4로 입력하였다. 이는 예제 파일의 B4·B3·B8에 해당한다. 출력 파일은 원본과 다른 경로로 지정하고 ‘출력 결과를 지도에 추가’를 선택한다.

재실행 출력 경로: D:\QGIS_Plugin\SampleData\NaGeoAI\verification\cloud_mask_replay_20261001.tif. 기존 오전 출력은 cloud_mask_gui_20261001.tif이며 덮어쓰지 않았다. 이 패널에서 모델 버전을 별도로 지정하지 않았으므로, 다른 설치 시점의 모델까지 동일한 결과라고 보장할 수 없다.

QGIS 실제 화면 2 구름 마스크 입력값 빨강3 초록2 근적외선4

그림 2. 구름 마스크 기능, 입력 파일, 밴드 3·2·4 및 별도 출력 경로 설정.

5. 실행과 완료 로그 확인

실행을 누른다. 패널의 시작 메시지에 이어 Starting cloud_mask 및 Cloud mask complete를 확인하였다. 새 GeoTIFF가 레이어 목록에 자동 추가되었다. 이번 화면은 QGIS 데스크톱 패널에서 직접 실행한 결과이며, 별도 Python 점검을 GUI 실행으로 표시한 것이 아니다.

로그에는 입력 TIFF의 Photometric 색상 채널 수와 SamplesPerPixel이 일치하지 않아 비색상 채널을 ExtraSamples로 취급한다는 경고가 표시되었다. 출력 저장 시 BLOCKXSIZE가 TILED=YES에서만 사용된다는 경고도 나타났다. 완료 및 파일 읽기는 확인하였으나 경고를 무시해도 모든 분석에 적합하다는 의미는 아니다. 후속 실무 분석에는 밴드 구조와 TIFF 메타데이터를 별도로 점검할 필요가 있다.

QGIS 실제 화면 3 구름 마스크 완료 로그와 출력 레이어

그림 3. 재실행 직후 완료 로그와 자동 추가된 출력 레이어. 경고 메시지도 함께 기록한다.

6. 검은 출력 화면의 의미 확인

출력은 한 밴드의 분류값 래스터이다. GeoAI 구현의 클래스는 0=맑음, 1=두꺼운 구름, 2=얇은 구름, 3=구름 그림자이다. 이번 결과는 값 0만 존재하여 기본 단일밴드 회색조에서는 검게 보인다. 검은 화면만 보고 처리 실패 또는 구름 영역이라고 판단해서는 안 된다. 값의 의미와 실제 픽셀 분포를 확인해야 한다.

QGIS 실제 화면 4 오전 출력 마스크 다시 열기 값0의 검은 화면

그림 4. 같은 날 오전 최초 출력 마스크를 다시 연 화면. 검은 영역은 기본 렌더러에서 표현된 클래스 0이다. 재실행 결과도 같은 분류 분포를 보였다.

7. 속성·격자·픽셀 분포 검증

출력 레이어를 더블클릭하여 레이어 속성 → 정보를 연다. 그림 5에서 760×711픽셀, Byte 자료형, GeoTIFF 형식 및 최소·최대값 0을 확인하였다. QGIS 통계는 근사 통계로 표시되어 있으므로, 전체 픽셀의 고유값 집계는 별도의 Rasterio 읽기로 확인하였다.

QGIS 실제 화면 5 출력 속성 크기 자료형 최소최대0 검증

그림 5. 출력 GeoTIFF의 실제 QGIS 속성 화면. 너비·높이·자료형과 통계값을 확인한다.

점검 항목확인 결과
출력 크기·밴드760×711픽셀, 1밴드 UInt8
래스터 CRS·해상도EPSG:32647, 10×10m
입력과 출력 격자CRS, 크기, Affine 변환 모두 일치
래스터 범위좌하단 (901340, 1806040), 우상단 (908940, 1813150)
전체 픽셀 집계0: 540,360개 / 1·2·3: 각 0개
NoData출력 파일에 별도 NoData 값이 설정되어 있지 않음

따라서 이번 자료에서는 입력→모델 처리→출력 레이어 추가→파일 읽기와 격자 정합을 확인할 수 있었다. 그러나 정답 구름 마스크가 없어 분류 정확도, 구름 누락률 또는 구름 그림자 탐지 성능은 검증하지 않았다. 값 0을 NoData로 지정하면 맑음 클래스가 숨겨지므로 주의한다. 구름 제거 영상이나 시계열 합성영상까지 생성한 실습도 아니다.

8. 프로젝트 저장과 종료 시 주의사항

실습을 마치면 프로젝트 → 저장으로 실습용 복사본만 저장하고 QGIS를 정상 종료한다. 이번 오전 최초 실행과 발행 전 재실행 모두 복사본 저장 및 창의 정상 종료를 확인하였다. 재실행에서는 출력 속성 화면 확인 후 일시적인 응답 지연이 있었으나, 응답이 회복된 뒤 속성 창을 닫고 복사본을 저장하였다. 강제 종료는 사용하지 않았다. 최종 복사본은 QGIS_Play_NaGeoAI_20261001_cloudmask.qgz이며, 원본 QGIS_Play.qgz의 수정 시각과 파일 크기는 유지되었다.

결과와 적용 한계

본 실습에서는 NaGeoAI 구름 마스크의 입력 밴드를 지정하고 실제 QGIS 패널에서 처리를 수행한 결과, 동일 격자의 분류 래스터가 생성됨을 확인하였다. 전 픽셀이 맑음으로 분류된 사례를 통하여 지도 색상과 클래스 의미를 구분할 필요가 있음을 알 수 있었다. 실제 구름 탐지 성능을 평가하려면 구름과 그림자가 포함된 추가 장면, 검증 라벨 및 일관된 비교 기준을 확보해야 한다. 본 결과를 현장 판단의 확정 근거로 사용해서는 안 된다.

참고: GeoAI 원본 프로젝트, GeoAI 구름 마스크 구현과 클래스 정의, OpenGeoAI 교재, NaGeoAI 1.9.0 배포 페이지. 이 글의 화면은 실제 프로그램 캡처이며 원본·예제 자료와 분석 결과를 구분하여 기록하였다.

댓글 없음:

댓글 쓰기

GeoAI 위성·드론 영상 분석, 재난대응 산업이 뜬다 | 재난안전과 GeoAI

GeoAI 위성·드론 영상 분석 기술이 재난대응 산업의 중심으로 떠오르고 있다. 누리호 5차 발사, 위성·드론 영상 분석 스타트업, ArcGIS 경사지 위험 분석 서비스까지 오늘의 관련 소식을 정리했다. 📌 3줄 요약 아크넥사는 위성·드론 영상을...