MATLAB,Python,Scilab,Julia比較 第3章 その96【射影変換⑩】

MATLAB,Python,Scilab,Julia比較 第3章 その96【射影変換⑩】 数値計算
MATLAB,Python,Scilab,Julia比較 第3章 その96【射影変換⑩】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/

はじめに

アフィン変換の拡張と言われている射影変換の話。
射影変換の理屈について

  • 係数の求め方(行列表現)

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

【再掲】射影変換の理屈の因果関係

太郎くん
太郎くん

まずは大まかな流れを再掲

  • 大まかな理屈(済)
  • 大まかな理屈を座標変換で説明(済)
  • 基本ベクトルと基底ベクトル(済)
  • 元画像平面を3次元空間で表現(済)
  • 3次元空間を地面平面に落とし込む(済)
  • 一連の座標変換まとめ(済)
  • 方程式の変形(済)
  • 行列表現(済)
  • アフィン変換との関係性(済)
  • 係数の求め方(済)
  • 係数の求め方(行列表現)
  • 射影変換の処理の流れ
フクさん
フクさん

「係数の求め方」というところまで終わっている。

係数の求め方(行列表現)

太郎くん
太郎くん

前回は、\(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}
\)

太郎くん
太郎くん

なんだかんだでキレイにまとまった感じだ!

まとめ

フクさん
フクさん

まとめだよ。

  • 射影変換の係数を求める連立方程式を行列表現に。
  • これにより、逆行列を使えば一撃で係数が求まる。
  • あとは各係数を射影変換行列に居れればOK。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました