カメラ座標系とワールド座標系の変換

OpenCVのDocumentationにある,ワールド座標系とカメラ座標系の間の変換

(1)[xyz]=R[XYZ]+t

はぱっと見ただけではわかりづらいので,ワールド座標系とカメラ座標系をしっかりと定め,その間の変換(式 (1) )を導出します.

ここでは原点 O ,基底 ex, ey, ez から成る直交座標系を O[ex,ey,ez] と表記することにします.

また,ワールド座標系とカメラ座標系をそれぞれ次のように設定します.

原点を O’ としたときのワールド座標系 O[eX,eY,eZ]
位置 O のカメラの座標系 O[ex,ey,ez]

カメラに映っている物体の座標を P とし,これをそれぞれの座標系で表現すると

OP=XeX+YeY+ZeZ=[eXeYeZ][XYZ]OP=xex+yey+zez=[exeyez][xyz]

となります.

ベクトル OO をカメラ座標系 O[ex,ey,ez] で表現すると

OO=txex+tyey+tzez=[exeyez][txtytz]

また, OP=OO+OP より,

(2)[exeyez][xyz]=[eXeYeZ][XYZ]+[exeyez][txtytz]

と書けます.

ワールド座標系 O[eX,eY,eZ] とカメラ座標系 O[ex,ey,ez] はそれぞれ別々の座標系ではあるものの,どちらも同じ3次元空間に共存しており,かつ直交座標系であるため,片方の基底を用いてもう片方の基底を表現することができます.

この変換を回転行列 RR3×3 を用いて

[eXeYeZ]=[exeyez]R

と表記すると,式 (2)

[exeyez][xyz]=[exeyez]R[XYZ]+[exeyez][txtytz]
と書き換えることができます.
両辺から基底部分を取り除くと
[xyz]=R[XYZ]+[txtytz].

さらに

t=[txtytz]

とおけば,

[xyz]=R[XYZ]+t

というふうに座標変換を記述することができます.