Kinect Point Cloud Изогнутые стены

В моем проекте Kinect я пытаюсь создать облако точек с сенсора Kinect. При отображении 3D-точек я получаю перекошенную модель, в которой стены и пол изогнуты.

РЕДАКТИРОВАТЬ: я использую Microsoft Kinect SDK. Это облако точек было сгенерировано датчиком в футе или двух от стены.

Пример Kinect


person user977198    schedule 02.04.2013    source источник
comment
Предоставьте немного больше деталей, например: используете ли вы официальный Kinect API или libkinect, и как далеко Kinect находился от стен.   -  person Rahul Banerjee    schedule 02.04.2013
comment
Я использовал Microsoft SDK. Стены примерно в футе или около того от Kinect.   -  person user977198    schedule 02.04.2013
comment
Не могли бы вы немного рассказать о том, как вы создаете координаты x, y для облаков точек? Используете ли вы значения искажения ИК-датчика?   -  person Sassa    schedule 02.04.2013
comment
Это бочкообразное искажение происходит на близком расстоянии, только по горизонтальной оси, и является артефактом работы Kinect. Подробнее см. на странице 35 этой статьи   -  person Rahul Banerjee    schedule 02.04.2013
comment
@Chrys X и y - координаты пикселей изображения глубины. Значения — это, по сути, то, что датчик Kinect возвращает в виде данных о глубине. Я не знаю, каковы значения искажения ИК-датчика.   -  person user977198    schedule 02.04.2013
comment
@RahulBanerjee Изображение, которое я разместил, является изображением сверху вниз и не обязательно появляется только с близкого расстояния. На бумаге похоже, что бочкообразный эффект происходит с плоскостями, которые параллельны плоскости изображения, но это искривление происходит только с плоскостями, которые перпендикулярны (или просто не параллельны) плоскости изображения, включая землю (не показано).   -  person user977198    schedule 02.04.2013


Ответы (1)


Я узнал ответ. Я использовал изображение глубины, которое не является координатами реального мира. Я использовал класс CoordinateMapper в Kinect SDK для преобразования изображения глубины в SkeletonPoints, которые представляют собой координаты реального мира.

Это будет выглядеть примерно так:

using (DepthImageFrame depthFrame = e.OpenDepthImageFrame()) {
  DepthImagePixel[] depth = new DepthImagePixel[depthFrame.PixelDataLength];
  SkeletonPoint[] realPoints = new SkeletonPoint[depth.Length];

  depthFrame.CopyDepthImagePixelDataTo(depth);

  CoordinateMapper mapper = new CoordinateMapper(sensor);
  mapper.MapDepthFrameToSkeletonFrame(DEPTH_FORMAT, depth, realPoints);
}
person user977198    schedule 07.04.2013