ほぼ平行で、互いに離れていない 2 枚の写真が得られました。
OpenCVを使って視差マップ(ステレオ対応)を作成しようとしています。
現実世界のシナリオで使用しようとしているため、チェス盤のキャリブレーションの使用は少し非現実的です。
そのため、私はstereoRectifyUn calibrationd()を使用しています。
整流に対応する 2 つの異なるセットを使用して、結果を比較しようとしました。
- ポイントを手動で選択 (ポイント & クリック)
- SURF から生成され、RANSAC でフィルタリングされたポイント
入力画像 1:
http://i.stack.imgur.com/2TCi3.jpg
入力画像 2:
http://i.stack.imgur.com/j1fFA.jpg
(修正などに使用する前に、画像の歪みを修正することに注意してください)
SURF と RANSAC で調整された画像:
(1 と 2 の順序で):
http://i.stack.imgur.com/pwbUw.jpg
http://i.stack.imgur.com/mb7TM.jpg
手動で選択したポイントを使用して画像を修正しました (これはより不正確です!):
http://i.stack.imgur.com/Bodeg.jpg
さて、問題は、結果を見ると、サーフ バージョンがほぼ完全に修正されていることがわかります (エピポーラ線は非常によく整列しています)。
手動で選択された点のバージョンはかなりひどく修正されていますが、エピポーラ線はどこにも整列していません。
しかし、両方の整流を使用して openCV の sgBM() の結果を見ると、
手動ポイントの結果:
http://i.stack.imgur.com/N8Cyp.png
SURF ポイントの結果:
http://i.stack.imgur. com/tGsCN.jpg
表示されている視差/深さは、SURF ポイント (適切に修正されたバージョン) を使用すると、より正確/正確になります。そこに驚きはありません。
ただし、実際に検出されたオブジェクト ピクセルとオブジェクト境界は、正しく修正されていないバージョンの方がはるかに優れています。
たとえば、ペンが実際にはペンであり、ペンの形をしていることがわかります。これは、修正された視差マップが正しくなく、修正されたマップでは見られません。
質問は、なぜですか?
どうすれば修正できますか?(私は sgBM() パラメーターをいじってみました。それらが両方で同じであることを確認しましたが、効果はありません。何らかの理由で、ひどく修正された画像が見栄えがするのは、さまざまな修正だけです(オブジェクト境界まで))。