【ゼロからのTellusの使い方】Jupyter NotebookでAVNIR-2/ALOSによる光学画像を取得する
ALOSに搭載された光学センサ「AVNIR-2/ALOS」によるの光学画像を、Tellus上のJupyter Notebookを使って取得する方法をご紹介します。
記事作成時から、Tellusからデータを検索・取得するAPIが変更になっております。該当箇所のコードについては、以下のリンクをご参照ください。
https://www.tellusxdp.com/ja/howtouse/access/traveler_api_20220310_
firstpart.html
2022年8月31日以降、Tellus OSでのデータの閲覧方法など使い方が一部変更になっております。新しいTellus OSの基本操作は以下のリンクをご参照ください。
https://www.tellusxdp.com/ja/howtouse/tellus_os/start_tellus_os.html
Tellusは、さくらインターネット株式会社が経済産業省から受託した、政府衛星データのオープン&フリー化及びデータ利用環境整備事業における衛星データプラットフォームのことで、登録するとブラウザから様々な衛星データを利用することができます。
本記事ではTellusのJupyter Notebookを使ってAVNIR-2/ALOSによる光学画像を取得する方法を紹介します。
TellusでJupyter Nootbookを使う方法は、「Tellusの開発環境でAPI引っ張ってみた」をご覧ください。
(1) まずはAPIを使ってみよう
AVNIR-2とはALOS(JAXAの陸域観測技術衛星だいち)に搭載された光学センサのことで、可視光領域から近赤外領域にかけての波長で地上を観測していました(2011年に運用停止)。
そんなAVNIR-2が取得した光学画像をTellusでも利用することができるので、実際にJupyter Notebook上で表示してみましょう。
APIでAVNIR-2の画像を取得するには、ズーム率とタイル座標、その他パラメータを設定する必要があります。
https://gisapi.tellusxdp.com/blend/{z}/{x}/{y}.png?opacity={opacity}&r={r}&g={g}&b={b}&rdepth={rdepth}&gdepth={gdepth}&bdepth={bdepth}&preset={preset}
z | 必須 | Zoom Level 0-13 |
x | 必須 | タイルのX座標 |
y | 必須 | タイルのY座標 |
opacity | 任意 | 透過度 0~1 |
r | 任意 | カラーのバンド指定 1,2,3,4 デフォルト:3 |
g | 任意 | カラーのバンド指定 1,2,3,4 デフォルト:2 |
b | 任意 | カラーのバンド指定 1,2,3,4 デフォルト:1 |
rdepth | 任意 | カラーバンドの濃さ 0~2 デフォルト:1 |
gdepth | 任意 | カラーバンドの濃さ 0~2 デフォルト:1 |
bdepth | 任意 | カラーバンドの濃さ 0~2 デフォルト:1 |
preset | 任意 | true / false / natural / ndvi |
まずは複雑なことは考えず、Pythonのサンプルコードをそのまま実行してみましょう。
import os, json, requests, math
from skimage import io
from io import BytesIO
import matplotlib.pyplot as plt
%matplotlib inline
TOKEN = "ここには自分のアカウントのトークンを貼り付ける"
def get_AVNIR_image(zoom, xtile, ytile, opacity=1, r=3, g=2, b=1, rdepth=1, gdepth=1, bdepth=1, preset=None):
url = "https://gisapi.tellusxdp.com/blend/{}/{}/{}.png?opacity={}&r={}&g={}&b={}&rdepth={}&gdepth={}&bdepth={}".format(zoom, xtile, ytile, opacity, r, g, b, rdepth, gdepth, bdepth)
if preset is not None:
url += '&preset='+preset
headers = {
"content-type": "application/json",
"Authorization": "Bearer " + TOKEN
}
r = requests.get(url, headers=headers)
return io.imread(BytesIO(r.content))
img = get_AVNIR_image(10,909,403)
io.imshow(img)
トークンはマイページのAPIアクセス設定(要ログイン)から取得してください。
エラーが出なければ、東京の築地周辺の光学画像が表示されます。画像中央の緑の箇所は浜離宮恩賜庭園です。
(2) skimageにおけるpng画像のデータ構造
APIで取得できる画像はpng形式です。
各ピクセルにはRGBとアルファ値(透明度)の色情報が収められています(画像によってはアルファ値がない場合もあります)。
print(img[0,0])
出力
[ 55 68 93 255]
これは取得した画像の一番左上のピクセルの色情報です。値はそれぞれ[赤、緑、青、アルファ値]を意味しており、0から255の範囲で表現されます。
※今回はscikit-imageというPythonの画像処理ライブラリを利用していますが、ライブラリによっては色がこの順番とは限りません。例えばOpenCVでは青、緑、赤、アルファ値の順になります。
(3) AVNIR-2のカラーバンド
AVNIR-2は4つのバンド(波長帯)を持つセンサーです。
Band1 | 0.42 ~ 0.50µm |
Band2 | 0.52 ~ 0.60µm |
Band3 | 0.61 ~ 0.69µm |
Band4 | 0.76 ~ 0.89µm |
Band1を青、Band2を緑、Band3を赤として合成すると、先程取得したような、人間が普段感じるのに近い色合いの画像となります。
AVNIR-2のBand4は近赤外領域の波長です。そして植物の葉は近赤外線領域の波長を強く反射します。
この性質を利用して観測範囲の植物をより目立たせるNatural Colorという合成方法があります。
Natural Colorでは、青にBand1、緑にBand2、赤にBand3を割り当てて合成します。
※青にBand1、緑にBand2、赤にBand3を割り当てる合成方法はTrue Colorと呼ばれています。
img_natural = get_AVNIR_image(zoom=Z,xtile=X,ytile=Y,r=3,g=4,b=2)
io.imshow(np.hstack((img, img_natural)))
右側の画像がNatural Color合成によるものです。全体的に赤みがかって見えますが、その中で画像中央の浜離宮恩賜庭園が緑に浮き上がっているのがわかるでしょうか。この緑に浮き上がっている部分が植物というわけです。
(4) presetを使おう
このようにAVNIR-2のAPIは引数を変えることで様々な合成方法を選択することが可能です。
Tellusでは、このような代表的な合成方法にはプリセット(preset)が用意されています。実は今回取得したNatural Colorもpresetにnaturalと指定するだけで取得できてしまいます。
img_natural_preset = get_AVNIR_image(zoom=Z,xtile=X,ytile=Y,preset="natural")
io.imshow(img_natural_preset)
以上が、TellusのJupyter Notebookを使ってAVNIR-2/ALOSによる光学画像を取得する方法でした。
AVNIR-2のデータはバンドごとに分かれているため、様々な合成方法を選択することができます。
目的に応じて最適な合成方法の画像を取得して分析に役立ててください。