Калибровка Kinect и изображение глубины

Я начал смотреть на PCL и его SDK для Kinect. У меня очень простая проблема. Я откалибровал RGB- и ИК-камеры, используя RGBDemo с шаблоном Checkerboard в качестве контрольных изображений. Я получил коэффициенты искажения и смещения. У меня возникла проблема с использованием коэффициентов для получения калиброванного облака точек.

То, что я пытаюсь выяснить, - это процедура получения входного изображения глубины для реализации модели калибровки. Я нашел класс openni_wrapper::DepthImage с функцией getDepthMetaData().Data(), которая обеспечивает глубину в миллиметрах.

Это грубая глубина?

Если нет, есть ли другая функция для получения необработанного изображения глубины без предварительной калибровки с использованием PCL?


person shunyo    schedule 12.11.2013    source источник


Ответы (1)


Это похоже на информацию, которую можно найти в учебнике по грабберу: http://pointclouds.org/documentation/tutorials/openni_grabber.php

Вы можете изменить учебник, чтобы использовать:

void (const boost::shared_ptr<openni_wrapper::DepthImage>&)
//This provides the depth image, without any color or intensity information

or

void (const boost::shared_ptr<openni_wrapper::Image>&, const  
      boost::shared_ptr<openni_wrapper::DepthImage>&, float constant)
// When a callback of this type is registered, the grabber sends both RGB image 
// and depth image and the constant (1 / focal length), which you need if you 
// want to do your own disparity conversion.

В коде это становится:

#include <pcl/io/openni_grabber.h>

class KinectGrabber
{
public:
 void cloud_cb_ (const boost::shared_ptr<openni_wrapper::DepthImage> &depthImage)
 {
    // Do something with depthImage
 }

 void run ()
 {
   pcl::Grabber* interface = new pcl::OpenNIGrabber();

   boost::function<void (const boost::shared_ptr<openni_wrapper::DepthImage>&)> f =
     boost::bind (&KinectGrabber::cloud_cb_, this, _1);

   interface->registerCallback (f);

   interface->start ();

   while (//place something to stop on)
   {
     //boost::this_thread::sleep (boost::posix_time::seconds (1));
     // or other function
   }

   interface->stop ();
 }
};

int main ()
{
   KinectGrabber v;
   v.run ();
   return 0;
}
person Deepfreeze    schedule 20.11.2013
comment
Значит, мы не можем получить некалиброванное изображение с помощью PCL и OpenNI? Я попробовал это, и кажется, что это уже дает нам окончательное откалиброванное изображение глубины с глубиной в мм. Необработанные изображения глубины должны иметь значения от 0 до 2047 (11 бит) в соответствии с руководствами. - person shunyo; 20.11.2013