Эффективное сравнение глубины Kinect с глубиной OpenGL - PullRequest
2 голосов
/ 25 ноября 2011

Фон:

Эта проблема связана с 3D-отслеживанием объекта.

Моя система проецирует объект / образцы из известных параметров (X, Y, Z) наОткройте OpenGL и попытайтесь сопоставить информацию об изображении и глубине, полученную от датчика Kinect, чтобы определить трехмерное положение объекта.

Проблема:

Глубина Kinect-> process-> value вмиллиметры

OpenGL-> глубина буфера-> значение между 0-1 (которое нелинейно отображается между ближним и дальним)

Хотя я мог бы восстановить значение Z из OpenGL, используя метод, упомянутый в http://www.songho.ca/opengl/gl_projectionmatrix.html но это приведет к очень низкой производительности.

Я уверен, что это общая проблема, поэтому я надеюсь, что должно быть какое-то разумное решение.

Вопрос:

Эффективный способ восстановить координату Z глаза из OpenGL?

Или есть какой-то другой способ решить вышеуказанную проблему?

1 Ответ

2 голосов
/ 25 ноября 2011

Теперь моя проблема в том, что глубина Kinect в мм

Нет, это не так.Kinect сообщает о его глубине в виде значения в 11-битном диапазоне произвольных единиц.Только после некоторой калибровки значение глубины можно интерпретировать как физическую единицу.Вы правы, поскольку значения глубины перспективной проекции OpenGL являются нелинейными.

Так что, если я вас правильно понимаю, вы хотите эмулировать Kinect, извлекая содержимое буфера глубины, верно?Тогда наиболее простым решением было использование комбинации вершинного и фрагментного шейдера, в которой вершинный шейдер передает линейную глубину как дополнительное изменение к фрагментному шейдеру, а затем фрагментный шейдер перезаписывает значение глубины фрагмента переданным значением.(Для этого вы также можете использовать дополнительную цель рендеринга.)

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

...