OpenGLでレンズ歪みを考慮してレンダリングする方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ghffmj
記事: 14
登録日時: 13年前

OpenGLでレンズ歪みを考慮してレンダリングする方法

#1

投稿記事 by ghffmj » 12年前

OpenGLでレンズ歪みを考慮してレンダリングしたいです。

・条件
OpenGLのProjection Matrix, Modelview Matrixは既知とします。
レンズ歪みはOpenCVモデルに従うとします。(distCoeffs = [k1, k2, p1, p2])
http://opencv.jp/opencv-2svn/cpp/camera ... ction.html#


3次元点をX=(x,y,z)とし、それをGLでレンダリングする(GLSLだとglModelViewProjectionMatrix * X)と、4次元ベクトルが出てきます。そこから、glReadPixelsで得る画像上の座標を取得したいです。画像座標が手に入れば、後はOpenCVモデルに当てはめれば歪ませることが出来るのですが、どうやって得ればよいかが分かりません。CVだと、3次元ベクトルが出てくるだけなので、(x/z, y/z)で取得出来ますが、GLだとどうなるのでしょうか。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: OpenGLでレンズ歪みを考慮してレンダリングする方法

#2

投稿記事 by h2so5 » 12年前

質問がよく理解できていないのですが、4次元ベクトルでも同じ事で (x/w, y/w, z/w) で座標が出ます。

ghffmj
記事: 14
登録日時: 13年前

Re: OpenGLでレンズ歪みを考慮してレンダリングする方法

#3

投稿記事 by ghffmj » 12年前

ありがとうございます。同次座標なので確かにそのようにすれば座標が計算出来ますが、困っているのはGLのProjection MatrixはNear面、Far面を考慮した形となっているため、CVで設定するProjection Matrixとは異なり、そのままでは画像座標(2次元)が得られないということです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: OpenGLでレンズ歪みを考慮してレンダリングする方法

#4

投稿記事 by softya(ソフト屋) » 12年前

OpenGLとOpenCVに詳しくないのですが、実用速度が出るか疑問なのですがそれは問題とされないという事でしょうか。
リアルタイムで歪ませる場合はシェーダーを使うと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ghffmj
記事: 14
登録日時: 13年前

Re: OpenGLでレンズ歪みを考慮してレンダリングする方法

#5

投稿記事 by ghffmj » 12年前

そうですね。現在はGLSLを使っています。
vertex shaderで歪ませた場合の座標を計算して、gl_Positionにその座標を渡せばよいのですが、GLのProjection Matrixが特殊なため、この歪ませる計算部分がよくわからなくなってしまいました。。。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: OpenGLでレンズ歪みを考慮してレンダリングする方法

#6

投稿記事 by h2so5 » 12年前

ghffmj さんが書きました:ありがとうございます。同次座標なので確かにそのようにすれば座標が計算出来ますが、困っているのはGLのProjection MatrixはNear面、Far面を考慮した形となっているため、CVで設定するProjection Matrixとは異なり、そのままでは画像座標(2次元)が得られないということです。
僕はここの意味が良くわかりませんでした。
Near面・Far面を考慮する、しないで具体的にどう異なるのか説明していただきたいです。
Near・Farが影響を与えるのって2次元上の座標ではなくてZ深度ではないんでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る