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

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

バックナンバーはこちら。
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のならびになるよう数式を変形する。
まずは元の式

\(
\begin{eqnarray}
\left\{
\begin{array}{l}
\displaystyle sx\prime=\frac{ax+by+c}{s} \\
\displaystyle sy\prime=\frac{dx+ey+f}{s} \\
\displaystyle s=gx+hy+1
\end{array}
\right.
\end{eqnarray}
\)

フクさん
フクさん

これを変形して、

\(
\begin{eqnarray}
\left\{
\begin{array}{l}
x\prime(gx+hy+1)=ax+by+c \\
y\prime(gx+hy+1)=dx+ey+f \\
\end{array}
\right.
\end{eqnarray}
\)

\(
\begin{eqnarray}
\left\{
\begin{array}{l}
ax+by+c-gxx\prime-hyx\prime=x\prime \\
dx+ey+f-gxy\prime-hyy\prime=y\prime \\
\end{array}
\right.
\end{eqnarray}
\)

自明な数値

フクさん
フクさん

ここで、座標変換を考えた際に自明な数値というものが出てくる。
まずは以下の画像を見てみよう。

射影変換時の自明な座標
太郎くん
太郎くん

あー、変換元の座標と、変換先の座標か。

フクさん
フクさん

これにより、\(a~h\)の不明な変数8個。
自明な座標8点(定数としては16点)
これらにより8個の式を抱えた連立方程式が作成可能になる。
求めたい変数は8個だから8個の式で求まるはずだ。

太郎くん
太郎くん

そういえば、元々9個のパラメータだったものを8個に減らしてたね。
ここで利いてくるのか。

フクさん
フクさん

そうそう。
具体的な連立方程式は以下になる。
注意点としては、変数は\(x,y\)や\(x\prime,y\prime\)ではなく、\(a~h\)という点。
ここを読み間違えると良くわからんようになる。

\(
\begin{eqnarray}
\left\{
\begin{array}{l}
ax_0+by_0+c-gx_0x_0\prime-hy_0x_0\prime=x_0\prime\\
dx_0+ey_0+f-gx_0y_0\prime-hy_0y_0\prime=y_0\prime\\
ax_1+by_1+c-gx_1x_1\prime-hy_1x_1\prime=x_1\prime\\
dx_1+ey_1+f-gx_1y_1\prime-hy_1y_1\prime=y_1\prime\\
ax_2+by_2+c-gx_2x_2\prime-hy_2x_2\prime=x_2\prime\\
dx_2+ey_2+f-gx_2y_2\prime-hy_2y_2\prime=y_2\prime\\
ax_3+by_3+c-gx_3x_3\prime-hy_3x_3\prime=x_3\prime\\
dx_3+ey_3+f-gx_3y_3\prime-hy_3y_3\prime=y_3\prime\\
\end{array}
\right.
\end{eqnarray}
\)

太郎くん
太郎くん

なんかやべぇことになってるな・・・。

まとめ

フクさん
フクさん

まとめだよ。

  • 各係数を求めるために式を変形。
  • 自明な定数は変換元座標と変換先座標。
  • 上記を元に8個の変数を求める8個の連立方程式を作成。

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

コメント

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