2011-04-04 31 views
6

ステレオ画像間の関係を決定するための基本行列を計算するコードを記述しようとしています。ほとんどの人が推薦しているHartleyとZissermanの本から始めましたが、実用的な例はなく、サンプルコードはMATLABにはありませんでした。私はAn introduction to 3D Computer Vision Techniques and Algorithmsに切り替えました。これはより実用的で、実際の例があります。私はPythonとnumpyを使用して推奨8ポイントアルゴリズムを実装しましたが、その有効性を検証するのに問題があります。ステレオビジョンの基本行列を計算する方法

私はその書籍の48ページに記載されているデータセットを使用しています(上記のリンクを使用してGoogleブックの抜粋を表示しています)。ポイントを正規化すると、そのブックと同じ結果が得られます。私は基本的な行列を計算するためにnumpyののSVD機能を使用する場合、私はFに次の値を取得するただし、:

[[-0.01851684 -0.21631176 -0.67036356] 
[ 0.2605251 -0.01023853 0.14234079] 
[ 0.63748775 -0.09404508 -0.00220713]] 

この行列は、方程式p_R^* F * P_L = 0を満たすので、それが正しいようです。しかし、それは本で計算された行列とは非常に異なっています。私は(OpenCVののcv.FindFundamentalMatを使用して答えを再確認しようとした)と私は、第三の答えました:私はそれらの他の二つの行列がどのように計算されるかないんだけど、私は基本のいずれかの例を見つけることができません

[[ 22.98129082 271.46453857 853.74273682] 
[-334.1673584 -4.84123087 -175.99523926] 
[-809.88891602 125.99833679 1.  ]] 

を8点アルゴリズムの実装を検証するためにウェブ上での行列計算私の実装が式を満足する値を返すという事実は私に自信を与えますが、私は愚かなことをしてしまい、その結果を本やOpenCVで一致させることができないのではないかと心配しています。

+0

データセットの正規化されたポイント、または元の2つの基本行列を得るための元のポイントから始めましたか? –

答えて

5

基本行列は一定の要素まで定義されています(エピポーラ制約をチェックすることで、非常に簡単に検証できます)。 OpenCV行列に-8.0574e-04を掛けてみると、最後に2つの行列が非常に似ていることがわかります:-)

このように、おそらく結果は良いでしょう。結果のわずかな違いは、おそらく、OpenCVが8ポイントアルゴリズムとは異なる(おそらくより堅牢な)アプローチを採用しているためです。

+0

私はそれが私が逃した何かばかげたものになるだろうと分かっていました。助けてくれてありがとう。 – SigmaXiPi

関連する問題