5

私の例やProjection on 3D surface に示されているように、OpenCV で 3D サーフェスに投影された画像に補正を適用する最良の方法は何ですか?

OpenCV のチェッカーボード コーナー検出を使用した最初のテストは、あまり期待できるものではありませんでした。カメラの角度が急すぎると、画像が歪むか小さすぎる (遠すぎる) ため、コーナーが検出されませんでした。また、チェッカーボードのフィールドが多すぎる場合。

私のアイデアは、3D スキャナーで表面 (オブジェクト) を検出するために使用されるようなアルゴリズムを使用することでしたが、これが OpenCV で可能かどうかはわかりません。OpenCV では不可能だとしても、そのようなオブジェクト スキャンに使用されるアルゴリズムは何ですか?

この画像は、修正なしでどのように見えるかを示しています。 表面の未修正の投影

緑色の四角形は、修正された投影です。 補正投影 (緑)

4

1 に答える 1

2

ProCamCalibで使用したマーカーは、チェッカーボード パターンよりも確実に検出されるはずです。ProCamCalib と同じようにARToolkitPlusを使用できますが、他の代替手段があるか、独自の小さな検出器を作成することもできます。:) 次に、検出されたマーカーのコーナー座標を使用して、OpenCV の残りのキャリブレーション関数を使用して、同じ方法でキャリブレーションできます。

ProCamTrackerのページに示されているように、私はそれを使ってクールなこともできます。

編集: 質問をよりよく理解したので、OpenCV はあまり役に立ちませんが、静的シーンに対してこれを非常に簡単に達成できます。まず、視聴者に修正された投影を見てもらいたい位置にカメラを配置します。次に、バイナリ パターン (局所的に点滅するドットのように見える) を投影し、それらのドット パターンの画像をキャプチャします。(構造化された光として知られている手法で、バーになるまで密度を高くすることができます。) カメラ画像からドットを検出し、それらのドットをバイナリ コードにデコードした後、カメラ <-> プロジェクター ピクセルの対応、ある程度の頂点を取得します。とにかく、そこからは 100% グラフィックです。これらの手順をさらに詳しく説明している論文を次に示します。

Zollmann, S.、Langlotz, T. および Bimber, O.
任意のサーフェスへのビュー依存投影のためのパッシブ/アクティブ幾何学的キャリブレーション
http://140.78.90.140/medien/ar/Pub/PAGC_final.pdf
デモ ビデオ: http:/ /140.78.90.140/median/ar/Pub/PAGC.avi

EDIT2: ある種のパターンを投影することにより、カメラ画像の特定のピクセルに対応するプロジェクター画像のピクセル座標を把握できます。検出とデコードが簡単なため、一時的なドットパターンをよく使用します...そして実際、これにはOpenCVが役立つ場合があります。私がやろうと思う方法は、このようなものになるでしょう。簡単にするために 2 ビットだけ取りましょう。したがって、00、01、10、および 11 の 4 つの画像があります。プロジェクターの画像を制御するため、それらはわかっていますが、カメラ画像でもそれらを見つける必要があります。最初に、最後の (カメラ) 画像 11 を取得し、cvAbsDiff() を使用して最初の (カメラ) 画像 00 からそれを減算し、次に cvThreshold() で結果を 2 値化し、バイナリで輪郭 (またはブロブ) を見つけます。 cvFindContours() を使用した画像。cvMoments() で重心を見つけることができますが、cvContourArea() で各輪郭に適切な領域があることを確認する必要があります。次に、他の画像で作業を開始できます。輪郭ごとに、cvSetImageROI() を介して設定できるこれらの境界四角形内で、cvBoundingRect() を他の (これも cvThreshold() カメラで 2 値化された) 画像の cvCountNonZero() ピクセルに取り込もうとします。ゼロ以外のカウントが大きい場合は 1 として登録し、そうでない場合は 0 として登録する必要があります。

すべてのビットを取得したら、コードを取得し、完了です。

于 2012-01-18T13:42:14.867 に答える