#android #opencv #surf
#Android #opencv #серфинг
Вопрос:
Это нормально? Когда я пробовал средство сопоставления методом перебора, результат каждый раз был одинаковым, а фланн — нет. Небольшое количество ключевых точек будет соответствовать разным местам. Я пишу код, используя оболочку Android, детектор ключевых точек и дескриптор — SURF, что-то вроде этого:
Mat queryDescriptors = new Mat();
Mat trainDescriptors = new Mat();
DescriptorExtractor surfDE = DescriptorExtractor.create(DescriptorExtractor.SURF);
surfDE.compute(queryImage, queryKeyPoints, queryDescriptors);
surfDE.compute(trainImage, trainKeyPoints, trainDescriptors);
DescriptorMatcher dm = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
List<DMatch> matches = new ArrayList<DMatch>();
dm.match(queryDescriptors, trainDescriptors, matches);
Комментарии:
1. Строка DescriptorMatcher.create выдает ошибку
Ответ №1:
FLANN расшифровывается как Быстрая библиотека для приблизительных ближайших соседей. Приближенные алгоритмы ближайшего соседа являются недетерминированными, часто рандомизированными KD-деревьями.
Комментарии:
1. Вы можете исправить начальное значение с помощью
cv::setRNGSeed(2391);
перед каждым использованием FLANN. Обратите внимание, что это не будет надежно работать, если вы используете ФЛАНН из нескольких потоков одновременно.
Ответ №2:
По словам Андрея, в этом причина! Так что да, это нормально. Чтобы найти больше, нужно было бы проанализировать алгоритмы!