係数の求め方(行列表現)
\(a~h\)の係数を連立方程式で求められるってところまでやった。
あとはこれを解いてしまえばOKではあるが、
連立方程式を一つずつ解くというのもめんどくさい。
というわけで
行列で表現して逆行列にする。
これにより、連立方程式は一撃で求まる。
というわけで行列表現に直した。
先も書いたがが、変数は\(a~h\)であり、\(x,y\)とかではない点に注意。
\(
\begin{bmatrix}
x_0 & y_0 & 1 & 0 & 0 & 0 & -x_0x_0\prime & -y_0x_0\prime\\
0 & 0 & 0 & x_0 & y_0 & 1 & -x_0x_0\prime & -y_0x_0\prime\\
x_1 & y_1 & 1 & 0 & 0 & 0 & -x_1x_1\prime & -y_1x_1\prime\\
0 & 0 & 0 & x_1 & y_1 & 1 & -x_1x_1\prime & -y_1x_1\prime\\
x_2 & y_2 & 1 & 0 & 0 & 0 & -x_2x_2\prime & -y_2x_2\prime\\
0 & 0 & 0 & x_2 & y_2 & 1 & -x_2x_2\prime & -y_2x_2\prime\\
x_3 & y_3 & 1 & 0 & 0 & 0 & -x_3x_3\prime & -y_3x_3\prime\\
0 & 0 & 0 & x_3 & y_3 & 1 & -x_3x_3\prime & -y_3x_3\prime\\
\end{bmatrix}
\begin{bmatrix}
a\\b\\c\\d\\e\\f\\g\\h
\end{bmatrix}=
\begin{bmatrix}
x_0\prime\\y_0\prime\\
x_1\prime\\y_1\prime\\
x_2\prime\\y_2\prime\\
x_3\prime\\y_3\prime\\
\end{bmatrix}
\)
連立方程式の段階で、\(a~h\)が左辺に来るようにしてたから、
それをそのまま行列に表現した。
逆行列で連立方程式を解ける状態へ
そして、先の行列を逆行列にして連立方程式の解が出るようにする。
やることは項を入れ替えるだけ。
逆行列はツール、言語等の環境側が解決してくれるので気にしない。
\(
\begin{bmatrix}
a\\b\\c\\d\\e\\f\\g\\h
\end{bmatrix}=
\begin{bmatrix}
x_0 & y_0 & 1 & 0 & 0 & 0 & -x_0x_0\prime & -y_0x_0\prime\\
0 & 0 & 0 & x_0 & y_0 & 1 & -x_0x_0\prime & -y_0x_0\prime\\
x_1 & y_1 & 1 & 0 & 0 & 0 & -x_1x_1\prime & -y_1x_1\prime\\
0 & 0 & 0 & x_1 & y_1 & 1 & -x_1x_1\prime & -y_1x_1\prime\\
x_2 & y_2 & 1 & 0 & 0 & 0 & -x_2x_2\prime & -y_2x_2\prime\\
0 & 0 & 0 & x_2 & y_2 & 1 & -x_2x_2\prime & -y_2x_2\prime\\
x_3 & y_3 & 1 & 0 & 0 & 0 & -x_3x_3\prime & -y_3x_3\prime\\
0 & 0 & 0 & x_3 & y_3 & 1 & -x_3x_3\prime & -y_3x_3\prime\\
\end{bmatrix}^{-1}
\begin{bmatrix}
x_0\prime\\y_0\prime\\
x_1\prime\\y_1\prime\\
x_2\prime\\y_2\prime\\
x_3\prime\\y_3\prime\\
\end{bmatrix}
\)
\(a~h\)が求まる式になった。
これで求まった\(a~h\)を以下に居れれば射影変換行列が完成する。
\(
s
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=
\begin{bmatrix}
a&b&c\\
d&e&f\\
g&h&1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\)
次のページへ
実際のプログラミングする際の処理の流れと注意点について
コメント