Я обнаружил и извлек ключевые точки SURF и их дескрипторы с техникой серфинга DENSE и без нее.Но каждый раз, когда я выполняю сопоставление, используя основанный на 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);
// ***************** Image Matching ************************************
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();
}
}