Tôi đang xử lý hình ảnh. Tôi muốn kết hợp các tính năng 2D và tôi đã thực hiện nhiều bài kiểm tra trên SURF, SIFT, ORB.
Làm cách nào để áp dụng RANSAC trên SURF/SIFT/ORB trong OpenCV?Cách áp dụng RANSAC trên kết quả phù hợp SURF, SIFT và ORB
5
A
Trả lời
23
OpenCV có chức năng cv::findHomography
có thể tùy chọn sử dụng RANSAC để tìm ma trận homography liên quan đến hai hình ảnh. Bạn có thể xem ví dụ về chức năng này trong hành động here.
Cụ thể các phần của mã bạn đang quan tâm là:
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);
Sau đó bạn có thể sử dụng chức năng cv::perspectiveTransform
để warp những hình ảnh theo ma trận homography.
Các tùy chọn khác cho cv::findHomography
ngoài CV_RANSAC
là 0
sử dụng mọi điểm và CV_LMEDS
sử dụng phương pháp Ít nhất trung bình. Bạn có thể tìm thêm thông tin trong tài liệu hiệu chuẩn máy ảnh OpenCV here.