私は画像操作の問題に取り組んでいます。スクリーンに投影するオーバーヘッド プロジェクターと、それを撮影するカメラがあります。画面にドットを投影し、カメラ上で結果として得られる領域の重心を見つけることで、プロジェクター座標のサブセットとカメラ ピクセルのサブセットの間に 1:1 の対応を確立できます。私はこうして地図を持っている
proj_x, proj_y <--> 散布ポイント ペアの cam_x, cam_y
私の当初の計画は、Mathscript 関数 griddata を使用してこのマップを正則化することでした。これは、次のように MATLAB で正常に機能します。
[pgridx, pgridy] = meshgrid(allprojxpts, allprojypts)
fitcx = griddata (proj_x, proj_y, cam_x, pgridx, pgridy);
fitcy = griddata (proj_x, proj_y, cam_y, pgridx, pgridy);
カメラからプロジェクターへのマッピングの逆
残念ながら、このコードにより、Labview は meshgrid ステップでメモリ不足になります (カメラは 5 メガピクセルであり、labview が処理するには多すぎるようです)。
その後、openCV を調べ始めたところ、cvRemap 関数が見つかりました。残念ながら、この関数は、上で生成しようとしていたような正則化されたピクセル ピクセル マップを出発点としています。しかし、そのようなマップを作成するための関数が openCV で利用できるようになるのではないかと期待しました。私はopenCV 1.0 APIでそれを見つけることができませんでした(私はレガシーの理由で1.0で立ち往生しています)が、そこにあるか、誰かが簡単なトリックを持っていることを望んでいました.
だから私の質問は次のいずれかです
1)openCVで散乱点からグリッドに補間するにはどうすればよいですか; (つまり、x と y の散乱値に対して z = f(x,y) が与えられた場合、画像を f(im_x, im_y) で塗りつぶす方法は?
2) 座標系 1 から座標系 2 への点の分散マッピングがわかっている場合、画像 1 を画像 2 にマッピングする画像変換を実行するにはどうすればよいですか。これは、Labview または OpenCV のいずれかで実装できます。
注: この投稿 delaunay にタグを付けています。これは、分散補間を行う 1 つの方法ですが、より適切なタグは「分散補間」です。