2013-04-14 21 views

risposta

23

OpenCV ha la funzione cv::findHomography che può facoltativamente utilizzare RANSAC per trovare la matrice di omografia relativa a due immagini. È possibile visualizzare un esempio di questa funzione in azione here.

In particolare la sezione di codice che interessa è:

FlannBasedMatcher matcher; 
std::vector<DMatch> matches; 
matcher.match(descriptors_object, descriptors_scene, matches); 

for(int i = 0; i < good_matches.size(); i++) 
{ 
    //-- Get the keypoints from the good matches 
    obj.push_back(keypoints_object[ good_matches[i].queryIdx ].pt); 
    scene.push_back(keypoints_scene[ good_matches[i].trainIdx ].pt); 
} 

Mat H = findHomography(obj, scene, CV_RANSAC); 

È quindi possibile utilizzare la funzione cv::perspectiveTransform per deformare le immagini secondo la matrice omografia.

Altre opzioni per cv::findHomography diverso CV_RANSAC sono 0 che utilizza ogni punto e CV_LMEDS che utilizza il metodo dei minimi mediana. Maggiori informazioni sono disponibili nella documentazione di calibrazione della telecamera OpenCV here.