鏡面球を用いたパノラマ画像の生成
概要
鏡面球は360°全ての方向のシーンが写り込んでいます(球自身によって隠れている領域を除いて).そこで,鏡面球を撮影してパノラマ画像を生成します.
鏡面球における反射
鏡面球において,入射光のベクトルを,観測面からの視線ベクトルをとすると,鏡面球の単位法線ベクトルは次式のように表せられます.
変換の流れ
正距投影図形式のパノラマ画像に変換します.パノラマ画像の幅を-180から180,高さを0から180として,方向の輝度を表すとします.鏡面球を撮影した画像はアスペクト比が1:1として,撮影した球の中心が原点とする単位円として表すとします.
このとき,入射光のベクトルは次式で表せられます.
視線ベクトルはと表します.とが定まったので,方向の入射光に対応する球の単位法線ベクトルを求めることができます.
鏡面球の画像を単位円で表したので,単位法線ベクトルのx軸成分とy軸成分がそのまま,画像中の座標に対応します.これにより,パノラマ画像の座標と鏡面球の画像の座標の関係が定まるので,鏡面球の画像からサンプリングすればパノラマ画像に変換することができます.
鏡面球の撮影
鏡面球を対象とする場所に設置して撮影します.このとき,カメラのレンズは出来るだけ望遠である方が正射影モデルに近づけることができるので好ましいです.また,カメラを遠くに置いて撮影できるので,カメラ自身の映り込みも少なくて済みます.
撮影した画像を適当な画像処理ソフトでアスペクト比が1:1になるように切り出します.
パノラマ画像への変換結果
先ほどの鏡面球の画像をパノラマ画像に変換した結果です.
画像の中央の領域はいい感じになってます.しかし,画像の端の方の領域は歪んでしまっています.この領域は撮影した球の端の領域に対応しています.
プログラム
鏡面球の画像からパノラマ画像に変換するプログラムをGitHubに置いておきます.