2017-12-12 5 views
0

2台のカメラでキャプチャされた画像フレームを連続して処理し、2フレームごとに処理し、それを行うために我々は を持っている1.抽出されたサーフ機能。 2. Flann Matcherを使用して2つの画像の一致を確認します。 3.これらのマッチを使用してホモグラフィ行列を計算しました。 4.正しい画像にwarpPerspectiveを適用しました。 問題1: ゆがんだ画像3が動き回っているBF Matcherによって与えられたマッチを使用して作成されたホモグラフィマットを使用して画像をワーピングする際の問題

//To get the surf keypoints and descriptors: 

cuda::SURD_CUDA surf(700); 
surf(leftImgGpu, cuda::GpuMat(), keyPointsGpuA, descriptorsAGpu); 
surf(rightImgGpu, cuda::GpuMat(), keyPointsGpuB, descriptorsBGpu); 
surf.downloadKeypoints(keypointsAGpu, keypoiintsA); 
surf.downloadKeypoints(keypointsBGpu, keypoiintsB); 

//Flann based matcher: 
FlannBasedMatcher matcher(new cv::flann::KDTreeIndexParams(4), new 
cv::flann::SearchParams()) 

//To get the homography matrix: 
vector<Point2f> imgPtsA, imgPtsB; 
for(int i=0;i<matches.size();i++){ 
    imgPtsB.push_back(keypointsB[matches[i].queryIdx].pt); 
    imgPtsA.push_back(keypointsA[matches[i].trainIdx].pt); 
} 
Mat H=findHomography(imgPtsA, imgPtsB, CV_RANSAC); 

//To a warp right image: 
warpPerspective(rightImg, warpRight, H, rightImg.size()); 

は、我々は2つの問題を抱えています。左右のカメラは固定されており、処理している画像(leftright)は毎回ほぼ同じです。我々は、歪んだ画像が適切に来ないので、試合とホモグラフィのマトリックスに問題があると思われます。 問題2: BF Matcherを使用して一致を取得しました。これらのマッチを使ってHomograpyマットを構築すると、私たちは奇妙な結果を得ていました。 Flannベースのマッチャーを使用した後の結果は比較的良好でした。

答えて

1

ステッチを使用して適切な「パノラマ」画像を作成するには、カメラがスペース内のほぼ同じ位置にある必要があります。そうでなければ、視差エラーが発生します(here参照)。一般的な場合、ホモグラフィはペンダントに登録されているように、画像内の単一の平面だけを歪めることができます。従って、例えば、床をちょうど縫うようにします(コースの特徴に十分なテクスチャがあれば)。

ホモグラフィはこの変換をモデル化できないため、安定した結果は期待できません。もっと鮮やかに:椅子の正面は右の画像でしか見ることができないので、この領域を左の画像と「一致させる」ことはできません。

関連する問題