![見出し画像](https://assets.st-note.com/production/uploads/images/24941729/rectangle_large_type_2_98eb3b748cffbd16c445ee6f2334b331.png?width=1200)
[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')
できあがった重ね合わせ画像が下記だ。
他の天気図(例えば高層天気図)と重ね合わせる場合、天気図のトリミングの範囲に工夫が必要になる。
気象衛星ひまわりは、東経140度の静止軌道上にある。従って、衛星画像では、東経140度の経線は画像に対して、縦の垂直線になっているはずだ。
天気図も同様に、東経140度の経線は縦の垂直線になっている、と思われる。というか、そうでないと画像を回転させる必要があるが、その必要はないので、垂直線になっているはずだ。
そのため、下記の手順で実行すれば、他の天気図と重ね合わせることができる。
1) 衛星画像の四方の角の緯度経度に合わせて天気図をトリミング
2) 衛星画像のサイズでリサイズ
これで例え天気図に歪みがあっても補正できる
3) 白黒変換
4) 衛星画像に重ね合わせる
最初は、緯度線、経度線が一致しないと思うが、1)のトリミングの範囲を少しずつ調整していくと、ちょうどいいところが見つかる。
(2020/7/3追記)Python + OpenCV編も参考にしてください。
さいごに
最近、使用しているBashで書いていた天気図プログラムを、Pythonで書き直している。
Pythonの便利なところは、こういうことが簡単にできたらいいのになあ、と思ったことが、たいてい簡単にできる方法があること。だから、多くの人がPython使うんやね。
よろしければ、サポートをお願いします。 より多くの方に役立つnoteを書けるよう頑張ります!!