Я скопировал код Сопоставление функций с FLANN с учебника по OpenCV и внес следующие изменения:
- Я использовал функции SIFT вместо SURF;
-
Я изменил проверку на "хорошее совпадение". Вместо
if( matches[i].distance < 2*min_dist )
Я использовал
if( matches[i].distance <= 2*min_dist )
в противном случае я получал бы нулевые хорошие совпадения при сравнении изображения с самим собой.
-
Измененный параметр при рисовании ключевых точек:
drawMatches( img1, k1, img2, k2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::DEFAULT);
Я извлек SIFT из всех изображений в папке Ireland INRIA-Holidays dataset. Затем я сравнивал каждое изображение со всеми остальными и рисовал совпадения.
Однако есть странная проблема, с которой я никогда не сталкивался ни с какими другими реализациями SIFT/Matcher, которые я использовал в прошлом:
- совпадения для изображения, которое я сопоставил с самим собой, хороши. Каждая ключевая точка отображается на себя, за исключением некоторых. См. Изображение выше.
- Когда я сопоставляю я с другим изображением J (с J не равным I), многие точки отображаются на один и тот же. Ниже приведены некоторые примеры.
Есть ли кто-нибудь, кто использовал один и тот же код из учебника OpenCV и может сообщить о моем опыте?