2014-01-13 3 views
2

Контекст:Распознавание объектов по Контуры против Особенности

У меня есть RGB-D видео с Kinect, который направлен прямо вниз на стол. Существует библиотека из примерно 12 объектов, которые мне нужно идентифицировать, отдельно или несколько за раз. Я работаю с извлечением и обнаружением SURF с изображения RGB, препроцессором с уменьшением масштаба до 320x240, оттенками серого, растяжением контраста и балансировкой гистограммы перед применением SURF. Я построил a lasso tool, чтобы выбрать среди обнаруженных ключевых точек в неподвижном виде видеоизображения. Затем эти ключевые точки используются для создания дескрипторов объектов, которые используются для идентификации объектов в живой видеопотоке.

Проблема:

примеры SURF показать успешную идентификацию объектов с приличным количеством текста, как функция детализации, например. логотипы и шаблоны. Объекты, которые мне нужно идентифицировать, относительно просты, но имеют отличительную геометрию. Функции SURF, найденные в моих неподвижных изображениях, иногда являются непротиворечивыми, но в основном несущественными поверхностными характеристиками. Например, скажем, у меня есть деревянный куб. SURF обнаруживает несколько фрагментов зерна на одной грани, а затем выходит на другие грани. Мне нужно обнаружить (что-то типа), что есть четыре угла на равных расстояниях и прямых углах. Ни один из моих объектов не имеет много рисунка, но все имеют отличительную симметричную геометрию и цвет. Подумайте, сотовый телефон, леденец, нож, боулинг. Моя мысль заключалась в том, что я мог бы создавать дескрипторы объектов для каждой существенно отличающейся ориентации объекта, например. два дескриптора для боулинга: один встает и один кладет вниз. Для мобильного телефона одна на передней и одна на задней. Моему распознавателю нужна вращательная инвариантность и некоторая степень масштабной инвариантности в случае, если объекты сложены. Предпочтительнее иметь дело с некоторой окклюзией (SURF ведет себя достаточно хорошо), но не является самой важной характеристикой. Скоринговая инвариантность была бы предпочтительнее, и SURF хорошо справляется с бумажными распечатками моих объектов, удерживаемых вручную в результате перекоса.

Вопросы:

я использую неправильные параметры SURF, чтобы найти возможности в неподходящее масштабе? Есть ли лучший алгоритм для такого рода идентификации объекта? Есть ли что-то, что можно легко использовать как SURF, который использует данные глубины от Kinect вместе с или вместо данных RGB?

ответ

2

Я делал что-то подобное для проекта и в итоге использовал супер простой метод распознавания объектов, который использовал обнаружение blob OpenCV и распознавал объекты на основе их областей. Очевидно, что для этого метода должно быть достаточно дисперсии.

Вы можете видеть мои результаты здесь: http://portfolio.jackkalish.com/Secondhand-Stories

Я знаю, что есть другие методы там, один из возможных решений для вас может быть approxPolyDP, который описан здесь: How to detect simple geometric shapes using OpenCV

Очень хотелось бы услышать о ваш прогресс в этом!

+0

Джек, спасибо за ваш ответ и примеры. Теперь я использую изображение глубины и работаю над распознающим устройством, используя некоторые установленные дескрипторы, которые используют гистограммы нормалей поверхности вокруг выбранных ключевых точек. Новый компьютер, новые библиотеки и новая система с нуля :) https://github.com/jbeuckm/kinect_pcl_osc_qt –

+1

Прохладный! Вы видели это? http://web.missouri.edu/hantx/paper/Tang_Wang_Lv_Han_accv12.pdf – JackKalish

+0

SHOT и другие дескрипторы гистограмм очень интересны и очень интенсифицированы. Я использую дескрипторы SHOT Color, но приоритеты, какие объекты я пытаюсь сопоставить, запустив cv :: matchShapes с набором записанных контурных снимков. Согласование контуров на изображении с пороговой глубиной демонстрирует много обещаний.Это на самом деле так же хорошо, как и SHOT для моих объектов, и работает в 1000 раз быстрее. –

Смежные вопросы