射影変換の処理の流れ
おおよそ、理屈的な話は終わりになる。
実際にこれをプログラムとして組むわけだけ、これのイメージが沸かないかもしれない。
よって、想定する手順を記載
- 画像の読み込み
- 変換元座標の確定
- 変換先座標の確定
- \(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}
\)
これを\(x,y\)に対して解く式に変更
\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=
s
\begin{bmatrix}
a&b&c\\
d&e&f\\
g&h&1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)
そして、\(s\)は元々以下で算出できるもの
\(
s=gx+hy+1
\)
しかし、今回は逆変換なので、以下で算出する。
\(
\displaystyle s=\frac{1}{gx\prime+hy\prime+1}
\)
話としてはシンプルではあるが、
逆変換で考えるため少しややこしい。
実際の処理はアフィン変換時に使用したものを流用するので、
射影逆変換に依存する部分だけを注視すればOKなはず。
各ツール、各言語での射影変換は別の記事にて記載。
まとめ
- 射影変換とアフィン変換との関係性について説明。
- 上記を元に8個の変数を求める8個の連立方程式を作成し行列表現に。
- 射影逆変換について説明。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント