あさりのみそしるダイアリー

言いたいことを言える世の中の方がいいよね(´・ω・`)

OpenCVで定点カメラ画像から太陽の方向を検出したかった

全然、仕事とか、そういうことなどとは関係ないんですが、せっかくライブカメラのおかげで膨大かつ時系列的な画像情報が手元にあるので、その画像を使って何かしてみようかなと思ったのが、先日の話。

今は、もうそんな気も失せているんですがね・・・。




こういうライブカメラの映像について、画面中央に見える木の陰のある位置やその伸び具合から、太陽の方向を検出してみようかなと、ちょっと思いました。



イメージ 1

そして、作ったのがこのアプリ。

面倒な計算処理やファイル取得処理などは、学生時代に研究で作ったライブラリに全部投げています。便利なものを作ってくれたものだなー。



画像データはグレイスケール(白黒)で読み込みます。


イメージ 2

そして木陰の輝度値で2値化(グレイスケールが灰色などを含むのに対し、こちらは白か黒だけの画像)すると、こうなります。

画面中央の、正面の家の様子がわからないようにするためのセキュリティマスクや、下部のタイムスタンプ、および降水量データは、保存先の画像に直接埋め込んでいるため、除去することはできません。




イメージ 3

そして、このマスクと先の2値化画像をかけあわせて、うまいこと木の陰を取得しやすくしてやります。



イメージ 4

感覚としては、観測者(木)に対して太陽が天球を表す半円上のどの位置にあるのかを取得したいということなんですが。



このあと、木陰領域だけうまく抜き出して重心位置Aを求め、木の位置B(カメラ固定なので手打ちで決めた定点)とを結ぶ線分ABの延長線上の点B'に太陽が存在するという話にもっていきたかったんですが、別に深く掘り下げる気もなかったので、適当にやって、それっぽい動きをすることだけ確認して終わりました。




完成形がこんな感じ。

ノイズ除去などしていないので、陰が、たとえば塀の陰と合体した時なんかは、バカになります。

車が通っても影響があります。

時系列的に画像データがあるのだから、直前の情報も使えばいいじゃんって思うでしょ?

でも、ライブカメラサーバーはたまに調子悪くなるので、必ずしも直前の状態を示す画像が存在するとは限らないんですよね。ライブカメラがエラーで停止したために再起動させたのなら、再起動後の最初の1枚目の画像に対する直前の画像は、2時間も10時間も前の画像かもしれません。

なので、1枚のカメラ画像から太陽の方向を検出し、もし太陽が出ていないのならそれ相応の結果を返せるようにしたかったのです(後者については放置してますが)。


仮にこれが完成したとしても、現行のライブカメラシステムに取り込むつもりはないですし、たぶんこれ以上は発展しないだろうなーと。

太陽の位置より先に、温度や天気の情報を重畳させる方を優先したいですしね。



おしまい。