アフィン変換
読み: あふぃんへんかん
平行移動、回転、拡大縮小、せん断を組み合わせた線形変換。平行線を保存しつつ画像の幾何学的変形を行う基本操作。
アフィン変換 (Affine Transformation) とは、平行移動・回転・拡大縮小・せん断 (シアー) を組み合わせた幾何学的変換である。変換後も直線は直線のまま、平行線は平行のまま保たれる性質を持つ。画像のリサイズ、回転、傾き補正、データ拡張 (Data Augmentation) など、画像処理の基本操作として広く使われる。
アフィン変換は 2×3 の変換行列で表現される。
[[a, b, tx], [c, d, ty]]の形式で、(a, b, c, d)が線形変換、(tx, ty)が平行移動を担う- 自由度は 6 であり、3 組の対応点から行列を一意に決定できる
- 同次座標系では 3×3 行列として扱い、最下行は
[0, 0, 1]となる
代表的なアフィン変換の種類を示す。
- 平行移動:
tx,tyのみを設定。画像全体を水平・垂直方向にずらす - 回転:
a=cosθ, b=-sinθ, c=sinθ, d=cosθ。原点を中心に角度 θ だけ回転 - スケーリング:
a=sx, d=sy(他は 0)。水平方向に sx 倍、垂直方向に sy 倍 - せん断:
bまたはcに値を設定。画像を斜めに歪ませる
OpenCV では cv2.getAffineTransform() で 3 点対応から行列を求め、cv2.warpAffine() で変換を適用する。深層学習のデータ拡張では、ランダムなアフィン変換を訓練画像に適用し、モデルの汎化性能を向上させる手法が標準的に用いられる。