この記事では、画像を拡大・縮小・回転させる「アフィン変換」の原理や計算方法についてまとめました。
アフィン変換とは
本ページの内容は以下動画で解説しています。
アフィン変換とは、平行移動と線形変換を組み合わせた変換です。
つまり、アフィン変換で画像の拡大・縮小、回転、移動などを行うことができます。
■入力画像(左)と出力画像(右)※アフィン変換で回転させた例


アフィン変換の式
2次元平面の場合、線形変換は元座標
に
の行列を掛けることで表現できます。
平行移動は2次元ベクトルを
加算することで表現できます。
(1) ![]()
ここで、
は変換後の座標です。
次のように
の行列を用いて、線形変換と平行移動の計算を1つの乗算にまとめることもできます。
(2) ![Rendered by QuickLaTeX.com \begin{eqnarray*} \left[ \begin{array}{ccccc} x' \\ y' \\ 1 \\ \end{array}\right]=\left[ \begin{array}{ccccc} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \\ \end{array} \right] \left[ \begin{array}{ccccc} x \\ y \\ 1 \\ \end{array} \right] \end{eqnarray*}](https://algorithm.joho.info/wp-content/ql-cache/quicklatex.com-c849ef3a5a79befe57e24a3ede1bfa5a_l3.png)
回転の計算式
アフィン変換での回転だけを考えます。
原点
で点
を角度
だけ回転した後の点
は次の式で計算できます。
(3) ![]()
さらに展開すると次の式になります。
(4) ![]()
画像の回転
画像を回転する場合、原点
ではなく画像の中心周りに回転させるのが一般的です。
そのため、画像の回転に利用する際は、以下の2点について考慮する必要があります。
| – | 説明 |
|---|---|
| ① | 画像の中心を原点 |
| ② | 変換後の座標 |
①②を考慮したとき、アフィン変換による回転の計算式は次のようになります。
(5) ![]()
関連ページ
PythonとOpenCVを用いてアフィン変換を実装する方法について以下ページで解説しています。

【Python/OpenCV】アフィン変換で画像の回転(cv2.warpAffine)
Python版OpenCVとNumPyを用いてアフィン変換を実装し、画像を回転させる方法をソースコード付きで解説します。
PythonとOpenCVを用いた画像処理全般については以下ページで解説しています。

【PythonとOpenCVで画像処理超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
他の画像処理アルゴリズムについては、以下ページでまとめています。

画像処理
「画像処理」の記事一覧です。

コメント