Ich arbeite an der Bildverarbeitung. Ich möchte 2D Features anpassen und habe viele Tests auf SURF, SIFT, ORB gemacht.
Wie kann ich RANSAC auf SURF/SIFT/ORB in OpenCV anwenden?Wie man RANSAC auf SURF-, SIFT- und ORB-Matching-Ergebnisse anwendet
5
A
Antwort
23
OpenCV hat die Funktion cv::findHomography
, die optional RANSAC verwenden kann, um die Homographie-Matrix zu finden, die zwei Bilder betrifft. Sie können ein Beispiel für diese Funktion in Aktion here sehen.
Insbesondere der Abschnitt von Code, den Sie interessiert, ist:
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);
Sie dann cv::perspectiveTransform
die Funktion können Sie die Bilder nach der Homografie Matrix verziehen.
Weitere Optionen für cv::findHomography
andere als CV_RANSAC
sind 0
, die jeden Punkt und CV_LMEDS
verwendet, die die am wenigsten Median-Methode verwendet. Weitere Informationen finden Sie in der OpenCV Kamerakalibrierungsdokumentation here.