バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/
はじめに
射影変換の話の続き。
射影変換とアフィン変換の合成について
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
何を試すのか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
とりあえず、射影変換の処理にアフィン行列をツッコめば
射影変換はアフィン変換の拡張系ってのがわかるんだよね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
そうなのだが、
アフィン変換を試すだけだとちょっと物足りないな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
いやー、物事はシンプルが一番だと思うけどな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
折角だから、射影変換と複数のアフィン変換を合成しよう。
射影変換とアフィン変換の合成
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
アフィン変換の時は、伸縮、移動、回転を合成したけど、
射影変換もそれが可能なの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
理屈上は可能だ。
例えば、射影変換、伸縮、移動、回転を合成できるはずだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
できるはずだと言われても、どうすりゃいいのか・・・。
射影変換とアフィン変換の合成の式
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
合成は、単純に各行列の積を行えばOK。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
アフィン変換の時がそんな感じだったけど、射影変換も同じノリで行けるってことか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
先ほどの、射影変換、伸縮、移動、回転を行う変換式を書き出してみよう。
\(
\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}
\)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
アフィン変換のときもそうだったけど、
先に実施したい変換が後ろに来るんだったね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
そうそう。
理屈上はこれで変換の合成ができるはずだ。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 射影変換のアフィン行列を入れてアフィン変換になるか試そうと画策。
- せっかくなので、射影変換とアフィン変換を合成してみる。
- 合成の組み立て方はアフィン変換の時と同じ。
バックナンバーはこちら。
コメント