今日は動作分析では必須の3次元DLT法の計算方法について、勉強していきましょう。
研究室のフレームディアスに頼り切っていて、詳細な計算方法は全然分かってないんですよね・・・
キャリブレーションの際に記録しておいた実空間座標をそれぞれ$X_i,Y_i,Z_i$として、コントロールポイントをデジタイズして得られた2次元平面上の座標値をそれぞれ$U_i,V_i$とすると、DLTパラメータを算出する行列式は式(1)となります。
\begin{eqnarray}
\begin{bmatrix}
X_1 & Y_1 & Z_1 & 1 & 0 & 0 & 0 & 0 & -U_1X_1 & -U_1Y_1 & -U_1Z_1 \\
0 & 0 & 0 & 0 & X_1 & Y_1 & Z_1 & 1 & -V_1X_1 & -V_1Y_1 & -V_1Z_1 \\
\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\
X_n & Y_n & Z_n & 1 & 0 & 0 & 0 & 0 & -U_nX_n & -U_nY_n & -U_nZ_n \\
0 & 0 & 0 & 0 & X_n & Y_n & Z_n & 1 & -V_nX_n & -V_nY_n & -V_nZ_n \\
\end{bmatrix}
\begin{bmatrix}
L_1 \\ L_2 \\ L_3 \\ L_4 \\ L_5 \\ L_6 \\ L_7 \\ L_8 \\ L_9 \\ L_{10} \\ L_{11}
\end{bmatrix}
= \begin{bmatrix}
U_1 \\ V_1 \\ \vdots \\ U_n \\ V_n
\end{bmatrix} \tag{1}
\end{eqnarray}
ここで、$ L_1 ~ L_{11} $はDLTパラメータと呼ばれる係数で、一つ一つが複数のカメラ定数で構成されています。
また、行列式を簡略化するために、左辺の$ 2n行11列 $の行列を$ X $、$ 11行1列 $の行列を$ L $、
右辺の$ 2n行1列 $の行列を$ U $と置くと、下記のように示すことができます。
\begin{eqnarray}
XL = U
\tag{2}
\end{eqnarray}
ここまではOKかな?
列を作って、それを簡略化した式に示すんですね!
でも、ここから具体的にどのような計算をすればいいんですか?
最終的に求めたいのは、DLTパラメータである、$ L $だね。
例えば$2x=6$のような式であれば、両辺を2で割ってやれば$ x=3 $というように値が求まるけど、行列式はちょっと複雑な計算になるんだ。
う~ん、なんか難しそう。。。
具体的には、転置行列をかけて正方行列を作り、逆行列をかけてやる、という流れになるんだ。
転置行列、正方行列、逆行列・・・
$ X $が正方行列の場合、つまり行数と列数が同じであれば、逆行列をかけることによって、$ L $を求めることができますが、残念ながら今回の$ X $は$ 2n行11列 $の行列なので、逆行列をかけることはできません。
なので、まずは正方行列を作るために、$ X $の転置行列$ X^{ \mathrm{ T } } $を式(2)の両辺の左側からかけてやります。
\begin{eqnarray}
\begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}L =X^{ \mathrm{ T } }U
\tag{3}
\end{eqnarray}
行列は左からかけ算をするか、右からかけ算をするかで結果が違うので、どちら側からかけ算をするかには気をつけてね
これで$ X^{ \mathrm{ T } }X $が11行11列の正方行列になったので、逆行列をかけることができるようになりました。
$ X^{ \mathrm{ T } }X $の逆行列を$\begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}^{ \mathrm{ -1 } }$として、両辺の左側からかけてやると下記のようになります。
\begin{eqnarray}
\begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}^{ \mathrm{ -1 } } \begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}L =\begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}^{ \mathrm{ -1 } }X^{ \mathrm{ T } }U
\tag{4}
\end{eqnarray}
行列式の性質より、$ \begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}^{ \mathrm{ -1 } } \begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix} =1$であるので、式(4)は下記のようになります。
\begin{eqnarray}
L =\begin{bmatrix} X^{ \mathrm{ T } }X \end{bmatrix}^{ \mathrm{ -1 } }X^{ \mathrm{ T } }U
\tag{5}
\end{eqnarray}
式(5)を解くことによって、DLTパラメータを求めることができるね。
なんとなくの手順は理解できました!
行列の計算って難しいんですね・・・
1) 池上康男,桜井伸二,矢部京之助(1991) DLT 法.Jpn.J.Sports Sci, 10(3): 191-195.
コメント