Облако точек Kinect для преобразования цветового пространства

Прямо сейчас я пытаюсь определить матрицу преобразования в рамках Kinect V2.0. Моя конечная цель состоит в том, чтобы получить матрицу перемещения и вращения, необходимую для преобразования моего облака точек относительно датчика глубины в облако точек относительно цветной камеры.

Я знаю, что я могу вручную откалибровать (через OpenCV и т. д.), чтобы определить преобразование, но я хотел бы реальную матрицу камеры. Я использую вызов MapDepthFrameToCameraSpaceUsingIntPtr, поэтому я знаю, что существует внутреннее понимание (также известное как матричное преобразование) между пространством глубины и цветовым пространством.

Кто-нибудь знает, как извлечь, или если внутри API Kinect v2 существует матрица, которую они используют внутри для вызова MapDepthFrameToCameraSpaceUsingIntPtr? Или, если есть способ перевести кадр изображения облака точек в цветовое пространство камеры?


person 9301293    schedule 27.01.2017    source источник


Ответы (2)


Вероятно, они знают матрицу поворота и переноса, а также параметры цветной камеры. К сожалению, если вы используете Microsoft SDK, они не раскрывают эти данные (общедоступны только параметры камеры глубины). Либо вы калибруете камеры, либо используете предоставленную справочную таблицу.

person Alex Gimondi    schedule 11.07.2017

То, что вы пытаетесь сделать (преобразование), называется Регистрация. Здесь я очень четко объяснил, как выполнить регистрацию.

Я знаю, что я могу вручную откалибровать (через OpenCV и т. д.), чтобы определить преобразование, но я хотел бы реальную матрицу камеры.

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

Кто-нибудь знает, как извлечь, или если внутри API Kinect v2 существует матрица, которую они используют внутри для вызова MapDepthFrameToCameraSpaceUsingIntPtr?

Вы можете извлечь часть матрицы, но не всю. Что-то очень бессильное MapDepthFrameToCameraSpaceUsingIntPtrне обрабатывается вашим процессором. Он вычисляется внутри чипа самого оборудования kinect. Значения матрицы встроены в сам чип. Причина этого в том, что подумайте о том, сколько вычислений нужно выполнить для этого вызова API. Например. Частота кадров Kinect составляет 30 кадров в секунду, а размер каждого цветного кадра составляет 1920 x 1080 пикселей, а размер кадра глубины составляет 512 x 424 пикселей. как минимум

30 x 512 x 424 = 6,512,640 вычислений в секунду.

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

Я разработал прототип для 3D-взаимодействия с визуализацией облака точек в реальном времени.

Вы можете проверить мой репозиторий VRInteraction.

Демонстрационное видео

Откалибрована матрица камеры цвета и глубины

Как вы можете видеть в правой части видео, это трехмерное облако точек в реальном времени. Я достигаю этого, используя CUDA (ускорение графического процессора) путем регистрации кадра глубины в цветном кадре и построения облака точек RGBXYZ.

person Shanil Fernando    schedule 11.07.2017