この記事では、画像を拡大・縮小・回転させる「アフィン変換」の原理や計算方法についてまとめました。
アフィン変換とは
本ページの内容は以下動画で解説しています。
アフィン変換とは、平行移動と線形変換を組み合わせた変換です。
つまり、アフィン変換で画像の拡大・縮小、回転、移動などを行うことができます。
■入力画像(左)と出力画像(右)※アフィン変換で回転させた例
アフィン変換の式
2次元平面の場合、線形変換は元座標にの行列を掛けることで表現できます。
平行移動は2次元ベクトルを加算することで表現できます。
(1)
ここで、は変換後の座標です。
次のようにの行列を用いて、線形変換と平行移動の計算を1つの乗算にまとめることもできます。
(2)
回転の計算式
アフィン変換での回転だけを考えます。
原点で点を角度だけ回転した後の点は次の式で計算できます。
(3)
さらに展開すると次の式になります。
(4)
画像の回転
画像を回転する場合、原点ではなく画像の中心周りに回転させるのが一般的です。
そのため、画像の回転に利用する際は、以下の2点について考慮する必要があります。
– | 説明 |
---|---|
① | 画像の中心を原点にするため、座標から入力画像の幅と高さを引きます。 |
② | 変換後の座標は、原点をでなく出力画像の中心にするため、出力画像の幅と高さを加えます。 |
①②を考慮したとき、アフィン変換による回転の計算式は次のようになります。
(5)
関連ページ
PythonとOpenCVを用いてアフィン変換を実装する方法について以下ページで解説しています。
【Python/OpenCV】アフィン変換で画像の回転(cv2.warpAffine)
Python版OpenCVとNumPyを用いてアフィン変換を実装し、画像を回転させる方法をソースコード付きで解説します。
PythonとOpenCVを用いた画像処理全般については以下ページで解説しています。
【Python版OpenCV入門】画像処理の基礎〜応用例までサンプルコード付きで徹底解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
他の画像処理アルゴリズムについては、以下ページでまとめています。
【画像処理入門】アルゴリズム&プログラミング
この記事では、画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。
コメント