В даний час я працюю і порівнюю продуктивність декількох функціональних детекторів, які надає OpenCV як основу для візуального зіставлення функцій.
Я використовую дескриптори SIFT . Я виявив задовільну відповідність (після відхилення поганих збігів) під час виявлення особливостей MSER та DoG (SIFT) .
В даний час я тестую свій код за допомогою GFTT (Good Features to Track - Harris Corners) для порівняння, а також тому, що в остаточному застосуванні набір функцій GFTT буде доступний у процесі візуального відстеження функцій.
Я використовую, cv::FeatureDetector::detect(...)
що дає мені std::vector<cv::KeyPoint>
заповнені виявлені функції / ключові точки / регіони, що цікавлять . Структура cv::KeyPoint
містить основну інформацію про місце розташування функції, а також інформацію про size
та octave
в якій виявлено ключову точку.
Мої перші результати з GFTT були жахливими, поки я не порівняв типові size
та octave
параметри в різних типах функцій:
- MSER встановлює розмір (між 10 і 40 пікселями) і залишає октаву 0
- DoG (SIFT) встановлює як розмір, так і октаву ( співвідношення розміру / октави між 20 і 40)
- GFTT параметри є завжди : розмір = 3 , октава = 0
Я припускаю, що це тому, що основне призначення функцій GFTT було не використовувати для узгодження, а лише для відстеження. Це пояснює низьку якість відповідності результатів, оскільки дескриптори, витягнуті з таких крихітних особливостей, перестають бути дискримінаційними та інваріантними для багатьох речей , включаючи невеликі зсуви в 1 пікселі.
Якщо я вручну встановити size
з GFTT до 10 - 12 , я отримую хороші результати, дуже схожі на при використанні MSER або DOG (SIFT) .
Моє запитання: чи є кращий спосіб визначити, на скільки збільшити size
(і / або octave
), ніж просто "йти-з-10-бачити-якщо-працює" ? Я хочу уникнути жорсткого кодування size
збільшення, якщо можливо, і визначити це програмно, але жорстке кодування нормально , якщо у мене є тверді аргументи, що підтверджують мій вибір нового алгоритмуsize
/ size
збільшення / size
оцінка .