Tener alguna dificultad en la costura de imágenes usando OpenCV

Actualmente estoy trabajando en la costura de imágenes usando OpenCV 2.3.1 en Visual Studio 2010, pero estoy teniendo algunos problemas.

Descripción del problema Estoy tratando de escribir un código para unir varias imágenes derivadas de unas pocas cámaras (aproximadamente 3 ~ 4), i, e, el código debería seguir ejecutando la costura de la imagen hasta que solicite que se detenga.

Lo siguiente es lo que he hecho hasta ahora: (Para simplificar, reemplazaré parte del código con unas pocas palabras)

     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.

Para el paso 5, seguí la respuesta en el siguiente hilo y solo cambié algunos parámetros:Cosiendo 2 imagenes en opencv

Sin embargo, el resultado es terrible. Acabo de cargar el resultado en youtube y, por supuesto, solo aquellos que tengan el enlace podrán verlo.

http://youtu.be/Oy5z_7LeaMk

Mi código se muestra a continuación: (Sólo se muestran las partes cruciales)

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

¿Qué más debo hacer para mejorar la costura?

Además, ¿es razonable arreglar la matriz de Homografía en lugar de mantenerla computada? Lo que quiero decir es especificar el ángulo y el desplazamiento entre las 2 cámaras por mí mismo para obtener una matriz de Homografía que satisfaga lo que quiero.

Gracias. :)

Respuestas a la pregunta(2)

Su respuesta a la pregunta