REMOTE SENSING

QGIS: Sentinel-2 위성영상 다운로드 및 RGB 합성 방법 소개(강릉 산불지역)

유병혁 2023. 4. 20. 01:21

안녕하세요? 이번 글은 'Copernicus Open Access Hub'에서 Sentinel-2 위성영상을 다운로드 받은 후, RGB Composite를 만드는 과정을 정리해 보겠습니다. 실습 데이터는 지난 4월 11일 발생한 강릉 산불지역을 대상으로 합니다. 4월 9일과 19일 데이터를 내려받아 RGB로 합성한 후, 산불 전과 후를 비교해 보도록 하겠습니다.

관련 뉴스: https://www.yna.co.kr/view/GYH20230411001900044

 

Sentinel-2는 유럽 우주국(ESA: European Space Agency)에서 운영하는 지구관측위성입니다. 13개의 밴드를 가지고 있으며 각 밴드의 공간 해상도는 10m, 20m, 60m로 다르게 제공됩니다.

Sentinel-2는 Sentinel-2A와 Sentinel-2B가 10일 간격으로 교차하며, 이로 인해 5일 간격으로 지구의 대부분 지역을 관측할 수 있습니다. 일부 지역에서는 Sentinel-2 위성의 스캔 경로와 해당 지역의 위치 및 각도가 조합되어 보다 짧은 반복주기를 가질 수도 있습니다. 또는 2개 이상의 타일이 해당 지역과 중첩되어 반복주기가 짧아질 수도 있습니다.

 

