幾何変換 — 行列が画像を動かす

回転・拡大・平行移動——画像を「動かす」処理の正体は、実はぜんぶ座標の計算です。たった 6 個の数字(2×3 行列)が画像を自在に操るしくみ、拡大してもギザギザにしない補間のワザ、そして「変換は順序で結果が変わる」という大事な性質を、動かしながら理解します。

1. 画像を動かす=画素の座標を計算し直す

画像の各画素には座標 (x, y) があります。幾何変換とは、この座標を新しい座標 (x′, y′) に対応づけるルールのこと。回転・拡大・平行移動・せん断はすべて、次のひとつの式で書けます。これがアフィン変換です。

x′ = a·x + b·y + tx , y′ = c·x + d·y + ty 6 個の数 (a, b, c, d, tx, ty) を 2×3 行列に並べたものが「変換行列」。左の 2×2 が回転・拡大・せん断、右の 1 列が平行移動を受け持つ
a = s·cosθ b = −s·sinθ c = s·sinθ d = s·cosθ 回転 θ と拡大 s を同時にかけたときの 2×2 部分。θ = 0, s = 1 なら単位行列(何もしない)

下のプレイグラウンドでスライダーを動かし、行列のどの数字がどう変わるかを見てください。回転させると左 2 列に cos と sin が現れ、平行移動は右の列だけが動きます。

変換プレイグラウンド — 行列の数値と動きの対応
32×32 の「F」画像(座標原点は画像中心)。水色の 4 つの数字が回転・拡大、オレンジの列が平行移動です。出力は次章の逆写像+最近傍補間で作っているので、回転すると輪郭が少しギザギザになるのも観察できます。
POINT — アフィン変換は「まっすぐ」を保つ アフィン変換をどう組み合わせても、直線は直線のまま、平行線は平行なままです。正方形は平行四辺形にはなりますが、勝手に曲がったりはしない——これがアフィン変換という家族の共通ルールです。

2. 逆写像 — 「どこへ行く?」ではなく「どこから来た?」

素直に考えると「入力の各画素を行列で送り出す」(前向き写像)となりそうですが、実際の画像処理では逆をやります。出力側の画素を 1 つずつ選び、「この画素は入力のどこから来たか」を逆行列で求めて色を取ってくる——これが逆写像方式です。

入力位置 = M−1 · 出力位置 出力画素を主語にして逆算する。出力の全画素が必ずちょうど 1 回ずつ埋まるのがポイント
注意 — 前向き写像は穴だらけになる 例えば 32×32 の画像を 2 倍に拡大すると、出力は 64×64 = 4096 画素。ところが入力は 1024 画素しかないので、前向きに送るだけでは約 3000 画素の行き先が決まらず穴が空きます(回転では重なりも起きる)。逆写像なら「出力 1 画素につき必ず 1 回の逆算」なので、穴も重複も原理的に生じません。

3. ピクセルの間を埋める — 補間

逆写像で求めた入力位置は、たいてい (11.38, 6.72) のような小数の座標になります。画素は整数位置にしかないので、「間」の値をどう決めるかが補間の問題です。

補間の違い — 16×16 を 8 倍に拡大してみる
拡大画像の上をなぞると、右の図解が連動します
左=元画像(格子が 1 画素)、中央=8 倍拡大の結果、右=1 画素の値がどう決まるかの拡大図解。オレンジの点が「逆算されたサンプル位置」。最近傍は 4 画素のうち最寄りの 1 つをコピーし、バイリニアは 4 画素を重み(%)つきで混ぜます。斜めの帯の縁を比べると、角ばり vs なめらかさの差がはっきり分かります。
POINT — 補間は使い分ける 写真の拡大・回転にはバイリニア(またはさらに高品質なバイキュービック)が定番。一方、領域番号やラベルが入った画像(例:領域分割の結果)では、平均すると存在しない中間値が生まれてしまうため、値を混ぜない最近傍を使うのが鉄則です。

4. 変換の合成 — 順序で結果が変わる

複数の変換は行列の積で 1 つにまとめられます。変換 M1 のあとに M2 をかけるなら、合成行列は M2·M1(あとにかける方が左)。ここで重要なのが、行列の積は順序を入れ替えると別物になるという性質です。

M2 M1 ≠ M1 M2 「回転してから移動」と「移動してから回転」は違う場所に着く。行列の積は非可換
合成の順序 — 回転→移動 と 移動→回転 は別の場所に着く
2 段階のアニメで「①→②」の順に変換を適用します。回転は常に原点まわりなので、先に移動してから回転すると、画像ごと原点を中心に振り回されて弧を描きます(点線が中心の軌跡)。薄く見えているのが逆の順序の結果。右の行列は各段階と合成 M = ②·① の数値です。せん断 k を動かすと、縦の線だけが斜めに倒れる「ずらし変形」も観察できます。

5. まとめ

一歩先へ — アフィンの先にある変換 座標を (x, y, 1) と 3 次元に拡張(同次座標)して 3×3 行列を使うと、平行移動も掛け算に統一でき、さらに射影変換(ホモグラフィ)——遠近感つきの変形——まで表せるようになります。書類スキャンアプリが斜めから撮った紙を真上視点に直すのも、パノラマ合成で写真同士を貼り合わせるのも、この 3×3 行列の仕事です。