アフィン変換と射影変換

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

アフィン変換とは?

線形変換の項で色々沢山変換例は挙げたんですけど、重要なアノ変換がありません。
そう、それは平行移動です。

結論から言ってしまうと平行移動は次のように表すことができます。
 \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} \sim \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
横の行列を演算してやりますと
 [x+t_x,\ y+t_y,\ 1]^T
ってなってて、確かにx方向にt_x、y方向にt_yだけ移動していることが分かります。

あと、この同次座標のすごいところは非同次座標で行った線形変換もすべて行えるというところです。非同次座標において変換行列が
 \begin{bmatrix} a & b \\ c & d \end{bmatrix}
であるような変換は同次座標については
 \begin{bmatrix} a & b & 0 \\ c & d & 0 \\ 0 & 0 & 1 \end{bmatrix}
として変換を表せます。

このような線形変換と平行移動を合わせてアフィン変換と言います。

また、アフィン変換の中でも特に回転と平行移動を合わせた次のような変換をユークリッド変換と言います。
 \begin{bmatrix} \cos\theta & -\sin\theta & t_x \\ \sin\theta & \cos\theta & t_y \\ 0 & 0 & 1 \end{bmatrix}

射影変換とは?

さらに一般化して、次の式で表されるような変換を射影変換といいます。
 \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} \sim \begin{bmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
式だけ書かれても意味が分からないと思うので以下でつらつら説明していきます。
この図において、青色の平面Sz=h赤色の平面Tに射影しようと目論みます。

直線なので下のような比で表すことができます。ただしx,\ zは青色の平面S上の点を、x'は赤色の平面T上の点の座標を表しています。
 h:x'=z:x
これを変形すれば次のようになります。
 x'=\frac{hx}{z}

ここでS上の点を次のような平面の方程式で表します。
 z= ax+by+c
ただの平面の方程式ですね。これをさっきの式に代入すれば
 x'=\frac{hx}{ax+by+c} \cdots (1)
という感じになります。

この式で射影すれば近いところが大きく、遠いところが小さく、という風に射影が出来るわけですね。
こんな感じで、右にある赤の線は近いので大きく、左にある青の線は遠いので小さく見えます。
これが射影変換の式では実現できるわけですね。

さらに一般化して、S平面にある点にアフィン変換(平行移動と線形写像)することを考えます。
つまりx\rightarrow a'x+b'y+z'みたいな感じにするわけですね。すると式(1)は
 x'=\frac{h(a'x+b'y+c')}{ax+by+c} \cdots
という感じになります。hが邪魔なので係数に吸収させてやりますと
 x'=\frac{a'x+b'y+c'}{ax+by+c} \cdots(2)
となります。

今まではx座標についてやってきましたが
 h:y'=z:y
という式から出発してやれば同様の議論で
 x'=\frac{a'x+b'y+c'}{ax+by+c} \cdots(3)

これら式(2)と式(3)は丁度最初に挙げた行列の射影変換の変換式と同値なのが簡単に示せます。
つまり以下で表される射影変換は『アフィン変換』と『ある平面の、遠近感を表現する射影』が合わさった変換であると言えるわけです。
 \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} \sim \begin{bmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。
最終更新:2012年11月10日 23:46
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。