Возникли трудности при сшивании изображений с использованием OpenCV

В настоящее время я работаю над сшивкой изображений с использованием OpenCV 2.3.1 в Visual Studio 2010, но у меня возникли некоторые проблемы.

Problem Description Я пытаюсь написать код для сшивания нескольких изображений, полученных с нескольких камер (примерно 3-4), т. Е. Код должен продолжать выполнять сшивание изображений, пока я не прошу его остановить.

Вот что я сделал до сих пор: (Для упрощения я заменю некоторую часть кода всего несколькими словами)

     1.Reading frames(images) from 2 cameras (Currently I'm just working on 2 cameras.)
     2.Feature detection, descriptor calculation (SURF)
     3.Feature matching using FlannBasedMatcher
     4.Removing outliers and calculate the Homography with inliers using RANSAC.
     5.Warp one of both images.

Для шага 5. я следовал за ответом в следующей теме и просто изменил некоторые параметры: Сшиваем 2 изображения в opencv

Тем не менее, результат ужасен, хотя. Я только что загрузил результат на YouTube, и, конечно, только те, у кого есть ссылка, смогут его увидеть.

http://youtu.be/Oy5z_7LeaMk

Мой код показан ниже: (Показаны только важные части)

VideoCapture cam1, cam2;
cam1.open(0);
cam2.open(1);

while(1)
{
    Mat frm1, frm2;

    cam1 >> frm1;
    cam2 >> frm2;

   //(SURF detection, descriptor calculation 
   //and matching using FlannBasedMatcher)


    double max_dist = 0; double min_dist = 100;

    //-- Quick calculation of max and min distances between keypoints
    for( int i = 0; i < descriptors_1.rows; i++ )
    { 
        double dist = matches[i].distance;
        if( dist < min_dist ) min_dist = dist;
        if( dist > max_dist ) max_dist = dist;
    }


    (Draw only "good" matches 
    (i.e. whose distance is less than 3*min_dist ))            

    vector<Point2f> frame1;
    vector<Point2f> frame2;

    for( int i = 0; i < good_matches.size(); i++ )
    {
      //-- Get the keypoints from the good matches
      frame1.push_back( keypoints_1[ good_matches[i].queryIdx ].pt );
      frame2.push_back( keypoints_2[ good_matches[i].trainIdx ].pt ); 
    }
    Mat H = findHomography( Mat(frame1), Mat(frame2), CV_RANSAC );
    cout << "Homography: " << H << endl;


    /* warp the image */
    Mat warpImage2;
    warpPerspective(frm2, warpImage2, 
    H, Size(frm2.cols, frm2.rows), INTER_CUBIC); 

    Mat final(Size(frm2.cols*3 + frm1.cols, frm2.rows),CV_8UC3); 

    Mat roi1(final, Rect(frm1.cols, 0, frm1.cols, frm1.rows)); 
    Mat roi2(final, Rect(2*frm1.cols, 0, frm2.cols, frm2.rows)); 

    warpImage2.copyTo(roi2); 
    frm1.copyTo(roi1); 
    imshow("final", final); 

Что еще я должен сделать, чтобы сделать шов лучше?

Кроме того, разумно ли фиксировать матрицу гомографии вместо того, чтобы продолжать ее вычислять? Я имею в виду, что сам определяю угол и смещение между двумя камерами, чтобы получить матрицу гомографии, которая удовлетворяет тому, что я хочу.

Благодарю. :)

Ответы на вопрос(2)

Ваш ответ на вопрос