2015-12-09 10 views
2

Я пытаюсь сопоставить один ColorSpacePoint с DepthSpacePoint в Kinect SDK 2.0.ColorSpacePoint to DepthSpacePoint

Если понимать три типа систем координат, предлагаемых Kinect, это должно быть довольно легкое отображение. И ColorSpace, и DepthSpace - это 2-мерные пространства, у них просто разные разрешения и пропорции.

Однако я не могу понять, какая функция в CoordinateMapper получит определенный ColorSpacePoint и вернет связанный с ним DepthSpacePoint.

Может ли кто-нибудь пролить свет на этот вопрос?

Спасибо!

+0

Покажите нам, что вы попробовали. – Krythic

+0

Это может быть полезно https://github.com/wieden-kennedy/Cinder-Kinect2/blob/master/src/Kinect2.cpp#L223 –

+0

Спасибо Рафаф, мне нужна противоположная операция ... – Pol

ответ

4

В SDK отсутствует метод, который сопоставляет один ColorSpacePoint с DepthSpace (или CameraSpace). И не может быть! Чтобы получить правильное отображение, вам нужны не только пиксельные координаты, но и глубина этого конкретного пикселя. И в RGB-изображении у вас нет этой информации.

Для получения правильного отображения из цветового пространства на глубину или пространства камеры сначала необходимо отобразить полное изображение глубины на цветное изображение, чтобы получить значения глубины для каждого цветного пикселя. Тогда было бы легко отобразить один пиксель от цвета к глубине. Но к тому времени у вас есть полное отображение.

Итак, если вам действительно нужно идти в этом направлении, вам нужно отобразить все изображение, используя CoordinateMapper.MapColorFrameToCameraSpace.

С другой стороны, когда вы находитесь в глубине или пространстве камеры, у вас уже есть вся необходимая информация для каждого пикселя, поэтому легко сопоставить отдельные пиксели. Вот почему существуют эти методы (например, CoordinateMapper.MapDepthPointToCameraSpace).

Edit:

Я надеюсь, что немного рисунок может помочь объяснить, почему глубина необходима, чтобы получить правильное соответствие между цветом и глубиной пространства:

enter image description here

Один из цветной камеры пиксели смотрят на синий объект (сплошная синяя стрелка). Этот пиксель отображается на определенный пиксель камеры глубины (сплошная красная стрелка).

Если объект не был там, тот же пиксель цветной камеры будет смотреть на фон (пунктирная синяя стрелка), который будет отображаться на другом пикселе в глубинной камере (пунктирная красная стрелка - в другом направлении стрелок означает разные пиксели).

Но цветная камера не знает, смотрит ли она на объект или на задний план. Он просто знает, какой цвет есть. Не так далеко от этого цвета. Вот почему цветная камера сама по себе не может решить, какой правильный пиксель в глубинной камере.

Глубинная камера, с другой стороны, знает расстояние на каждом пикселе, поэтому оно может определить соответствующий пиксель в цветной камере.

+1

Пожалуйста, простите меня, если я ошибаюсь, но до сих пор знаю ... «ColorSpacePoint» и «DepthSpacePoint» - это просто 2D-точки в 2D-плоскости. Они имеют разное соотношение по ширине и высоте. Если это так, то следует сопоставить тех, кто считает их соотношение, возможным. Кроме того, ['DepthSpacePoint'] (https://msdn.microsoft.com/en-us/library/windowspreview.kinect.depthspacepoint.aspx) и [' CameraSpacePoint'] (https://msdn.microsoft.com/ru -us/library/windowspreview.kinect.cameraspacepoint.aspx) не совпадают. –

+1

Несомненно, просто сопоставление между этими коэффициентами не является проблемой. Но отображение между глубиной и цветовым пространством - это не просто картирование с прямым пикселем. Из-за разных положений камеры глубина играет роль в картировании и должна учитываться. – HenningJ

+1

И да, 'DepthSpacePoint' и' CameraSpacePoint' - это разные структуры данных. Но они напрямую связаны между собой. Для каждого DepthSpacePoint (и соответствующего значения глубины) вы можете непосредственно вычислить соответствующий CameraSpacePoint. Они в основном содержат одну и ту же информацию, только в другом формате. – HenningJ