MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第3章 その109【射影変換、アフィン変換合成①】
MATLAB,Python,Scilab,Julia比較 第3章 その110【射影変換、アフィン変換合成②】
MATLAB,Python,Scilab,Julia比較 第3章 その111【射影変換、アフィン変換合成③】
MATLAB,Python,Scilab,Julia比較 第3章 その112【射影変換、アフィン変換合成④】
を書き直したもの。
射影変換の話の続き。
主に以下の話になる。
- 射影変換はアフィン変換の拡張系。
- 射影変換とアフィン変換の合成について。
- 射影変換とアフィン変換の合成をプログラムで実現する前準備。
- 今回は変換パラメータについて。
そういえば。
以前、「射影変換はアフィン変換の拡張型」という話をしたと思う。
これまでの射影変換では特にアフィン変換に類する処理は行っていない。
座標変換という意味では一緒ではあるが。
射影変換は数式的にはアフィン変換の拡張型
理屈上、アフィン行列を射影変換に渡すとアフィン変換をしてくれる。
まずは、それぞれの数式を確認してみよう。
射影変換
\(
\color{red}{s}\color{black}{}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=
\begin{bmatrix}
a&b&c\\
d&e&f\\
\color{red}g&\color{red}h&1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\)
アフィン変換
\(
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=
\begin{bmatrix}
a&b&c\\
d&e&f\\
\color{red}0&\color{red}0&1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\)
数式上で赤字で書いた部分がポイントになる。
射影変換行列のgとhの部分はアフィン変換では未使用ということもあり、基本0にする。
そして、射影変換行列のgとhが0の場合、左辺のsは必ず1になる。
つまり、gとhが0だと、アフィン変換の座標変換と同じ式になる。
少しモヤっとするかもしれないが、
実際に動かして確認すればスッキリすると思う。
何を試すのか?
とりあえず、射影変換の処理にアフィン行列をツッコめば
射影変換はアフィン変換の拡張系というのはわかるはず。
ただ、アフィン変換を試すだけだと少し物足りない。
折角なので、射影変換とアフィン変換の合成を行ってみようと思う。
射影変換とアフィン変換の合成
アフィン変換の時は、伸縮、移動、回転を合成した。
射影変換でも理屈上は同じことが可能なはずである。
例えば、射影変換、伸縮、移動、回転を合成できる(はず)。
射影変換とアフィン変換の合成の式
合成は、単純に各行列の積を行えば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}
\)
アフィン変換のときもそうだったが、
先に実施したい変換が後ろに来る。
理屈上は、これで変換の合成ができる(はず)。
次のページへ
実際にプログラミングで使用する計算とかパラメータとか
コメント