Sto lavorando all'elaborazione delle immagini. Voglio abbinare le caratteristiche 2D e ho fatto molti test su SURF, SIFT, ORB.
Come posso applicare RANSAC su SURF/SIFT/ORB in OpenCV?Come applicare RANSAC sui risultati di corrispondenza SURF, SIFT e ORB
5
A
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.