Распознавание образов Kinect
Я купил Kinect, чтобы играть на моем ПК на С#. (И какое удовольствие это программа!)
Я использую CLNUIDevice.dll, чтобы получить изображение глубины с Kinect. Это прекрасно работает, и я могу прочитать глубину с помощью значений RGB на изображении.
Теперь мне интересно, какие библиотеки существуют для разных типов распознавания. Я видел распознавание рук, распознавание лиц, скелет, эмоции, объекты и т.д.
Библиотеки обработки изображений не обязательно должны быть для Kinect (хотя это было бы неплохо), и они не должны быть для .Net(хотя это было бы неплохо). Например: Любой объект отслеживания lib будет работать, но если он может использовать 3D-карту тепла от Kinect правильно, она будет работать намного лучше.
Ответы
Ответ 1
Вы можете взять серию RGB-матриц, созданных Kinect, и запустить их с помощью стандартных алгоритмов обработки изображений, на практике алгоритмы обработки изображений обычно объединяются вместе для получения значимых результатов. Вот несколько стандартных методов, которые могут быть легко реализованы (и объединены) в .net:
Template Matching - метод обработки цифровых изображений для поиска небольших частей изображения, соответствующих шаблону image http://en.wikipedia.org/wiki/Template_matching
Морфологическая обработка изображений - теория и техника для анализа и обработки геометрических структур на основе теории множеств, теории решетки, топологии и случайных функций
http://ashleyaberneithy.wordpress.com/2011/08/08/automating-radiology-detecting-lung-nodules-using-morphological-image-processing-in-f/
Существуют также более совершенные методы обработки изображений, которые могут использоваться в конкретных сценариях, например распознавание лиц и сопоставление образцов с помощью машинного обучения.
Принципиальный анализ компонентов. Я использовал эту технику в прошлом, и я думаю, что это используется в современных потребительских камерах для распознавания лиц http://en.wikipedia.org/wiki/Principal_component_analysis
Согласование шаблонов машинного обучения. В прошлом я использовал вспомогательные векторные машины и алгоритмы обучения на основе нейронной сети для обнаружения шаблонов в матрицах изображений. Это стоит прочитать Вапник Статистическая теория обучения - http://www.amazon.com/Statistical-Learning-Theory-Vladimir-Vapnik/dp/0471030031 который показывает, как успешно сопоставить данные обучения в n-мерной структуре и как успешно моделировать гиперплоскости внутри структуры, которые классифицируют данные, новые данные затем могут быть классифицированы на основе этой модели. Также существует библиотека под названием LibSVM, которую я нашел полезной. http://www.csie.ntu.edu.tw/~cjlin/libsvm/
Как раз боковое примечание, было бы более естественно использовать F # в мире .net для реализации некоторых из этих алгоритмов
EDIT: еще одна действительно хорошая книга - "Цифровая обработка изображений"
Ответ 2
Полезная библиотека .Net для компьютерного зрения и машинного обучения AForge.NET
Вот пример кода и видео с кем-то, использующим его с Kinect: Conquex
Ответ 3
Изучите OpenCV. Это стандартная структура для лабораторий компьютерного зрения/обучения сегодня. Попробуйте найти объекты контура, ближайших соседей K и т.д. Но сначала изучите его интерфейс (структуры данных, функции).
Ответ 4
И обоюдный OpenCV и мой fav-порт на С# http://www.emgu.com/wiki/index.php/Main_Page
Ответ 5
Сайдинг с Кенни на этом - оболочка Emgu С# для OpenCV - это то, за что я бы пошел. OpenCV (обычно на базе С++) является наиболее широко используемой инфраструктурой Computer Vision, а также частично поддерживается/оптимизируется Intel. Многие современные исследователи и инженеры используют его для создания своих собственных проектов, а оболочка Emgu дает отличный перевод, чтобы начать использовать его библиотеки на С#. Я чувствую, что много инноваций с открытым исходным кодом в области Kinect происходит с обертками libfreenect (лучше всего используется с Linux/С++), и EmguCV должен дать вам лучший способ подражать (или использовать другие имитации) того, что эти исследователи Vision делают.
Ответ 6
Некоторая коррекция об OpenCV, это была библиотека C, в то время как прежний код все еще поддерживается, OpenCV теперь почти полностью С++, то есть начиная с версии 2.1. Многим из которых было сложно справиться, когда это была только библиотека C, была упрощена в более новых версиях.
Также есть группа OpenCV Yahoo, которая работает как отличный ресурс. Кроме того, openCV поставляется с набором образцов, которые помогут вам справиться с базовым сопоставлением шаблонов.
Ссылка на группы Yahoo
http://tech.groups.yahoo.com/group/OpenCV/
Образец Kinect и OpenCV http://www.morethantechnical.com/2010/11/22/kinect-and-opencv-2-1/