2024-04-02 アフィン変換とホモグラフィ変換 数学 プログラミング アフィン変換とホモグラフィ変換とは? アフィン変換について ホモグラフィ変換 (射影変換) について ホモグラフィ変換の特殊解を解析的に解く Pythonによる実装例 参考 アフィン変換とホモグラフィ変換とは? アフィン変換:正方形を任意の平行四辺形に写せる (台形など任意の四角形には写せない) ホモグラフィ変換:正方形を任意の四角形に写せる アフィン変換について 3×3の行列で表現できる (実質は2×2の行列と2次の列ベクトルで6変数) 拡大縮小、平行移動、回転、せん断(スキュー) からなる 拡大縮小は対角行列 平行移動は単位行列と列ベクトル 回転は回転行列 せん断は単位三角行列 (x軸方向にせん断) (y軸方向にせん断) ホモグラフィ変換 (射影変換) について 任意の4点 を 任意の4点に写す。 ※ 行列を定数倍しても同じなので となるように正規化している。 式を展開して と を代入すると …① これの逆行列を求めるとホモグラフィ変換行列 H が得られる。 …② ホモグラフィ変換の特殊解を解析的に解く たいていの用途では、写像元/写像先のいずれか一方は、x軸とy軸に平行な長方形であり、これは単位正方形に正規化できる。この場合、①の方程式はかなり簡単になる。 とすると …③ これを解くと ※計算メモ → メモ1, メモ2 逆に単位正方行列への変換であれば上記のホモグラフィ行列 H の逆行列を用いればよい。( H は3×3行列であるから公式で計算すればよい。) 行列計算のライブラリを利用して② の逆行列を数値計算で解けるならそれでもよし。 そのようなライブラリが利用できない環境の場合、ここで述べた特殊解を利用すれば、実装が比較的容易であり、計算量も少なくて済む。 Pythonによる実装例 HomographyTest1.py は ② の逆行列を数値計算で解くやり方 HomographyTest2.py は ③ の解析解を解くやり方 参考 アフィン変換 画像処理ソリューション ホモグラフィ変換行列の導出方法についてまとめ - ひつじTips 【Python/NumPy】座標からホモグラフィ変換行列を求める方法 | イメージングソリューション 射影変換(ホモグラフィ)について理解してみる その2 - デジタル・デザイン・ラボラトリーな日々 ホモグラフィ - Shogo Computing Laboratory 2つの平面(領域)間の対応をとる方法。(C#で射影変換) - ねののお庭。