衛星データ前処理 入門　〜Sentinelローデータを様々な方法で前処理する〜

# はじめに
衛星リモートセンシングの領域でSentinelシリーズは最も重要かつ広く利用されているデータソースの一つです。
研究機関から産業界まで多くの人々がSentinelシリーズを活用しており、Sentinel-1 SARデータの防災利用やSentinel-2 光学衛星データによる画像解析等の技術解説記事が多く登場しています。
一方で、分析のために必要な「前処理」に関する技術記事はあまり多くないため、本記事ではESAの公式ツールであるSNAP（Sentinel Application Platform）を使って、生データから分析可能なデータへと変換する手順を解説します。
前処理プロセスの理解は後続の分析プロセスにおける精度改善や応用範囲がの拡大にも繋がるので、一歩進んだ分析をしたい方の参考になればと思います。


# Sentinelシリーズの基礎知識
Sentinelシリーズには複数種類の衛星データがあり、それぞれ異なる特徴と応用分野を持っています。

Sentinel-1: SAR衛星で、雲を透過するレーダーを発することで、天候に関わらず地表を観測できます。災害モニタリングや地盤沈下の検出などに広く利用されています。
Sentinel-2: 光学衛星で、高解像度の可視光・近赤外画像を提供します。植生モニタリングや土地利用分析などに最適です。
※他にも3~6シリーズもありますが、ここでは割愛します（興味ある方は調べてみて下さい）

# データ前処理の必要性
昨今、多くの衛星データプラットフォームが登場してきており、そこでは前処理済みのデータ提供されていることが多いです。
例えば、Google Earth EngineではSentinel-1 GRDデータが提供されており、以下の処理が施されたデータ提供されています。

1. 軌道ファイルの適用
2. GRD境界ノイズ除去
3. サーマルノイズ除去
4. 放射計測の補正値の適用
5. 地形補正（オルソ補正）
https://developers.google.com/earth-engine/guides/sentinel1?hl=ja

そのため、典型的な解析をする際は前処理を自ら行う必要がなく、分析を実行できてしまいます。

しかし、以下のような場合は自分で前処理を行う必要があります。
- プラットフォームに搭載されていない古いデータを使用する場合
- InSAR解析などの高度な前処理が必要となるSLCプロダクトを使用する場合
- 特定の目的のために前処理パラメータをカスタマイズしたい場合


