Я пытаюсь запустить обнаружение функций на изображении, используя некоторые встроенные детекторы функций OpenCV. Однако я хочу определить только лучшие/лучшие n функции, присутствующие в изображении (скажем, 30 для этого примера). У меня уже есть код, который находит функции и затем использует их для идентификации этого объекта на других изображениях, но я не могу понять, как ограничить количество найденных ключевых точек. Я инициализирую различные детекторы/экстракторы/сопоставители, как показано ниже:
private final FeatureDetector mFeatureDetector = FeatureDetector.create(FeatureDetector.ORB);
private final DescriptorExtractor mDescriptorExtractor = descriptorExtractor.create(DescriptorExtractor.ORB);
private final DescriptorMatcher mDescriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT);
Я пытался найти решение уже на SO, но единственные решения, которые я могу найти, не для версии OpenCV для Android. Попытка использовать аналогичные методы для этих решений также не сработала.
Единственный метод, который, как мне кажется, может сработать, — это просто взять первые 30 признаков, но я не думаю, что это сработает хорошо, поскольку все они могут быть сгруппированы в одной части изображения. Поэтому мне было интересно, знает ли кто-нибудь, как можно выбрать 30 лучших функций (если они действительно могут). Меня не волнует, для какого алгоритма обнаружения функций предназначено решение (MSER, ORB, SIFT, SURF, STAR, GFTT и т. д.).
Я также требую, чтобы каждый раз обнаруживалось ровно 30 функций, поэтому игра с чувствительностью до тех пор, пока она не станет «примерно правильной», не вариант.
EDIT: причина необходимости найти ровно 30 функций заключается в том, что я собираюсь использовать их для обучения своего детектора. Идея состоит в том, что я получу 30 признаков из каждого набора обучающих изображений, а затем использую результат, чтобы снова найти объект в сцене. Поскольку тренировочные изображения будут крупным планом объекта, не имеет значения, что функции не будут сгруппированы в одной части изображения.
nFeatures
(см. конструктор SURF в src), как в github.com/Itseez/opencv_contrib/blob/master/modules/. Обертки Java не предусмотрены для каждого алгоритма, поскольку они не бесплатны. У нас есть только общийcreate
. Кроме того, даже если вы получите 30 лучших функций, нет гарантии, что они не будут сгруппированы в одной части изображения. Можете ли вы дать больше ясности о необходимости ограничения функций? Поможет лиknnMatch
илиradiusMatch
? - person kiranpradeep   schedule 18.12.2014knnMatch
илиradiusMatch
помогут, но спасибо за мысль. Вы знаете, как был реализован алгоритм nFeatures? - person TheOmegaPostulate   schedule 19.12.2014