Как отобразить 3D скелетные суставы обратно в 2D цветное изображение без координатного сопоставления из Kinect Window SDK - PullRequest
0 голосов
/ 08 мая 2018

Я бы хотел отобразить 3D-скелет в CameraSpace обратно на 2D-цветное изображение в Kinect без использования Mapper of Coordinate. Нужно ли преобразовывать камеру глубины в цветную камеру?

По моему мнению, скелетные суставы получены из изображения глубины. Таким образом, чтобы получить положение стыков в цветном изображении, я должен выполнить следующие 3 шага:

1) 3D-швы находятся на глубине камеры 3D-пространства, мне нужно преобразовать в цвет камеры 3D-пространства (вращение / перемещение). Я не знаю, как получить эту матрицу преобразования!

2) Найдите внутренний параметр Цветной камеры (используя набор инструментов калибровки Matlab), чтобы отобразить 3D обратно в 2D

3) Умножение с коэффициентами искажения.

Я нашел один подобный вопрос здесь: Как преобразовать точки в пространстве глубины в цветовое пространство в Kinect без использования функций Kinect SDK? Тем не менее, вопрос о том, как найти матрицу преобразования для отображения глубины камеры в цветную камеру, остается без ответа.

Edit: После реализации, я думаю, что Color 2D и глубина 2D совместно используют одно и то же пространство 3D-камеры (в некотором смысле, глубина и цвет - это две разные камеры -> они должны иметь различное пространство 3D-камеры). Таким образом, я успешно отобразил 3D-точки в 2D-цвет без функции отображения координат (я использовал проекционную матрицу, которая была обнаружена в наборе инструментов Matlab). Пространство 3D-камеры -> цвет назад 2D-пикселя

В начале, я думаю, что 3D-точки находятся в 3D-пространстве, 3D-глубина и 3D-пространство отличаются. (вход: 3D-точки в трехмерном пространстве глубины, вывод: 2D-цветной пиксель), Мне нужно преобразовать 3D-камеру глубины -> 3D-камеру цвета -> проецировать обратно в цвет 2D-пикселя ). Однако шаг 3D-камера глубины -> 3D-камера цвета реализовывать не нужно.

1 Ответ

0 голосов
/ 09 мая 2018

Да, вам абсолютно необходимо преобразовать пространство глубины камеры в пространство цветной камеры. Kinect имеет две камеры - ИК и RGB и три «пробела» - камеру, глубину и цвет. Глубина и ИК изображения имеют одинаковое цветовое пространство. Скелетные соединения входят в Camera Space в 3D, поэтому для того, чтобы иметь соответствующую точку в Depth или Color space, вам нужно будет соответствующим образом преобразовать (естественно, вы потеряете координату Z в процессе).

Существует очень веская причина, по которой процесс отображения координат абстрагируется от вызова API. Это зависит от поля зрения (поля зрения) камер и физического расстояния между ними. Они могут варьироваться в зависимости от модели датчика. Поэтому стоит проверить эти значения для вашего конкретного датчика. Они постоянны, поэтому, если вы можете гарантировать, что ваш код будет работать только на этой конкретной модели Kinect - у вас все будет хорошо.

После этого см. Следующий пост о вычислениях, которые вам нужно сделать: Ручное отображение координат

...