1

NDK を使用せずに Android で OpenCV を使用すると、いくつかの問題が発生します。
現在、私は大学でプロジェクトを行っていますが、2D 画像から 3D オブジェクトを再構築する場合は、カメラのキャリブレーションを避けるべきだとシェフから言われています。

これまでのところ、2 つの 2D 画像があり、featurepoints、matches、good_matches、基本行列、同種行列がすべてあります。さらに、StereoBM を使用して視差マップを計算しました。次のステップは、これらすべての値から 3D 点群を取得することです。

インターネットを調べて見つけた

Calib3d.reprojectImageTo3D(disparity, _3dImage, Q, false);

この方法を使用すると、3D 点群を再作成できるはずです...現在の問題は、Matrix Q がないことです。この方法からこれを取得できると思います

stereoRectify(...);

ただし、この特定のケースでは cameraCalibration を避ける必要があるため、この方法は使用できません。代替手段

stereoRectifyUncalibrated(...);

Qを提供していません...

誰かが私を助けて、Qまたは点群をより簡単に取得する方法を教えてもらえますか? ありがとう

4

1 に答える 1

5

あなたの質問に答えるために、 でQ必要な行列reprojectImageTo3Dは、ピクセル位置と関連する視差 (つまり、フォーム[u; v; disp; 1]) から対応する 3D ポイントへのマッピングを表し[X; Y; Z; 1]ます。K残念ながら、カメラの内部 (行列) と外部 (2 つのカメラ ポーズ間の回転と移動)を知らなければ、この関係を導き出すことはできません。

カメラのキャリブレーションは、それらを推定する通常の方法です。あなたのシェフはそれはオプションではないと言いましたが、さまざまな要件と可能性を持ついくつかの異なるテクニック (チェス盤を使用する、または自動キャリブレーションを使用するなど) がありますしたがって、キャリブレーションが検討されていない理由を正確に調査することで、アプリケーションに適した方法を見つけることができる場合があります。

組み込み関数を推定する方法が本当にない場合、考えられる解決策は、2 つ以上の画像を使用するバンドル調整です。ただし、組み込み関数がないと、3D 再構成はあまり役に立ちません。これは、2 番目のポイントにつながります。

3D 再構成にはいくつかのタイプがあり、主なタイプは射影、メトリック、ユークリッドです。(これに関する詳細については、Hartley & Zisserman、第 2 版による「コンピュータ ビジョンにおける複数ビュー ジオメトリ」の §10.2 p 264 を参照してください)

  • ユークリッド再構成は、ほとんどの人が「3D 再構成」と呼んでいるものですが、必ずしも必要なものではありません: 3D 回転と 3D 変換 (つまり、3D 座標系の変更) によってのみ真のモデルに関連するシーンのモデルです。 )。したがって、シーン内の直交角度はこのようなモデルでは直交し、シーン内の 1 メートルの距離はモデル内の 1 メートルに対応します。このようなユークリッド 3D 再構成を取得するには、少なくともいくつかのカメラの本質と、シーン内の特定の 2 点間の実際の距離を知る必要があります。

  • ほとんどの場合、メトリックまたは類似度の再構成は十分であり、類似度変換、つまり 3D 回転と 3D 平行移動 (つまり、3D の変更) によって真のモデルに関連するシーンの 3D モデルを参照します座標系) および全体的なスケーリングによっても異なります。このようなメトリックの再構成を取得するには、少なくともいくつかのカメラの本質を知る必要があります。

  • 射影再構成は、シーンやカメラの組み込みに関する知識がない場合に得られるものです。このような 3D モデルは、観察されたシーンに関しては拡大縮小されておらず、シーン内で直交している角度は、おそらくモデル内では直交していません。

したがって、正確な再構成が必要な場合は、カメラ (の一部) の固有パラメータを知ることが重要です。

于 2014-03-12T20:26:58.300 に答える