Probleme beim Zusammenfügen von Bildern mit OpenCV

Ich arbeite derzeit mit OpenCV 2.3.1 in Visual Studio 2010 am Zusammenfügen von Bildern, habe jedoch einige Probleme.

Problembeschreibung Ich versuche, einen Code zum Zusammenfügen mehrerer Bilder zu schreiben, die von einigen Kameras stammen (ca. 3 bis 4), dh der Code sollte das Zusammenfügen von Bildern so lange ausführen, bis ich zum Anhalten auffordere.

Folgendes habe ich bisher getan: (Zur Vereinfachung ersetze ich einen Teil des Codes durch ein paar Worte.)

     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.

Für Schritt 5 folgte ich der Antwort im folgenden Thread und änderte nur einige Parameter:Zusammenfügen von 2 Bildern in opencv

Das Ergebnis ist jedoch schrecklich. Ich habe das Ergebnis gerade auf YouTube hochgeladen und natürlich können nur diejenigen, die den Link haben, es sehen.

http://youtu.be/Oy5z_7LeaMk

Mein Code wird unten angezeigt: (Es werden nur wichtige Teile angezeigt.)

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); 

Was kann ich noch tun, um die Naht zu verbessern?

Ist es außerdem sinnvoll, die Homografiematrix zu reparieren, anstatt sie weiterhin zu berechnen? Was ich meine, ist, den Winkel und die Verschiebung zwischen den beiden Kameras selbst zu bestimmen, um eine Homographiematrix zu erhalten, die meinen Wünschen entspricht.

Vielen Dank. :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage