Kinect как датчик движения
Я планирую создать приложение, которое делает что-то вроде этого: http://www.zonetrigger.com/articles/Kinect-software/
Это означает, что я хочу иметь возможность настроить "Зоны запуска" с помощью Kinect, и это 3D-изображение. Теперь я знаю, что Microsoft заявляет, что Kinect может обнаружить скелет до 6 человек. Для меня, однако, было бы достаточно определить, входит ли что-то в зону триггера и где.
Кто-нибудь знает, можно ли запрограммировать Kinect как простой датчик движения, чтобы он мог обнаружить более 6 записей?
1 ответ
Хорошо известно, что Kinect не может обнаружить более 5 записей (шутка). Все, что вам нужно сделать, это получить карту глубины (z-карту) из Kinect, а затем преобразовать ее в 3D-карту, используя эти формулы,
X = (((cols - cap_width) * Z ) / focal_length_X);
Y = (((row - cap_height)* Z ) / focal_length_Y);
Z = Z;
Где row и col рассчитываются по центру изображения (не по левому верхнему углу!), А focal - это фокусное расстояние Kinect в пикселях (~570). Теперь вы можете указать точное местоположение в 3D, где, если появляются пиксели, вы можете делать все, что хотите. Вот больше указателей:
Вы можете использовать openCV для простоты визуализации. Чтобы прочитать кадр из Kinect после его инициализации, вам просто нужно что-то вроде этого:
Mat inputMat = Mat (h, w, CV_16U, (void *) deep_gen.GetData());
Вы можете легко визуализировать карты глубины, используя выравнивание гистограммы (это оптимально распределит 10000 уровней Kinect среди доступных 255 уровней серого)
Иногда желательно выполнить сегментацию объекта, группируя пространственно близкие пиксели с одинаковой глубиной вместе. Я делал это несколько лет назад, видел это, но мне пришлось удалить пол и / или общую поверхность, на которой оставался объект, в противном случае все объекты были соединены и извлечены как один большой сегмент.