libvisiontransfer  6.4.0
reconstruct3d.h
1 /*******************************************************************************
2  * Copyright (c) 2019 Nerian Vision GmbH
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *******************************************************************************/
14 
15 #ifndef VISIONTRANSFER_RECONSTRUCT3D_H
16 #define VISIONTRANSFER_RECONSTRUCT3D_H
17 
18 #include <limits>
19 #include <stdexcept>
20 #include "visiontransfer/common.h"
21 #include "visiontransfer/imagepair.h"
22 
23 namespace visiontransfer {
24 
31 class VT_EXPORT Reconstruct3D {
32 public:
36  Reconstruct3D();
37 
38  ~Reconstruct3D();
39 
70  float* createPointMap(const unsigned short* dispMap, int width, int height,
71  int rowStride, const float* q, unsigned short minDisparity = 1);
72 
85  float* createPointMap(const ImagePair& imagePair, unsigned short minDisparity = 1);
86 
107  void projectSinglePoint(int imageX, int imageY, unsigned short disparity, const float* q,
108  float& pointX, float& pointY, float& pointZ);
109 
135  void writePlyFile(const char* file, const unsigned short* dispMap,
136  const unsigned char* image, int width, int height, ImagePair::ImageFormat format,
137  int dispRowStride, int imageRowStride, const float* q,
138  double maxZ = std::numeric_limits<double>::max(),
139  bool binary = false);
140 
155  void writePlyFile(const char* file, const ImagePair& imagePair,
156  double maxZ = std::numeric_limits<double>::max(), bool binary = false);
157 
158 #ifdef PCL_MAJOR_VERSION
159 
174  inline pcl::PointCloud<pcl::PointXYZ>::Ptr createXYZCloud(const ImagePair& imagePair,
175  const char* frameId, unsigned short minDisparity = 0);
176 
182  inline pcl::PointCloud<pcl::PointXYZI>::Ptr createXYZICloud(const ImagePair& imagePair,
183  const char* frameId, unsigned short minDisparity = 0);
184 
190  inline pcl::PointCloud<pcl::PointXYZRGB>::Ptr createXYZRGBCloud(const ImagePair& imagePair,
191  const char* frameId, unsigned short minDisparity = 0);
192 #endif
193 
194 private:
195  // We follow the pimpl idiom
196  class Pimpl;
197  Pimpl* pimpl;
198 
199  // This class cannot be copied
200  Reconstruct3D(const Reconstruct3D& other);
201  Reconstruct3D& operator=(const Reconstruct3D&);
202 
203 #ifdef PCL_MAJOR_VERSION
204  // Initializes a PCL point cloud
205  template <typename T>
206  typename pcl::PointCloud<T>::Ptr initPointCloud(const ImagePair& imagePair, const char* frameId);
207 #endif
208 };
209 
210 } // namespace
211 
212 #include "visiontransfer/reconstruct3d-pcl.h"
213 
214 #endif
Transforms a disparity map into a set of 3D points.
Definition: reconstruct3d.h:31
ImageFormat
Image formats that can be transferred.
Definition: imagepair.h:38
A set of two images, which are usually the left camera image and the disparity map.
Definition: imagepair.h:33
Nerian Vision Technologies