バックナンバーはこちら。
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
何を試すのか?
とりあえず、射影変換の処理にアフィン行列をツッコめば
射影変換はアフィン変換の拡張系ってのがわかるんだよね。
そうなのだが、
アフィン変換を試すだけだとちょっと物足りないな。
いやー、物事はシンプルが一番だと思うけどな・・・。
折角だから、射影変換と複数のアフィン変換を合成しよう。
射影変換とアフィン変換の合成
アフィン変換の時は、伸縮、移動、回転を合成したけど、
射影変換もそれが可能なの?
理屈上は可能だ。
例えば、射影変換、伸縮、移動、回転を合成できるはずだ。
できるはずだと言われても、どうすりゃいいのか・・・。
射影変換とアフィン変換の合成の式
合成は、単純に各行列の積を行えばOK。
アフィン変換の時がそんな感じだったけど、射影変換も同じノリで行けるってことか。
先ほどの、射影変換、伸縮、移動、回転を行う変換式を書き出してみよう。
\(
\begin{eqnarray}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=&
\begin{bmatrix}
\cos(\theta)&-\sin(\theta)&0\\
\sin(\theta)&\cos(\theta)&0\\
0&0&1
\end{bmatrix}
\begin{bmatrix}
1&0&T_x\\
0&1&T_y\\
0&0&1
\end{bmatrix}\\
&\begin{bmatrix}
S_x&0&0\\
0&S_y&0\\
0&0&1
\end{bmatrix}
\begin{bmatrix}
a&b&c\\
d&e&f\\
g&h&1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\end{eqnarray}
\)
アフィン変換のときもそうだったけど、
先に実施したい変換が後ろに来るんだったね。
そうそう。
理屈上はこれで変換の合成ができるはずだ。
まとめ
まとめだよ。
- 射影変換のアフィン行列を入れてアフィン変換になるか試そうと画策。
- せっかくなので、射影変換とアフィン変換を合成してみる。
- 合成の組み立て方はアフィン変換の時と同じ。
バックナンバーはこちら。
コメント