バックナンバーはこちら。
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
まだら模様対策のシンプルなやつ
前回は、アフィン変換のまだら模様問題の原因と対策の話だったけど、
対策としてはシンプルは手法があるんだよね?
そうそう。
画像で示すとこんな感じになる。
んー?
どういうことだ?
矢印の方向が、
変換元から変換先
じゃなくて、
変換先から変換元
になってる?
そうそう。
変換元から変換先にコピーするとピクセルが足りなくなるから、
だったら、変換先の全ピクセル位置から変換元を参照する方式にすれば、
ピクセルが足りないという事象は起きない。
なるほど!
確かにそれだったら全ピクセルが埋まるから、まだら模様が発生しない!
で、具体的にはどうするのか?
と思ったけど、具体的にはどうするんだ?
変換元から変換先にコピーするのがアフィン変換で、
それを逆向きにするのってできるの?
できる。
いわゆるアフィン逆変換。
(またやべぇ単語が出てきたぞ。)
アフィン逆変換
まず、アフィン変換の数式を再掲しよう。
\(
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\)
そうそう。
画像で示すとこんな感じになる。
\(
\begin{eqnarray}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}&=&
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}\\
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}&=&
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}\\
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}&=&
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}\\
\end{eqnarray}
\)
お!なんか割とさくっと求まったな。
そうか、逆行列を使えばいいのか!
そうそう。
代表的なアフィン変換
そして、そろそろ実際のプログラムを作成していきたいところだが・・・。
まだなんかあるんか・・・。
いや、代表的なアフィン変換のパラメータの設定方法の確認をするだけだ。
これをやっておかないと、アフィン行列にどういう値を設定して良いかがわからないからね。
たしかにアフィン変換の数式はわかったけど、何をどうしたらどうなるかはわからんな。
というわけで次回にそれらを確認する。
まとめ
まとめだよ。
- まだら模様対策のシンプルなやつを確認。
- アフィン逆変換を使う。
- アフィン逆変換は、アフィン変換の式を変形しただけ。
- アフィン行列が逆行列になる。
バックナンバーはこちら。
コメント