ステレオ画像間の関係を決定するための基本行列を計算するコードを作成しようとしています。私はほとんどの人が推奨するHartleyandZissermanの本から始めましたが、実用的な例はなく、そのサンプルコードは私が持っていないMATLABにありました。次に、より実用的で実際の例が含まれている3Dコンピュータービジョンの手法とアルゴリズムの概要に切り替えました。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()を使用して回答を再確認しようとしましたが、3番目の回答が得られました。
[[ 22.98129082 271.46453857 853.74273682]
[-334.1673584 -4.84123087 -175.99523926]
[-809.88891602 125.99833679 1. ]]
私はこれらの他の2つの行列の計算方法ではありませんが、8ポイントアルゴリズムの実装を検証するための基本的な行列計算の例をWeb上で見つけることができません。私の実装が方程式を満たす値を返すという事実は私に自信を与えます、しかし私は私が本またはOpenCVによって結果を一致させることができない理由である愚かなことをしたのではないかと心配しています。