目次
1. 概要: 画像のアフィン変換(Affine Transformation) とは
アフィン変換(Affine Transformation)は,対象矩形領域中の線と並行を保ちながら,領域全体(すべての点)の変換を行う際に用いる幾何変換の1種である.この記事では,アフィン変換の中でも,デジタル画像処理における2次元画像(領域)のアフィン変換について述べる.
アフィン変換で用いる(人間が直感的に画像の編集目的で使う)線形変換の例としては,回転,スケーリング(拡大・縮小),スキュー(skew) などがある.これらの線形変換に平行移動(並進)を合成して一般化したものがアフィン変換である.(※ 回転と平行移動は,ユークリッド変換)
以下の数式が,同次座標(homogeneous coordinates)上での画像のアフィン変換の一般系である:
$$
\begin{pmatrix}
x^{\prime} \\
y^{\prime} \\
1 \end{pmatrix}
=
\begin{pmatrix}
a & b &c \\
d & e & f \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
$$
このように,各点においてアフィン行列を左から掛ける積計算を行うことにより,全点をアフィン変換による同一操作で別の座標位置に変換することできる.
2. 同次座標の復習
ここでは,このあと3節で用いる同次座標について,簡単にだけここで復習しておく.より詳しくは,上の関連記事「同次座標」や,各種参考書籍やWeb上の記事等を参照のこと.
カメラキャリブレーションや3D再構成など,コンピュータビジョンでは,カメラ座標系においてカメラ中心と物体の関係の変換や物理移動に,3次元ユークリッド変換を用いる.その際に「回転」と「平行移動」や,それに加えて画像処理・画像編集などで用いる「拡大縮小」や「スキュー(せん断)」などの各変換を,行列の積として表現できて便利である.従って,これらのアフィン変換(や射影変換)は同次座標上で,「行列ベクトルの積」として実行するのが標準的である.
2次元平面上の点 $\bm{p}=(x,y)$は,同次座標においては,3次元ベクトル化して3次元目の要素を定数1に設定した $(x^{\prime},y^{\prime},1)$ に該当するのであった.
3.画像処理のアフィン変換
3.1 アフィン変換の一般系
アフィン変換は,線形変換($2*2$の行列による任意の変換)と,平行移動を合成したものである.
変換前の画像領域上の点 $\bm{p}=(x,y)$が,アフィン変換の結果$\bm{p}^{\prime}=(x^{\prime},y^{\prime})$へ移動する操作を「アフィン変換の一般系」として,定式化していきたい.
まず,画像平面の2次元座標上では,$\bm{p}$から$\bm{p}^{\prime}$へのアフィン変換を以下のように表す:
$$
\begin{pmatrix}
x^{\prime} \\
y^{\prime}
\end{pmatrix}
=
\begin{pmatrix}
a & b \\
d & e
\end{pmatrix}
\begin{pmatrix}
x \\
y
\end{pmatrix}
+
\begin{pmatrix}
c \\
f
\end{pmatrix}
$$
ここで,(a,b,d,e)は線形変換のパラメータで,(c,f)は平行移動のパラメータである.
上記の変換の,同次座標における等価系として「アフィン変換の一般系」を示したい.$\tilde{\bm{p}} = (x,y,1)$から$\tilde{\bm{p^{\prime}}} = (x^{\prime},y^{\prime} ,1)$へのアフィン変換の一般系は,以下のように表すことができる:
$$
\begin{pmatrix}
x^{\prime} \\
y^{\prime} \\
1 \end{pmatrix}
=
\begin{pmatrix}
a & b &c \\
d & e & f \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
$$
ここで,この一般系で変換に用いられる,以下の行列のことをアフィン行列 (Affine Matrix)と呼ぶ:
$$\begin{pmatrix}a & b &c \\ d & e & f \\ 0 & 0 & 1\end{pmatrix}$$
次の3.2節では,このアフィン行列が,回転や拡大縮小などの各アフィン変換において,どのようにパラメータ化されているかにまとめていきたい.
3.2 画像処理でのアフィン変換の代表例:平行移動,回転,スケール変換,シアー.
基本的なアフィン変換には,以下の4種類の変換がある:
- 平行移動 (Translation):(原点を基準に)対象領域の全点を,固定の距離間隔のまま同一ベクトルで移動させる.
- 回転 (Rotation):(原点を基準に)対象領域の全点を,極座標上で同一角度θだけ原点のまわりに回転させる.
- スケール変換 (Scaling):対象領域の全点を,原点を基準としてx方向に$s_x$倍,y方向に$s_y$倍の位置の座標にそれぞれ移動させる.
- シアー (Shear)もしくは スキュー(skew):対象矩形領域を傾けたい角度θだけ,x軸方向もしくはy軸方向に全点を$\tan \theta$の分だけ移動させる.
これらの4つの変換は,以下の図1のように表示できる.

また,4種類のアフィン変換は,それぞれ以下のアフィン行列によって全点を変換させることができる:
\begin{array} {|c|c|} \hline
変換名 & アフィン行列 \\ \hline \hline
平行移動 & \begin{pmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{pmatrix} \\ \hline
回転 & \begin{pmatrix} \cos \theta & – \sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \\ \hline
拡大縮小 & \begin{pmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{pmatrix} \\ \hline
シアー & \begin{pmatrix} 1 & s_x &0 \\ s_y & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} \\ \hline
\end{array}
これらのアフィン変換で各点を変換した先の点は,ディジタル画像の離散化座標と必ずしも一致しておらず,また周辺の座標に移動してきた点がない離散化座標点も多い.そこで,通常はアフィン変換したのち,それらの点の画素値を,変換先座標で再標本化して近接の離散座標に割り当て,なおかつ周辺の画素を補間により埋めることで,最終的にアフィン変換後の画像が完成する.
詳しくはディジタル画像処理の8-3節などを参照のこと.
4. まとめ
この記事では,デジタル画像処理における,4つのアフィン変換について,その一般系から4つを具体化する形で整理を行なった.アフィン変換には,他にも鏡映変換 (reflection)などもあるが,本記事では省略した.
参考書籍
- ディジタル画像処理 [改訂第二版], 画像情報教育振興協会, 2020/2/26 (紹介記事)
References
外部参照リンク
- Affine Transformation – Wikipedia
- Affine Space – Wikipedia
- 平行移動 – Wikipedia(JA)
- Homography – Wikipedia
- アフィン変換(平行移動、拡大縮小、回転、スキュー行列)|イメージングソリューリョン
- CPSC 8170: Physically Based Animation