Как объединить и отобразить глубину и изображение RGB с помощью Kinect и opencv

МЫ делаем проект, используя kinect и opencv. Я совершенно новичок в 3D анализе. Основная цель состоит в том, чтобы получить информацию о глубине и rgb от kinect, обработать коврик rgb (основные функции фильтрации и порога) и объединить обработанное изображение rgb с исходной информацией о глубине. мне нужно выполнить основные шаги с подходящими приложениями для использования (opencv, opengl, openni, kinect sdk и т. д.)

1) как передать информацию о глубине и rgb из kinect в opencv?

2) можем ли мы индивидуально получить доступ к изображению RGB для его обработки?

3) как объединить два и какие функции использовать для отображения вывода?

Мы используем 64-разрядную версию Windows и kinect в качестве 3D-сенсора. Мы планируем использовать OpenNI для получения информации о rgb и глубине изображения, а затем обработать rgb в OpenCV, а затем отобразить изображение (обработанный RGB + глубина) в окне с помощью OpenGL.


person Anudeep Varma    schedule 22.03.2015    source источник


Ответы (1)


Прежде всего, я думаю, что ваш вопрос слишком общий, он будет зависеть от того, какие библиотеки/драйверы вы используете... Например, если вы используете openni, вы передаете информацию в одну сторону, а если вы используете kinect sdk, вам придется используйте другой метод...

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

3) чтобы объединить два, я полагаю, вы имели в виду глубину и rgb. Это также зависит от используемых вами библиотек и драйверов. Также способ, которым вы хотите его хранить, например. облака точек, изображение и т. д.

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

Я создал инструмент, используя openni2, opencv и Qt, я тестировал только камеры PrimeSense и Structure.io в Linux, но вы можете получить представление о том, что именно делать. Этот инструмент может выполнять некоторые базовые пороговые значения и сохранять данные в различных форматах (pcd, изображения, oni). Ссылка

Я также использовал почти такой же подход с openni1 и драйвером Avin и камерой Kinect1, в среду я могу загрузить код, и вы можете взглянуть, но в основном то же самое, только инициализация немного меняется.

В качестве основного контрольного списка вещей, которые вы должны сделать при работе с изображениями RGB-D:

  • Инициализировать потоки камеры
  • Создайте матрицу в opencv и скопируйте данные прямо в нее, обязательно прочитайте стандарт библиотеки, например, openni использует массивы RGB для цветовой матрицы, а KinectSDK использует RGBA (как минимум kinect SDK 2.0). Также убедитесь, что матрица глубины составляет 16 бит.
  • Чтобы отобразить матрицу глубины, вы должны нормализовать ее и изменить на матрицу в оттенках серого.
  • Вы можете выполнять любые манипуляции с изображениями, а затем сохранять их в желаемом формате.
  • Проверьте ссылку, которую я дал вам, чтобы узнать, как сохранить ее в наиболее распространенных форматах.

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

Я надеюсь, что эта информация поможет вам.

ОБНОВЛЕНИЕ: для Kinect 1 в Windows можно установить последнюю версию Kinect SDK и использовать openni2 без установки дополнительных драйверов.

  • просто установите Kinect SDK 1.8 (не 2.0)
  • Установить Openni2
  • запустите NiViewer.exe, чтобы проверить, работает ли он (он находится в папке openni)

Если до сих пор все хорошо, то вам нужно только:

  • Инициализировать openni
  • Инициализировать поток цвета и глубины
  • выполните основной цикл, в котором вы скопируете его на коврик OpenCV (вы можете использовать мой код, чтобы увидеть пример того, что я имею в виду)
  • сделайте любой процесс, который вы хотите для изображения rgb
  • создать облако точек для 3D-отображения/манипулирования, для этого я рекомендую библиотеку облаков точек, так как создать облако точек легко, и у них уже есть отображение для него.

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

Я надеюсь, это поможет вам

person api55    schedule 22.03.2015
comment
Мы добавили детали в вопрос Можете ли вы помочь с кодом ?? Код, чтобы получить rgb Mat для openCV и, наконец, отобразить 3D-изображение. Нам нужно просто захватить 3D-изображение, выполнить некоторую пороговую обработку и обработку изображения в openCV и, наконец, отобразить изображение в 3D-виде. Мы завершили код OpenCV. так что теперь нам нужна ваша помощь, чтобы захватить изображение, и нам нужен коврик RGB для обработки opencv, а затем, наконец, отобразить обработанный коврик rgb с глубиной в 3D-виде. - person Ashok Varma; 23.03.2015
comment
@AshokVarma это Kinect или Kinect2? - person api55; 23.03.2015
comment
это кинект а не кинект2 - person Ashok Varma; 23.03.2015
comment
Большое спасибо. и последнее сомнение, можем ли мы напрямую преобразовать мат OpenCV в PointCloud ?? и является ли библиотека pointColud лучше, чем OpenGL для 3D-изображений - person Ashok Varma; 23.03.2015
comment
@AshokVarma Вы можете преобразовать его в облако точек, вам просто нужно пройти через пиксели изображения глубины, и в том же месте изображения rgb вы найдете соответствующий цвет, значение z будет пикселем изображения глубины, а x и y вам нужно будет рассчитать что-то подобно этому pcl у вас уже есть несколько алгоритмов для облаков точек... в opengl вам придется создавать их самостоятельно, но вы можете делать больше вещей - person api55; 23.03.2015
comment
вот новый вопрос (stackoverflow.com/questions/29270544/) спасибо. OpenNI работал нормально, нам нужна помощь с дисплеем - person Ashok Varma; 26.03.2015