見出し画像

[Python編]気象衛星画像に天気図を重ねてみる

はじめに

前回、Imagemagickを使って、気象衛星画像に地上天気図を重ね合わせる方法を紹介した。

この方法では、コマンドラインで一手順ごとに実行しなければならなかった。Bashでプログラムを書くこともできるが、中間画像を出力する必要があり、無駄が多い。そこで、今回はPythonで一発で重ね合わせ画像を生成する方法を紹介する。

環境

Python3を使い、下記が使用できる環境で実行することを前提とする。

・Pillow(PIL)
・pdf2image

それぞれの環境構築方法は別途ググって欲しい。

元画像

前回のnoteと同じだが、気象庁の衛星画像のページでモノクロの[拡大]で表示される衛星画像を使用する。

また同様に、HBCの専門天気図のページの「アジア太平洋地上天気図(ASAS)」のPDFファイルを使用する。ASASのPDFファイルを使用する理由は、公開されているASASの天気図の画像ファイル(jpg or png)は画質が悪いためである。

プログラム

下記にPythonのプログラムを示す。コメントを入れているので、解説は不要だかと思う。

from pdf2image import convert_from_path
from PIL import Image, ImageOps

# 衛星画像を読み込み
satelliteimg = Image.open('202005060900-00.png')

# PDFファイルを読み込み、画像データに変換
pdfimg = convert_from_path('ASAS.pdf', 600)[0].convert('L')

# 画像をトリミング
pdfimg = pdfimg.crop((1460, 1470, 3630, 3195))
# 衛星画像のサイズにリサイズ
pdfimg = pdfimg.resize(satelliteimg.size, Image.LANCZOS)
# 白黒変換
pdfimg = ImageOps.invert(pdfimg)

# 衛星画像に重ね合わせる
satelliteimg.paste(pdfimg, (0, 0), pdfimg)
# 重ね合わせた画像を保存
satelliteimg.save('output.png')

できあがった重ね合わせ画像が下記だ。

画像1

他の天気図(例えば高層天気図)と重ね合わせる場合、天気図のトリミングの範囲に工夫が必要になる。

気象衛星ひまわりは、東経140度の静止軌道上にある。従って、衛星画像では、東経140度の経線は画像に対して、縦の垂直線になっているはずだ。

天気図も同様に、東経140度の経線は縦の垂直線になっている、と思われる。というか、そうでないと画像を回転させる必要があるが、その必要はないので、垂直線になっているはずだ。

そのため、下記の手順で実行すれば、他の天気図と重ね合わせることができる。

1) 衛星画像の四方の角の緯度経度に合わせて天気図をトリミング
2) 衛星画像のサイズでリサイズ
  これで例え天気図に歪みがあっても補正できる
3) 白黒変換
4) 衛星画像に重ね合わせる

最初は、緯度線、経度線が一致しないと思うが、1)のトリミングの範囲を少しずつ調整していくと、ちょうどいいところが見つかる。

(2020/7/3追記)Python + OpenCV編も参考にしてください。

さいごに

最近、使用しているBashで書いていた天気図プログラムを、Pythonで書き直している。

Pythonの便利なところは、こういうことが簡単にできたらいいのになあ、と思ったことが、たいてい簡単にできる方法があること。だから、多くの人がPython使うんやね。

よろしければ、サポートをお願いします。 より多くの方に役立つnoteを書けるよう頑張ります!!