자, 영상을 다운로드해 볼까요?! Copernicus Open Access Hub(https://scihub.copernicus.eu/dhus/#/home)에 접속합니다.

 

참고로 QGIS에서는 이후에 소개드릴 Semi-Automatic Classification Plugin을 통해 Sentinel-2를 비롯한 다양한 위성 데이터를 직접 내려받을 수 있습니다. 그러나 해당 플러그인 역시 Copernicus Open Access Hub에서 제공하는 API를 이용한 것이므로, 공식 홈페이지 사용법을 먼저 알아보고자 하는 목적으로 정리했습니다. 

서비스 이용을 위해 회원가입 후 로그인합니다.

위성영상을 조회할 영역을 선택해 줍니다. 아래와 같이 도형으로 지정할 수 있는데요, 꼭짓점의 위치에서 마우스 오른쪽 버튼을 클릭해가며 도형을 만들어주면 됩니다. 마지막에는 마우스 오른쪽 버튼을 두번 클릭해서 도형을 정의하고, 취소하고 싶을 때는 도형 위치에서 마우스 휠 버튼을 클릭하면 됩니다.

검색 바 왼쪽 버튼을 클릭하여 'Advanced Search(고급 검색)' 창을 띄웁니다.

Sensing period(센싱 기간)을 설정합니다. 여기서는 2023년 3월 21일부터 4월 20일까지로 지정해 봤습니다.

'Misson: Sentinel-2'를 체크합니다.

검색 버튼을 클릭합니다.

다음과 같이 검색 결과가 표시됩니다.

검색 결과 중 상위 2개 데이터명은 다음과 같습니다. Sentinel-2 위성영상의 명명 규칙(naming convention)을 알아보겠습니다. 관련 글: https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-2-msi/naming-convention

MMM_MSIXXX_YYYYMMDDHHMMSS_Nxxyy_ROOO_Txxxxx_<Product Discriminator>.SAFE
  • MMM: 미션 ID (S2A/S2B)
  • MSIXXX: MSIL1C는 Level-1C 제품 수준을 나타내고 MSIL2A는 Level-2A 제품 수준을 나타냅니다.
  • YYYYMMDDHHMMSS: 데이터테이크 센싱 시작시간(datatake sensing start time)
  • Nxxyy: 처리 기준 번호(Processing Baseline number)
  • ROOO: 상대 궤도 번호(Relative Orbit number, R001 - R143)
  • Txxxxx: 타일 번호 필드(Tile Number field)
  • SAFE: 제품 포맷(유럽 표준 아카이브 포맷) / Product Format (Standard Archive Format for Europe)

다시 파일명을 확인해볼까요?! 두 데이터는 2023년 4월 19일에 취득되었으나 제품 수준에서 차이가 있습니다. 하나는 Level-2A, 다른 하나는 Level-1C 제품 수준을 나타냅니다.

  • S2A_MSIL2A_20230419T020651_N0509_R103_T52SDG_20230419T060401
  • S2A_MSIL1C_20230419T020651_N0509_R103_T52SDG_20230419T043100

Level-1C 제품은 정사보정된 대기상부(TOA: Top-Of-Atmosphere) 반사율을 제공합니다. 구름과 육지/물 마스크가 제품에 포함되어 있습니다.

반면에 Level-2A는 정사보정된 대기보정 표면 반사율(Surface Reflectance)을 제공합니다. Scene Classification 맵(구름, 구름 그림자, 식생, 토양/사막, 물, 눈 등)이 제품에 포함되어 있습니다.

관련 글: https://sentinels.copernicus.eu/web/sentinel/technical-guides/sentinel-2-msi/products-algorithms

그림 출처: https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-2-msi/product-types/level-2a

 

여기서는 Level-2A 제품을 선택하겠습니다. 'Download Product' 버튼을 클릭하면 다운로드가 시작됩니다.

이번에는 2023년 4월 9일 취득 데이터를 다운로드 받아보겠습니다.

 

4월 9일과 4월 10일 데이터를 내려받았는데요, 먼저 4월 9일 데이터를 열어보겠습니다. 내려받은 zip 파일의 압축을 해제하면 다음과 같은 폴더 구조를 가지고 있습니다.

각 폴더 구조를 요약한 그림(출처: https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-2-msi/data-formats)입니다. 이중 GRANULE 하위폴더는 이미지 데이터(granules/tiles)와 품질 지표(quality masky masks, quality reports 등)가 JPEG2000(확장자: *.jp2) 포맷으로 제공됩니다. 

GRANULE 하위 폴더는 다시 'L2A_T52SDG_A040712_20230409T021254' 폴더가 위치하고 있고, 해당 폴더에는 다음과 같은 구조가 보입니다. 여기서 'IMG_DATA'를 클릭해 보겠습니다.

이미지 데이터는 다시 R10m, R20m, R60m 폴더로 구분됩니다.

Sentinel-2 데이터의 공간 해상도(Resolutions)는 밴드에 따라 10m, 20m, 60m로 구분됩니다. 아래 그림을 참고하시면 되겠습니다.

출처: https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-2-msi/resolutions/spatial

Sentinel-2 위성영상에서 공간 해상도가 높은 10m급 데이터는 더 많은 용량을 차지하게 되므로, 관측 목적에 따라 서로 다른 해상도의 영상을 제공함으로써 용량을 효율적으로 관리하고 있습니다. 아래 그림은 각 밴드별 파장대와 해상도를 한눈에 볼 수 있게 제공하고 있어 이해해 도움이 되실 것 같습니다.

출처: https://www.eoportal.org/ftp/satellite-missions/c/S2-2022_270722/S2-2022_Auto16.jpeg

공간 해상도가 가장 높은 B2, B3, B4, B8 밴드를 열어보겠습니다. 먼저 4월 9일 B2, B3, B4, B8 밴드를 레이어 추가해 보겠습니다. 탐색기 패널에서 해당 밴드를 선택한 후, 레이어 패널로 드래그 앤 드롭 해주시면 됩니다.

다음과 같이 개별 밴드들이 추가되었는데요, 이것을 RGB Composite를 통해 컬러로 표현해 보겠습니다. RGB Composite는 위성영상에서 빛의 삼원색(Red, Green, Blue)을 조합하여 색상으로 표현한 이미지입니다. 

해당 작업을 위해 QGIS에 'Semi-Automatic Classification Plugin'을 추가 설치합니다. '플러그인 > 플러그인 관리 및 설치'에서 해당 플러그인을 검색 후 설치해 주시면 됩니다. 설치 후 RGB Composite 생성을 위해 메뉴 바에서 'SCP > Band Set'을 실행합니다.

Single band list(단일 밴드 목록) 오른쪽에 위치한 'Refresh list(목록 새로고침)'을 클릭하면, 현재 레이어 패널에 위치한 밴드들이 목록에 추가됩니다.

밴드 목록을 선택하고 'Add band to Band set(밴드 셋에 밴드 추가)'를 클릭합니다.

다음과 같이 Band set 1에 4개 밴드가 추가되었습니다. Band set 1에서 B02는 1, B03은 2, B04는 3, B08은 4로 지정된 상태입니다. 이제 해당 창을 닫겠습니다.

이제 SCP Working Toolbar에서 RGB 합성 기준을 지정해 주시면 됩니다.

True Color 이미지는 위성영상에서 Red, Green, Blue 밴드를 그대로 사용하여 자연색을 재현하는 이미지입니다. Sentinel-2 이미지에서 Red, Green, Blue 밴드는 B04-B03-B02 순이며  앞서 정의한 Band set 1 번호로 정의하면 3-2-1에 해당합니다.

그림 출처: https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/composites/

따라서 True Color 이미지는 'RGB = 3-2-1'을 적용해 주시면 되겠습니다.

RGB Composite를 적용하면, 다음과 같이 실제보다 더 밝게 보일 수 있습니다. 이것은 스트레칭(stretching)을 사용하기 때문입니다. 스트레칭은 데이터 값의 범위를 재조정해서 밝기의 대비를 강조하는 방법으로, 최소값과 최대값을 사용하여 데이터의 전체 범위를 0부터 255까지 재조정하여 표현합니다. 따라서 데이터의 스트레칭은 적정한 범위에서 설정해야 합니다.

관심 영역으로 화면을 확대합니다.

아래 버튼을 클릭하면 현재 지도 영역에서 최소값과 최대값에 해당하는 픽셀 값으로 스트레칭을 시행합니다. 또다른 방식은 표준편차를 기반으로 최소값과 최대값을 조정하는 것입니다.

이번에는 False Color 이미지를 확인해 보겠습니다. True Color와는 달리, False Color 이미지는 인간이 볼 수 없는 적외선 (infra-red) 대역의 정보를 시각적으로 표현합니다.

False Color 이미지는 위성영상에서 NIR(Near infra-red), Red, Green 밴드를 사용합니다. Sentinel-2 이미지에서 NIR, Red, Green 밴드는 B08-B04-B03 순이며  앞서 정의한 Band set 1 번호로 정의하면 4-3-2에 해당합니다.

따라서 False Color 이미지는 'RGB = 4-3-2'를 적용해 주시면 되겠습니다.

적외선 대역에서는 식물이 나타내는 열을 감지할 수 있습니다. 이에 False Color 이미지에서는 식물이 더욱 밝게 나타내므로, 이를 통해 식물의 형태와 상태를 더욱 잘 파악할 수 있습니다.

이번에는 4월 19일 위성 데이터를 같은 방식으로 처리해 보겠습니다(동일 과정으로 반복 과정에 대한 설명은 생략합니다). 과정상 차이점은, Band set 1은 4월 9일 이미지를 정의하고 있기 때문에 Band set 2를 추가해서 4월 19일 이미지를 정의하는 것입니다. 다음과 같이 'Add a new band set'을 클릭해 주시면 됩니다.

다음과 같이 Band set 2도 정의되었습니다.

'MapSwipe Tool' 플러그인을 통해 4월 9일과 4월 19일 Sentinel-2 위성영상을 비교해 보겠습니다. 4월 19일에 해당하는 Virtual Band Set 2 레이어를 선택한 후, '플러그인 > Map swipe tool > Map swipe tool' 또는 플러그인 툴바에서 다음 아이콘을 클릭해 줍니다.

지도 뷰에서 화면을 분할하여, 산불 전과 산불 후 영상을 보실 수 있습니다. 여기까지 Sentinel-2 위성영상을 다운로드 받고 RGB 이미지로 합성하는 과정을 정리해 봤습니다.