无论是否使用DENSE冲浪技术,我都已检测并提取了SURF关键点及其描述符。但是每次我使用基于FLANN的KNNmatcher进行匹配时,我的匹配数始终为零。
例如,我在两个图像中都有24000个具有密集冲浪的关键点,它们在视觉上是相同的图像,但是匹配数仍然为零。
这是我的代码。我正在研究ROS。所以我的代码与ROS有关。 First_descriptors_object的计算方法与descripter_object相同。
int step = 2; // 2 pixels spacing between kp's
for (int y=step; y<detectPerson.rows-step; y+=step){
for (int x=step; x<detectPerson.cols-step; x+=step){
// x,y,radius
keypoints_object.push_back(KeyPoint(float(x), float(y), float(step)));
}
}
extractor->compute(detectPerson, keypoints_object, descriptors_object);
// *****************图像匹配************************** **********
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);
// FlannBasedMatcher matcher(new cv::flann::KDTreeIndexParams(5));
std::vector< std::vector<DMatch> > knn_matches;
matcher->knnMatch(First_descriptors_object, descriptors_object, knn_matches, 2 );
//-- Filter matches using the Lowe's ratio test
const float ratio_thresh = 0.7f;
std::vector<DMatch> good_matches;
std::vector<DMatch> bad_matches;
ROS_INFO("KNN matches length %zu",knn_matches.size());
for (size_t i = 0; i < knn_matches.size(); i++)
{
if (knn_matches[i][0].distance < ratio_thresh * knn_matches[i][1].distance){
good_matches.push_back(knn_matches[i][0]);
match = good_matches.size() ;
}
else{
bad_matches.push_back(knn_matches[i][0]);
mismatch = bad_matches.size();
}
}