4

私はステレオマッチングを実装しており、前処理としてカメラキャリブレーションなしで画像を修正しようとしています。サーフディテクターを使用して、画像の特徴を検出して一致させ、それらを整列させようとしています。すべての一致を見つけた後、次の関数を使用して、エピポーラ線上にないものをすべて削除します。

[fMatrix, epipolarInliers, status] = estimateFundamentalMatrix(...
  matchedPoints1, matchedPoints2, 'Method', 'RANSAC', ...
  'NumTrials', 10000, 'DistanceThreshold', 0.1, 'Confidence', 99.99);

inlierPoints1 = matchedPoints1(epipolarInliers, :);
inlierPoints2 = matchedPoints2(epipolarInliers, :);

figure; showMatchedFeatures(I1, I2, inlierPoints1, inlierPoints2);
legend('Inlier points in I1', 'Inlier points in I2');

問題は、同じデータでこの関数を実行すると、同じデータで実行するたびに異なる結果が得られ、結果の視差マップに違いが生じることです。ここでは、一部の一致の結果が異なることがわかります。

インライナーポイント

更新: 違いは RANSAC メソッドが原因であると考えましたが、LMedS、MSAC を使用すると、同じデータに対して異なる結果が得られます

4

3 に答える 3

3

あなたの答えには遅すぎることはわかっていますが、将来誰かに役立つと思います。実際、あなたの場合の問題は2つあります。

  • 機能の縮退した位置、つまり、機能の位置はほとんどローカライズされており(あなたに:P)、画像全体に十分に広がっていません。

  • これらの試合は、同じ平面上にあるようなものです。あなたの体は平面的ではないと主張するでしょうが、それを部屋の深さと比較すると、それは一種の平面です.

数学的には、これは、常に無限の解を持つ平面から E (または F) を抽出していることを意味します。これを整理するために、抽出された 2 つの SURF フィーチャ間の距離に何らかの制約を使用することをお勧めします。つまり、マッチングに使用される 2 つの SURF フィーチャは、(画像の解像度に応じて) 少なくとも 40 または 100 ピクセル離れている必要があります。

于 2014-09-14T13:03:24.903 に答える
2

SURF 機能を改善するもう 1 つの方法は、'NumOctaves'detectSURFFeatures(rgb2gray(I1),'NumOctaves',5);をより大きな値に設定することです。

私は同じ問題に直面しており、これは(少し)助けになりました。

于 2015-03-14T08:11:50.743 に答える