2016-02-07 2 views
1

Я использую видео, записанное с Kinect с языком C++ для моего проекта. Я пытаюсь получить координаты реального мира (реальная глубина) для точки. Но я не знаю, если для этой цели есть функция в Kinect SDK. Поэтому я изменил эту формулу:Получить глубину в мм для записанного видео из Kinect SDK

BYTE b = 255 - static_cast (256 realDepth/0x0FFF) 

, чтобы получить это:

realDepth = (255-b) * 0x0FFF/256 

Я не знаю, что я сделал правильно или нет. Что ты предлагаешь?

+1

Какой SDK вы используете? Microsoft SDK? Если да, то какая версия? 1.x ([Kinect для Xbox360] (https://upload.wikimedia.org/wikipedia/commons/f/fe/KinectSensor.png)) или 2.x ([Kinect для Xbox One] (http: // compass .xbox.com/активы/3d/37/3d377852-0f21-4074-a3c2-35f418170848.jpg? п = chandler_xboxone_hardware_960x540_01.jpg))? –

+1

Я использую Kinect для Windows SDK v1.7 – faimer

+0

Можете ли вы добавить фрагмент кода, используемого для записи видео глубины? –

ответ

1

После того, как увидел this video, я думаю, что вы должны действовать следующим образом:

  • белые пиксели являются Farest возможное расстояние, что (для Kinect SDK 1.x не в режиме, близком, т.е. режим по умолчанию) равный 4 метрам;
  • черные пиксели могут быть неизвестными, а также самое близкое возможное значение, которое (для Kinect SDK 1.x в режиме по умолчанию) равно 0,8 метра.

Таким образом, это означает, что если я правильно догадался, что эти видеоролики записаны в режиме по умолчанию и предполагается, что вы конвертируете каждый кадр в полутоновое изображение (каждое значение пикселя варьируется от 0 до 255), вы должны используют следующую формулу:

RealDepth (в метрах) = (3.2 * grayValue/255) + 0,8

Таким образом, если grayValue равно 0 (черный), а затем realDepth составляет 0,8 метра , Если grayValue равно 255 (белый), то realDepth составляет 4 метра.

Если вы хотите realDepth в миллиметрах, просто разделить его на 1000.

Отметим также, что некоторые черные пиксели могут также представлять неизвестное значение. Поэтому, если realDepth равно 0,8, вы не можете быть уверены, что это правильное значение, или если оно на самом деле неизвестно.

+0

Могу я понять 3.2 в формуле, пожалуйста? – faimer

+0

Если вы вычислите уравнение прямой, проходящей через две точки (т.е. [0; 0.8] и [255; 4]) в 2D-системе координат, а «grayValue» - как абсцисса и «realDepth» - как ордината, вы получите приведенная выше формула. Взгляните на [эту ссылку] (https://en.wikipedia.org/wiki/Line_%28geometry%29#Cartesian_plane). –