Распознавание объектов по контурам и функциям

Контекст:

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

Проблема:

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

Вопросы:

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

1 ответ

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

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

Я знаю, что существуют и другие методы, одним из возможных решений для вас может быть приблизительно PolyDP, который описан здесь: Как обнаруживать простые геометрические фигуры с помощью OpenCV

Хотелось бы услышать о вашем прогрессе в этом!

Другие вопросы по тегам