# SNAPを使ったSentinelデータの前処理
1. SNAPのインストール
[ESA SNAP公式サイト](https://step.esa.int/main/download/)からソフトウェアをダウンロードします。
自身のOS（Windows、macOS、Linux）に合わせたインストーラを選択します。
インストーラの指示に従い、基本的にデフォルト設定でインストールを完了させます。

2. Sentinelデータの取得
衛星データは以下の公式サイトから取得できます。
Copernicus Open Access Hub：すべてのSentinelデータ
ASF DAAC：Sentinel-1 SARデータ中心
※ユーザー登録後に任意のエリア・時間・プロダクト名を指定でダウンロード可能データは通常、.SAFEまたは.zip形式でダウンロードされます。
SAFEとは、画像データ本体、メタデータ（XML形式）、補助ファイル（測地情報、品質情報など）をまとめた標準的なフォルダ構造です。

3. SNAP GUIの基本操作
SNAPを起動すると、以下の主要なパネルが表示されます：
Product Explorer：開いたデータの一覧表示
World View：地図表示で観測範囲を確認
Navigation：画像のズーム・移動ツール
Layer Manager：表示レイヤーの管理

4. データの読み込み
メニューから「File > Open Product...」を選択します。
ダウンロードした.zipまたは.SAFEフォルダを選択します。
読み込みが完了すると、「Product Explorer」パネルにデータが表示されます。

### SNAPの画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76983/f8ecfe0d-e08d-4898-89ba-fe70411cc45e.png)


# Sentinel-1 SARデータの前処理ステップ
ここではSentinel-1 SARを例に前処理の方法を紹介します。

Sentinel-1 SARデータの標準的な前処理フローは以下の通りです。
SNAPのウィンドウ上で該当する処理を選択するだけで、処理が実行されていきます。

①軌道ファイルの適用（Apply Orbit File）
メニュー：Radar > Apply-Orbit-File
機能：衛星の正確な軌道情報を適用し、地理的位置精度を向上させます。
②放射計測補正（Calibration）
メニュー：Radiometric > Calibration
機能：センサーの特性による差異を補正し、σ⁰（シグマゼロ）やdB単位への変換を行います。
③スペックルフィルタリング（Speckle Filtering）
メニュー：Speckle Filtering > Single Product Speckle Filter
機能：SARデータ特有の粒状ノイズ（スペックル）を軽減します。
④地形補正（Terrain Correction）
メニュー：Geometric > Terrain Correction > Range-Doppler Terrain Correction
機能：地形による歪みを補正し、地理座標系に変換します。
⑤サブセット作成（必要に応じて）
メニュー：Raster > Subset
機能：関心領域のみを切り出し、処理時間と保存容量を削減します。
⑥処理結果のエクスポート
処理が完了したデータは以下の手順で保存できます：
メニュー：File > Export > GeoTIFF（または他の形式）
地理情報を保持したまま、さまざまな形式（GeoTIFF、netCDF等）でエクスポート可能です。

処理の各ステップごとに生成されたプロダクトは、左上の「Product Explorer」ウィンドウに保存されています。

### 前処理後のSARデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76983/8c426f13-8326-4de9-bc9a-3157c0980f99.png)



# 効率化のためのバッチ処理　（Graph Builderを使った一括処理）
上述の方法はステップ毎に画像を確認できるので処理内容の理解には効果的です。
しかし、複数の画像を繰り返し処理する場合、ステップごとにクリックする必要があるため効率が悪いです。
そこで、個別ステップを一つずつ実行する代わりに、Graph Builderを使って前処理フローを自動化できます。

1. Graph Builderを開く
メニュー：Tools > Graph Builder

2. 処理ノードの追加と連結
グラフウィンドウに処理アイコンを追加して、ノードで繋ぐことで一連の処理を設計できます。
各ノード間を接続してデータの流れを作成します。ノードをダブルクリックして個別設定が可能です。
Read：入力ファイルを指定
Apply-Orbit-File：軌道データ適用
Calibration：放射計測補正
Speckle Filter：ノイズ除去
Terrain Correction：地形補正
Write：出力ファイル設定

3. グラフの保存と実行
File > Save As で処理フローを.xmlファイルとして保存
処理グラフを保存しておくことで、再利用することも可能
Runボタンでプロセスを実行

### 一連の処理をグラフノードで設計（Runボタンでまとめて実行可能）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76983/e75100a4-be5d-4ee5-9675-2ab8bffa7355.png)


# 複数ファイルの一括処理（Batch Processing）
複数のSentinelデータファイルをまとめて処理することもできます。

1. メニュー：Graph Processing > Batch Processing
2. 作成済みの.xmlグラフを選択
3. 複数の入力ファイル（またはフォルダ）を指定
4. 出力フォルダを設定
5. Runボタンで一括処理開始

### Batch Processingによる一括処理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76983/1f1d993a-91d5-4438-ad38-b8d8abaa01e3.png)



# コマンドライン上での実行
SNAPにはgpt（Graph Processing Tool）というコマンドラインツールが付属しており、自動化やスクリプトから実行することも可能です。

gptはApplicationsフォルダのbinフォルダの中に保存されています
 /Applications/esa-snap/bin/gpt


## コマンドフォーマット
定義した処理グラフのxmlファイル、入力データ（zip or SAFE）、出力ファイル名を指定します
```
gpt preprocess_s1_grdh.xml -Pinput=/path/to/S1_GRD.zip -Poutput=/path/to/output.tif
```

以下のようなシェルスクリプトを作成することで、複数ファイルを連続処理できます。

```
bash#!/bin/bash

GRAPH=/home/user/graphs/preprocess_grdh.xml
INPUT_DIR=/home/user/data/
OUTPUT_DIR=/home/user/output/

for file in ${INPUT_DIR}/*.zip; do
    base=$(basename "$file" .zip)
    gpt $GRAPH -Pinput="$file" -Poutput="${OUTPUT_DIR}/${base}_processed.tif"
done
```

# まとめ
Sentinelシリーズの衛星データは、地球観測において非常に有用なデータであり、今後もより多くの活用が期待されています。
衛星データプラットフォームの普及で分析・活用のハードルは飛躍的に下がってきています。
加えて、柔軟な前処理ができるようになると、その利用の幅と価値は更に広がると思います。
本記事が、今後の様々な領域での衛星データ活用の参考になればと思います。