ISCE2 で Sentinel-1 の干渉SARをやってみる
概要
干渉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のドキュメント
環境構築についてはISCE2のREADME.md
に記載してあるが、isce/isce2 - Docker Imageという環境構築済みのDockerイメージがあるためこれを使用する。ここでツールの実際的な使い方は、以下のページを参考にした。
環境構築
- 以下のコマンドを実行してコンテナを立ち上げる。
git clone https://github.com/room-208/isce2-insar.git
cd isce2-insar
docker compose up -d
-
1.の実施後以下の3つのDockerコンテナが立ち上がるので、VSCodeのRemote Developmentを使用してコンテナの中に入る。各コンテナは以下の役割を持つ。
-
isce2-insar-stac-search-1
: 干渉SARに使用するデータをダウンロードするコンテナ -
isce2-insar-isce2-insar-1
: 干渉SARを計算するコンテナ -
isce2-insar-analyze-insar-1
: 干渉SARの結果を可視化するコンテナ
-
-
isce2-insar-stac-search-1
のコンテナ内で以下のコマンドを実行し、Copernicus Data Space Ecosystemのユーザー名とパスワードの環境変数を設定する。
export COPERNICUS_USER="Copernicus Data Space Ecosystemのユーザー名"
export COPERNICUS_PASSWORD="Copernicus Data Space Ecosystemのパスワード"
-
isce2-insar-isce2-insar-1
のコンテナ内で以下のコマンドを実行し、~/.netrc
ファイルを作成する。そしてEarthdataのユーザー名とパスワードを記入する。
nano ~/.netrc
machine urs.earthdata.nasa.gov
login "Earthdataのユーザー名"
password "Earthdataのパスワード"
Sentinel-1 SLC画像と軌道ファイルのダウンロード
本章ではisce2-insar-stac-search-1
のコンテナを使用する。
干渉ペアの検索
- 以下を実行し干渉ペアの検索を行う。
start_date
とend_date
は必要に応じて変更する。search_insar_pair.pyはCopernicus 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.の実行後、検索結果が
/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
-
/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.xml
とsecondary.xml
が呼び出される形となっている。unwrap処理を行いたい場合はtopsApp.xml
のコメントアウトを外す。処理のオプションについてはISCE2のドキュメントが非常に参考になる。
<?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>
<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>
<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/applications
をPATH
に追加しているため、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