Satellite Data Analysis and Visualization web server
想定環境
ホストにDocker/DockerComposeが導入されていること
Python 3.6 (コンテナ内)
Tellus を利用したサンプルプロジェクトです。
Jupyter Notebookをベースに、Tellusから取得できる衛星画像を利用した様々な分析・可視化をし、結果をAPIするWebサーバです。
参考実装として、雪質の分析・可視化を行うAPIが実装されています。解析の詳細はこちら。
Tellus Platformでの動作を想定しているため、それ以外の環境ではTellusAPIの利用に失敗する場合があります。また、データポリシー にご注意ください。
NAME | 役割 | 技術要素など |
---|---|---|
sdav-proxy | プロキシサーバー | nginx |
sdav-gateway | APIサーバ | kernel gateway |
sdav-jupyter | 分析環境・APIのコード | jupyter notebook |
詳細は.dockerを参照してください。
DockerとDockerComposeをインストールします。
sudo apt update
sudo apt install git
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt update
sudo apt-get install -y docker-ce
sudo gpasswd -a $(whoami) docker
sudo chgrp docker /var/run/docker.sock
sudo service docker restart
# ログインし直すとdockerがsudoなしで利用できる
docker info
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v
git clone https://github.com/tellusxdp/sdav.git
cd sdav/.deploy
./local-up.sh
name | description | URI | output format |
---|---|---|---|
original image | Tellus APIの画像をそのまま出力 | local: http://localhost:8080/img/{kind}/{z}/{x}/{y} production: https://0.0.0.0/api/img/{kind}/{z}/{x}/{y} |
html |
params | description | sample |
---|---|---|
kind | 画像の種類 | osm, band1, band2, band3, band4 |
z | ズーム値 (大きいほどズーム) | 13 |
x | 地図のx軸の値 | 7252 |
y | 地図のy軸の値 | 3234 |
http://localhost:8080/img/osm/13/7252/3234
name | description | URI | output format |
---|---|---|---|
NDSI image | NDSIを計算した結果を出力 | local: http://localhost:8080/ndsi_img/{z}/{x}/{y} production: https://0.0.0.0/api/ndsi_img/{z}/{x}/{y} |
html |
SAR analysis image | 2枚のSAR画像を比較して解析した結果を出力 | local: http://localhost:8080/sar_analysis_img production: https://0.0.0.0/api/sar_analysis_img |
html |
params | description | sample |
---|---|---|
kind | 画像の種類 | osm, band1, band2, band3, band4 |
z | ズーム値 (大きいほどズーム) | 13 |
x | 地図のx軸の値 | 7252 |
y | 地図のy軸の値 | 3234 |
http://localhost:8080/ndsi_img/13/7252/3234
http://localhost:8080/sar_analysis_img
今回のデータ解析で扱う Tellus API ではいくつかの衛星データが利用可能です。今回はAVNIR-2が受信する光学画像とPALSAR-2が受信するSAR画像を利用します。
一部正式リリース前のサンプルAPIが含まれます。
太陽の出す可視・赤外線を元に、地上で反射した光を観測するセンサで捉えたデータを画像化したものです。各波長での反射の強さは水・土壌・植物などによって異なるため、複数波長を組み合わせることで物質の認識が可能になります。
Tellus APIでは、AVNIR-2の4バンドが利用可能です。
band | 波長 | 色 |
---|---|---|
band1 | 0.42~0.50μm | 青 |
band2 | 0.52~0.60μm | 緑 |
band3 | 0.61~0.69μm | 赤 |
band4 | 0.76~0.89μm | 近赤外線(不可視光線) |
SAR (Synthetic Aperture Radar; 合成開口レーダー) はマイクロ波を地表面に斜めに照射し、地表面からの後方散乱波を受信したものです。SARのマイクロ波は雲を通過し観測に太陽光を必要としないため、天候に左右されず、夜間でも観測が可能という特徴があります。
band | 周波数 |
---|---|
L band | 1.2GHz帯(波長 23cm) |
光学画像(AVNIR-2) | SAR画像(PALSAR-2) | 備考 | |
---|---|---|---|
分解能 | 10m | 3~100m | SARの高分解能モードでは3mまで分解可能 |
太陽光 | 必要 | 不要 | 光学画像は雲の影響を受けるが、SAR画像は受けにくい |
入射角 | 0~44度 | 8~70度 | SARは斜めに飛ばした電波の跳ね返りを観測するため、入射角が必要 |
観測幅 | 70km | 50km~490km | SARの広域観測モードは広範囲を一度に観測可能 |
衛星画像を取得できるTellus APIの挙動を確認するとともに、データの読み込み・Notebook上での画像の確認・変換処理・可視化といった基本的操作を行います。またその中で、富士山の雪を直感的に識別できるか調査します。
1.複数bandを組み合わせてtrue画像作成
2.明度の画像抽出
3.閾値でフィルタリングし雪かどうかを判定
直感的な色や明るさでフィルタリングの作成を行いました。 雪と土や森は色が明らかに違うため識別が容易かと思われましたが、陰になっている部分が想像以上に暗く、判別が難しいことが明らかになりました。また、道などのコンクリート部分も白く抽出されてしまうことが分かりました。
今回は富士山を対象に行いましたが、スキー場であれば基本的に同一方向を向いており光の当たり具合も似ていると思われるため、スキー場毎に閾値を設定すればスキー場毎の雪判定はできそうです。
光学画像の複数bandを組み合わせることで雪かどうかを判定するためのNDSI(Normalized Difference Snow Index)を作成します。ただし、AVNIR-2では得られないデータが必要となるため、一部代替手段を模索します。また、明度による雪判定と合わせ、雪質判定機を作成します。
1.NDSIを作成
2.前のNotebookの雪判定をマスクとして作成
3.NDSIの結果を雪判定マスクでtrue画像を重ねる
光学画像の不可視光線を利用することで、NDSIを作成しました。本来は中間赤外線が必要だが、AVNIR-2では提供されていないため、近赤外線で代用しました。 赤外線を利用することで、色では捉えられない情報(植生の深さや水の有無など)を認識可能となり、今回はこれを使い雪質の判定を試みました。
結果として、近赤外線を利用したため植生に敏感に反応するものとなった(1の赤い部分)。雪かどうかでも多少色が分かれているものの、雪部分と岩部分の境界が微妙となっており、明度による分類よりも精度が落ちてしまいました。
そこで、明度で雪かどうかの判定をするマスク作成したのち、雪として判定した部分に対してNDSIを計算して色付けしたものを最終的なアウトプットとしました。色の濃淡は出ましたが、雪質(ふわふわ、べちょべちょ、カチカチなど)に関しては実際の雪と一致しているか検証する必要が残っています。
SAR画像をTellus APIから取得し、データの確認を行います。また、9月と12月に取得された2種類の富士山のSAR画像を利用することで、そのデータの違いから雪の判定を試みます。
1.異なる日時のSAR画像を読み込み(左が9月、右が12月)
2.2つのSAR画像の差分を抽出
3.ノイズを取り除き可視化
SAR画像は複数偏波(HH, VV, HV, VH)がある場合もあるが、今回は単一の偏波(HH)の提供だったため、偏波の差分の検証は行わず、2つの日時のデータの差分を利用することで、雪の判定を試みました。
夏と冬の同一位置の差分を抽出した結果、ノイズが目立ち判断が難しかったため、ガウシアンフィルタを利用し平滑化することで、差分を見やすく加工しました。
結果として、富士山の中腹部の変化が激しいことが判明しましたが、この変化が雪によるものなのか、草木が枯れたことによるものなのかまでの判断は難しいと言えます。
今回の検証において、光学画像とSAR画像にはそれぞれメリット・デメリットがありました。光学画像はのメリットとして、可視光線を含むため直感的な解析を行うことができました。その上で近赤外線なども利用することで、目で見える可視光線以上のアウトプットが可能でした。
一方デメリットとして、雲が雪として判定されてしまう問題がありました。以下は光学画像による富士山の右上部分アウトプットですが、雲も明度が高いため雪として判定され、青くなっていることがわかります。
一方でSAR画像は太陽光を利用しないため、雲や天候の影響を受けにくく安定したアウトプットを出力可能という利点があります。
光学画像の時系列データが入手できれば分析の幅は広がります。複数の日時のデータを用いて、雪が降った前後の光学画像を比較した分析、雲がある時/ない時の判定を行うことが考えられます。
また、SAR画像では複数偏波(HH, VV, HV, VH)を利用した検証・同一日時の光学画像を確認しながらの検証・光学画像とSAR画像を組み合わせた検証を行うことが考えられます。