15 #ifndef VISIONTRANSFER_RECONSTRUCT3D_PCL_H
16 #define VISIONTRANSFER_RECONSTRUCT3D_PCL_H
18 #ifdef PCL_MAJOR_VERSION
20 namespace visiontransfer {
28 typename pcl::PointCloud<T>::Ptr Reconstruct3D::initPointCloud(
const ImageSet& imageSet,
const char* frameId) {
30 imageSet.getTimestamp(sec, microsec);
32 typename pcl::PointCloud<T>::Ptr ret(
33 new pcl::PointCloud<T>(imageSet.getWidth(), imageSet.getHeight()));
35 ret->header.frame_id = frameId;
36 ret->header.seq = imageSet.getSequenceNumber();
37 ret->header.stamp = sec * 1000000LL + microsec;
38 ret->width = imageSet.getWidth();
39 ret->height = imageSet.getHeight();
45 const char* frameId,
unsigned short minDisparity) {
47 pcl::PointCloud<pcl::PointXYZ>::Ptr ret = initPointCloud<pcl::PointXYZ>(imageSet, frameId);
48 memcpy(&ret->points[0].x, pointMap, ret->width*ret->height*
sizeof(
float)*4);
53 const char* frameId,
unsigned short minDisparity) {
55 pcl::PointCloud<pcl::PointXYZI>::Ptr ret = initPointCloud<pcl::PointXYZI>(imageSet, frameId);
59 pcl::PointXYZI* dstPtr = &ret->points[0];
61 for(
int y = 0; y < imageSet.getHeight(); y++) {
62 unsigned char* rowPtr = imageSet.getPixelData(colImg) + y*imageSet.getRowStride(colImg);
63 unsigned char* endPtr = rowPtr + imageSet.getWidth();
64 for(; rowPtr < endPtr; rowPtr++) {
65 dstPtr->intensity =
static_cast<float>(*rowPtr)/255.0F;
66 dstPtr->x = *pointMap++;
67 dstPtr->y = *pointMap++;
68 dstPtr->z = *pointMap++;
75 for(
int y = 0; y < imageSet.getHeight(); y++) {
76 unsigned short* rowPtr =
reinterpret_cast<unsigned short*
>(imageSet.getPixelData(colImg) + y*imageSet.getRowStride(colImg));
77 unsigned short* endPtr = rowPtr + imageSet.getWidth();
78 for(; rowPtr < endPtr; rowPtr++) {
79 dstPtr->intensity =
static_cast<float>(*rowPtr)/4095.0F;
80 dstPtr->x = *pointMap++;
81 dstPtr->y = *pointMap++;
82 dstPtr->z = *pointMap++;
89 throw std::runtime_error(
"Left image does not have a valid greyscale format");
96 const char* frameId,
unsigned short minDisparity) {
98 pcl::PointCloud<pcl::PointXYZRGB>::Ptr ret = initPointCloud<pcl::PointXYZRGB>(imageSet, frameId);
102 pcl::PointXYZRGB* dstPtr = &ret->points[0];
104 throw std::runtime_error(
"Left image is not an RGB image");
107 for(
int y = 0; y < imageSet.getHeight(); y++) {
108 unsigned char* rowPtr = imageSet.getPixelData(colImg) + y*imageSet.getRowStride(colImg);
109 unsigned char* endPtr = rowPtr + 3*imageSet.getWidth();
110 for(; rowPtr < endPtr;rowPtr +=3) {
111 dstPtr->r = rowPtr[0];
112 dstPtr->g = rowPtr[1];
113 dstPtr->b = rowPtr[2];
114 dstPtr->x = *pointMap++;
115 dstPtr->y = *pointMap++;
116 dstPtr->z = *pointMap++;