mayoko’s diary

プロコンとかいろいろ。

ホモグラフィ変換

はじめに

OpenCV でホモグラフィ変換すると遅いので OpenGL でホモグラフィ変換する, というのはよくある流れだと思うのですが, 最初に OpenCV でホモグラフィ変換用の行列 H を求めていると, OpenGL 用の座標系 { \displaystyle
(-1, 1) \times (-1, 1)
}に変換するのがめんどくさいです。

(ちなみに, OpenCV でホモグラフィ変換する場合には, warpPerspective 関数を使います)

ここで, H はなんかの座標系から画像座標系へのホモグラフィ変換行列だとします。この画像座標系の画像の高さを h, 横の長さを w とします。

すると,

  • (0, 0) から (-1, -1)
  • (0, h) から (-1, 1)
  • (w, h) から (1, 1)
  • (w, 0) から (1, -1)

のホモグラフィ変換行列 H' がわかれば, なんかの座標系から OpenGL へのホモグラフィ変換行列は, H' * H として記述できます。

4 点と 4 点の間を結ぶ平面間の変換はホモグラフィ変換でできるのですが, 直感的に思いつく変換だとうまくいかなかったので, 少し真面目に計算して H' がどうなるのかを調べたというのがこの記事です。

結果

{ \displaystyle
H' = \begin{pmatrix} 2/w & 0 & -1 \\ 0 & 2/h & -1\\ 0 & 0 & 1 \end{pmatrix}
}

まとめ

OpenGL はもうちょっと気軽に使えるようにして。