Контекст:Распознавание объектов по Контуры против Особенности
У меня есть RGB-D видео с Kinect, который направлен прямо вниз на стол. Существует библиотека из примерно 12 объектов, которые мне нужно идентифицировать, отдельно или несколько за раз. Я работаю с извлечением и обнаружением SURF с изображения RGB, препроцессором с уменьшением масштаба до 320x240, оттенками серого, растяжением контраста и балансировкой гистограммы перед применением SURF. Я построил a lasso tool, чтобы выбрать среди обнаруженных ключевых точек в неподвижном виде видеоизображения. Затем эти ключевые точки используются для создания дескрипторов объектов, которые используются для идентификации объектов в живой видеопотоке.
Проблема:
примеры SURF показать успешную идентификацию объектов с приличным количеством текста, как функция детализации, например. логотипы и шаблоны. Объекты, которые мне нужно идентифицировать, относительно просты, но имеют отличительную геометрию. Функции SURF, найденные в моих неподвижных изображениях, иногда являются непротиворечивыми, но в основном несущественными поверхностными характеристиками. Например, скажем, у меня есть деревянный куб. SURF обнаруживает несколько фрагментов зерна на одной грани, а затем выходит на другие грани. Мне нужно обнаружить (что-то типа), что есть четыре угла на равных расстояниях и прямых углах. Ни один из моих объектов не имеет много рисунка, но все имеют отличительную симметричную геометрию и цвет. Подумайте, сотовый телефон, леденец, нож, боулинг. Моя мысль заключалась в том, что я мог бы создавать дескрипторы объектов для каждой существенно отличающейся ориентации объекта, например. два дескриптора для боулинга: один встает и один кладет вниз. Для мобильного телефона одна на передней и одна на задней. Моему распознавателю нужна вращательная инвариантность и некоторая степень масштабной инвариантности в случае, если объекты сложены. Предпочтительнее иметь дело с некоторой окклюзией (SURF ведет себя достаточно хорошо), но не является самой важной характеристикой. Скоринговая инвариантность была бы предпочтительнее, и SURF хорошо справляется с бумажными распечатками моих объектов, удерживаемых вручную в результате перекоса.
Вопросы:
я использую неправильные параметры SURF, чтобы найти возможности в неподходящее масштабе? Есть ли лучший алгоритм для такого рода идентификации объекта? Есть ли что-то, что можно легко использовать как SURF, который использует данные глубины от Kinect вместе с или вместо данных RGB?
Джек, спасибо за ваш ответ и примеры. Теперь я использую изображение глубины и работаю над распознающим устройством, используя некоторые установленные дескрипторы, которые используют гистограммы нормалей поверхности вокруг выбранных ключевых точек. Новый компьютер, новые библиотеки и новая система с нуля :) https://github.com/jbeuckm/kinect_pcl_osc_qt –
Прохладный! Вы видели это? http://web.missouri.edu/hantx/paper/Tang_Wang_Lv_Han_accv12.pdf – JackKalish
SHOT и другие дескрипторы гистограмм очень интересны и очень интенсифицированы. Я использую дескрипторы SHOT Color, но приоритеты, какие объекты я пытаюсь сопоставить, запустив cv :: matchShapes с набором записанных контурных снимков. Согласование контуров на изображении с пороговой глубиной демонстрирует много обещаний.Это на самом деле так же хорошо, как и SHOT для моих объектов, и работает в 1000 раз быстрее. –