Я использую интерфейс OpenCV 2.4.3 С++ для поиска совпадающих точек между двумя изображениями. Первая попытка - использовать SURF. Единственная проблема - время потребления, поэтому я попробовал новый экстрактор FREAK. Используя SURF для обнаружения и FREAK для описания, я понял, что FREAK уменьшает количество ключевых точек до почти половины обнаруженных, а результирующих совпадений недостаточно. Именно по этой причине я попробовал FAST получить больше ключевых точек. Результаты:
- SURF-детектор, SURF-экстрактор, перекрестная проверка BFMatcher true, RANSAC: первое изображение 70 точек, 50 ключевых точек второго изображения, 200 мс. 250мс. 15мс. 15мс.
- SURF-детектор, FREAK-экстрактор, перекрестная проверка BFMatcher true, RANSAC: 39 ключевых точек первого изображения, 30 ключевых точек второго изображения (после FREAK), 200 мс., 50 мс., 0 мс, 0 мс. Это приводит к тому, что слишком мало хороших совпадений.
- FAST-детектор, FREAK-экстрактор, перекрестная проверка BFMatcher true, RANSAC: 120 ключевых точек, 90 ключевых точек, (69 и 48 ключевых точек после FREAK), 10 мс, 450 мс, 15 мс, 10 мс.
После этого я использовал ORBFeatureDetector и получал такое же количество ключевых точек, что и FAST, но после экстрактора FREAK результирующие ключевые точки равны 0 для каждого изображения. Я делаю что-то неправильно? Являются ли ключевые точки ORB отличными от тех, которые получены от FAST? Возможно, я мог бы открыть для этого еще один вопрос, но у меня есть последний. Какая может быть лучшая комбинация извещателя/экстрактора для получения тех же результатов, что и мои первые эксперименты с использованием SURF, но сокращение времени обработки? Поскольку, поскольку я получаю больше ключевых точек, часть экстрактора также занимает больше времени, хотя я использую FREAK.