✈️

ISCE2 で Sentinel-1 の干渉SARをやってみる

2024/09/21に公開

概要

干渉SARを計算するツールであるISCE2を使用して、Sentinel-1の干渉SARを計算する。本記事では検証に使用したisce2-insarのリポジトリを使用して説明する。

環境

  • Ubuntu 20.04 LTS
  • Docker 27.1.2
  • Docker Compose v2.7.0
  • VSCode 1.92.2
  • ISCE2 2.6.3

ISCE2のドキュメント

環境構築についてはISCE2README.mdに記載してあるが、isce/isce2 - Docker Imageという環境構築済みのDockerイメージがあるためこれを使用する。ここでツールの実際的な使い方は、以下のページを参考にした。

環境構築

  1. 以下のコマンドを実行してコンテナを立ち上げる。
git clone https://github.com/room-208/isce2-insar.git
cd isce2-insar
docker compose up -d
  1. 1.の実施後以下の3つのDockerコンテナが立ち上がるので、VSCodeのRemote Developmentを使用してコンテナの中に入る。各コンテナは以下の役割を持つ。

    • isce2-insar-stac-search-1 : 干渉SARに使用するデータをダウンロードするコンテナ
    • isce2-insar-isce2-insar-1 : 干渉SARを計算するコンテナ
    • isce2-insar-analyze-insar-1 : 干渉SARの結果を可視化するコンテナ
  2. isce2-insar-stac-search-1のコンテナ内で以下のコマンドを実行し、Copernicus Data Space Ecosystemのユーザー名とパスワードの環境変数を設定する。

export COPERNICUS_USER="Copernicus Data Space Ecosystemのユーザー名"
export COPERNICUS_PASSWORD="Copernicus Data Space Ecosystemのパスワード"
  1. isce2-insar-isce2-insar-1のコンテナ内で以下のコマンドを実行し、~/.netrcファイルを作成する。そしてEarthdataのユーザー名とパスワードを記入する。
nano ~/.netrc
~/.netrc
machine urs.earthdata.nasa.gov
    login "Earthdataのユーザー名"
    password "Earthdataのパスワード"

Sentinel-1 SLC画像と軌道ファイルのダウンロード

本章ではisce2-insar-stac-search-1のコンテナを使用する。

干渉ペアの検索

  1. 以下を実行し干渉ペアの検索を行う。start_dateend_dateは必要に応じて変更する。search_insar_pair.pyCopernicus STAC APIからSentinel-1 SLC画像を検索し、軌道番号や撮像の位置を照合して、干渉SARのペアとして適切か検索を行っている。
cd /workspace/stac-search/src
python search_insar_pair.py --start_date 2024-08-01 --end_date 2024-09-01
  1. 1.の実行後、検索結果が/workspace/data/stac/insar.csvへ保存されるので確認する。
/workspace/data/stac/insar.csv
first_id,second_id
S1A_IW_SLC__1SDV_20240804T204328_20240804T204355_055068_06B592_4428.SAFE,S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE
S1A_IW_SLC__1SDV_20240804T204353_20240804T204420_055068_06B592_576E.SAFE,S1A_IW_SLC__1SDV_20240816T204353_20240816T204420_055243_06BBF9_C8EC.SAFE
S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE,S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE
S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE,S1A_IW_SLC__1SDV_20240828T204329_20240828T204355_055418_06C26C_E9F0.SAFE
  1. /workspace/data/stac/insar.csvから今回は以下の2つの干渉SARのペアを用いることにする。
    • S1A_IW_SLC__1SDV_20240804T204328_20240804T204355_055068_06B592_4428.SAFE
    • S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE


S1A_IW_SLC__1SDV_20240804T204328_20240804T204355_055068_06B592_4428.SAFEのサムネイル画像


S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFEのサムネイル画像

干渉ペアのダウンロード

以下を実行し干渉ペアの検索で選んだ画像をダウンロードする。画像は/workspace/data/safe/zipへ保存される。

cd /workspace/stac-search/src
python download_insar_pair_safe.py --first_id S1A_IW_SLC__1SDV_20240804T204328_20240804T204355_055068_06B592_4428.SAFE --second_id S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE

軌道ファイルのダウンロード

以下を実行し軌道ファイルのダウンロードを行う。軌道ファイルは/workspace/data/orbitへ保存される。

cd /workspace/stac-search/src
python download_orbit.py

ISCE2を用いた干渉SARの計算

本章ではisce2-insar-isce2-insar-1のコンテナを使用する。

Sentinel-1 SLC画像の解凍

干渉ペアのダウンロードでダウンロードした画像を/workspace/data/safe/unzipへ解凍する。

cd /workspace/data/safe/zip
unzip S1A_IW_SLC__1SDV_20240804T204328_20240804T204355_055068_06B592_4428.SAFE -d ../unzip
unzip S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE -d ../unzip

設定ファイルの記述

ISCE2が読み込む設定ファイルとして以下のxmlファイルを記述する。ここでメインの設定ファイルはtopsApp.xmlであり、この中でreference.xmlsecondary.xmlが呼び出される形となっている。unwrap処理を行いたい場合はtopsApp.xmlのコメントアウトを外す。処理のオプションについてはISCE2のドキュメントが非常に参考になる。

/workspace/input-files/topsApp.xml
<?xml version="1.0" encoding="UTF-8"?>
<topsApp>
  <component name="topsinsar">
    <property name="Sensor name">SENTINEL1</property>
    <component name="reference">
        <catalog>/workspace/input-files/reference.xml</catalog>
    </component>
    <component name="secondary">
        <catalog>/workspace/input-files/secondary.xml</catalog>
    </component>
    <property name="swaths">[1, 2, 3]</property>
    <!--<property name="do unwrap">True</property>-->
    <!--<property name="unwrapper name">snaphu_mcf</property>-->
  </component>
</topsApp>
/workspace/input-files/reference.xml
<component name="reference">
    <property name="orbit directory">/workspace/data/orbit</property>
    <property name="output directory">/workspace/output/reference</property>
    <property name="safe">/workspace/data/safe/unzip/S1A_IW_SLC__1SDV_20240804T204328_20240804T204355_055068_06B592_4428.SAFE</property>
</component>
/workspace/input-files/secondary.xml
<component name="secondary">
    <property name="orbit directory">/workspace/data/orbit</property>
    <property name="output directory">/workspace/output/secondary</property>
    <property name="safe">/workspace/data/safe/unzip/S1A_IW_SLC__1SDV_20240816T204328_20240816T204355_055243_06BBF9_E926.SAFE</property>
</component>

干渉SARの計算

/workspace/outputへ移動し干渉SARの計算を実行する。/usr/lib/python3.8/dist-packages/isce/applicationsPATHに追加しているため、topsApp.pyを直接実行できる。/workspace/outputで実行する理由としては、topsApp.pyを実行するディレクトリに解析結果が吐かれるためである。

cd /workspace/output
topsApp.py ../input-files/topsApp.xml 

干渉SARの結果の可視化

本章ではisce2-insar-analyze-insar-1のコンテナを使用する。

以下を実行すると差分干渉画像を得ることができる。この干渉ペアではうまく縞模様を確認できる部分とノイズで意味のない情報になっている部分を確認できる。

cd /workspace/analyze-insar/src
python plot.py


差分干渉画像

参考文献

Discussion