2013-11-12 6 views
0

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

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

Является ли это необработанной глубиной?

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

ответ

0

Это звучит как информация, которую можно найти в граббер учебнике: 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 

или

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; 
} 
+0

Тогда мы не можем получить некалиброванное изображение с помощью PCL и OpenNI? Я пробовал это, и кажется, что это уже дает нам окончательное калиброванное изображение глубины с глубиной в мм. Изображения необработанной глубины должны иметь значения от 0-2047 (11 бит) в соответствии с направляющими. – shunyo