2019年9月7日土曜日

同一視点の2つのカメラ画像間の変換

変換の公式

[ua1]KaRaRb1Kb1[ub1]

記号は,両辺が相似(両辺が平行なベクトルもしくはスケール倍)であることを意味するので,実際には右辺を計算して得られたベクトルが[u,v,w]だとすると次のようにして[u,v]を計算する. u=u/w,  v=v/w

応用先

ステレオカメラの画像を平行化する

2つのカメラの内一方を標準ステレオのカメラにすれば,非標準ステレオのカメラから標準への変換が得られる.

カメラ画像を没入型ディスプレイに表示する

HMDや大型のスクリーンにカメラで取得した画像を提示して,カメラの視点で見た風景を再現する場合, そのカメラをカメラa,CG描画に使用する仮想カメラをカメラbとして考えると同じ問題になる.

カメラが回転して得られる画像を元の画像から生成する

回転前後のカメラをカメラaおよびカメラbとすれば同じ問題になる. 1台のカメラが回転しただけなのでこの場合は内部パラメータはKa=Kbとして考える.

透視投影モデルから導出してみる

必要な式は2種類だけ

2つのカメラの透視投影変換は次の通り.

[ua1]Ka[Ra|ta][x1] [ub1]Kb[Rb|tb][x1]

2つのカメラが同一視点上にあるというのは.

RaTta=RbTtb

xを消してuaからubの変換にする

Ka1[ua1]Rax+ta Kb1[ub1]Rbx+tb

tRを左辺に移項する.

Ra1(Ka1[ua1]ta)x Rb1(Kb1[ub1]tb)x

xを消去する.

Ra1(Ka1[ua1]ta)Rb1(Kb1[ub1]tb)

移項した変数を順に元に戻していく.

Ra1Ka1[ua1]Ra1taRb1Kb1[ub1]Rb1tb

RaTta=RbTtbなので

Ra1Ka1[ua1]Rb1Kb1[ub1]

移項した変数を順に元に戻す.

[ua1]KaRaRb1Kb1[ub1]