28#ifndef UTIL3D_SURFACE_H_
29#define UTIL3D_SURFACE_H_
31#include <rtabmap/core/rtabmap_core_export.h>
33#include <pcl/PolygonMesh.h>
34#include <pcl/point_cloud.h>
35#include <pcl/point_types.h>
36#include <pcl/TextureMesh.h>
37#include <pcl/pcl_base.h>
38#include <rtabmap/core/Transform.h>
39#include <rtabmap/core/CameraModel.h>
40#include <rtabmap/core/ProgressState.h>
41#include <rtabmap/core/LaserScan.h>
42#include <rtabmap/core/Version.h>
64void RTABMAP_CORE_EXPORT createPolygonIndexes(
65 const std::vector<pcl::Vertices> & polygons,
67 std::vector<std::set<int> > & neighborPolygons,
68 std::vector<std::set<int> > & vertexPolygons);
70std::list<std::list<int> > RTABMAP_CORE_EXPORT clusterPolygons(
71 const std::vector<std::set<int> > & neighborPolygons,
72 int minClusterSize = 0);
74std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT organizedFastMesh(
75 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
76 double angleTolerance,
78 int trianglePixelSize,
79 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
80std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT organizedFastMesh(
81 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
82 double angleTolerance = M_PI/16,
84 int trianglePixelSize = 2,
85 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
86std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT organizedFastMesh(
87 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
88 double angleTolerance = M_PI/16,
90 int trianglePixelSize = 2,
91 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
93void RTABMAP_CORE_EXPORT appendMesh(
94 pcl::PointCloud<pcl::PointXYZRGBNormal> & cloudA,
95 std::vector<pcl::Vertices> & polygonsA,
96 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloudB,
97 const std::vector<pcl::Vertices> & polygonsB);
98void RTABMAP_CORE_EXPORT appendMesh(
99 pcl::PointCloud<pcl::PointXYZRGB> & cloudA,
100 std::vector<pcl::Vertices> & polygonsA,
101 const pcl::PointCloud<pcl::PointXYZRGB> & cloudB,
102 const std::vector<pcl::Vertices> & polygonsB);
105std::vector<int> RTABMAP_CORE_EXPORT filterNotUsedVerticesFromMesh(
106 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
107 const std::vector<pcl::Vertices> & polygons,
108 pcl::PointCloud<pcl::PointXYZRGBNormal> & outputCloud,
109 std::vector<pcl::Vertices> & outputPolygons);
110std::vector<int> RTABMAP_CORE_EXPORT filterNotUsedVerticesFromMesh(
111 const pcl::PointCloud<pcl::PointXYZRGB> & cloud,
112 const std::vector<pcl::Vertices> & polygons,
113 pcl::PointCloud<pcl::PointXYZRGB> & outputCloud,
114 std::vector<pcl::Vertices> & outputPolygons);
115std::vector<int> RTABMAP_CORE_EXPORT filterNaNPointsFromMesh(
116 const pcl::PointCloud<pcl::PointXYZRGB> & cloud,
117 const std::vector<pcl::Vertices> & polygons,
118 pcl::PointCloud<pcl::PointXYZRGB> & outputCloud,
119 std::vector<pcl::Vertices> & outputPolygons);
121std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT filterCloseVerticesFromMesh(
122 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr cloud,
123 const std::vector<pcl::Vertices> & polygons,
126 bool keepLatestInRadius);
128std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT filterInvalidPolygons(
129 const std::vector<pcl::Vertices> & polygons);
131pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT createMesh(
132 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloudWithNormals,
133 float gp3SearchRadius = 0.025,
135 int gp3MaximumNearestNeighbors = 100,
136 float gp3MaximumSurfaceAngle = M_PI/4,
137 float gp3MinimumAngle = M_PI/18,
138 float gp3MaximumAngle = 2*M_PI/3,
139 bool gp3NormalConsistency =
true);
141pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT createTextureMesh(
142 const pcl::PolygonMesh::Ptr & mesh,
143 const std::map<int, Transform> & poses,
144 const std::map<int, CameraModel> & cameraModels,
145 const std::map<int, cv::Mat> & cameraDepths,
146 float maxDistance = 0.0f,
147 float maxDepthError = 0.0f,
148 float maxAngle = 0.0f,
149 int minClusterSize = 50,
150 const std::vector<float> & roiRatios = std::vector<float>(),
151 const ProgressState * state = 0,
152 std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0,
153 bool distanceToCamPolicy =
false);
154pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT createTextureMesh(
155 const pcl::PolygonMesh::Ptr & mesh,
156 const std::map<int, Transform> & poses,
157 const std::map<
int, std::vector<CameraModel> > & cameraModels,
158 const std::map<int, cv::Mat> & cameraDepths,
159 float maxDistance = 0.0f,
160 float maxDepthError = 0.0f,
161 float maxAngle = 0.0f,
162 int minClusterSize = 50,
163 const std::vector<float> & roiRatios = std::vector<float>(),
164 const ProgressState * state = 0,
165 std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0,
166 bool distanceToCamPolicy =
false);
171void RTABMAP_CORE_EXPORT cleanTextureMesh(
172 pcl::TextureMesh & textureMesh,
175pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT concatenateTextureMeshes(
176 const std::list<pcl::TextureMesh::Ptr> & meshes);
178void RTABMAP_CORE_EXPORT concatenateTextureMaterials(
179 pcl::TextureMesh & mesh,
const cv::Size & imageSize,
int textureSize,
int maxTextures,
float & scale, std::vector<bool> * materialsKept=0);
181std::vector<std::vector<RTABMAP_PCL_INDEX> > RTABMAP_CORE_EXPORT convertPolygonsFromPCL(
182 const std::vector<pcl::Vertices> & polygons);
183std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > RTABMAP_CORE_EXPORT convertPolygonsFromPCL(
184 const std::vector<std::vector<pcl::Vertices> > & polygons);
185std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT convertPolygonsToPCL(
186 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
187std::vector<std::vector<pcl::Vertices> > RTABMAP_CORE_EXPORT convertPolygonsToPCL(
188 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & tex_polygons);
190pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT assembleTextureMesh(
191 const cv::Mat & cloudMat,
192 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons,
193#
if PCL_VERSION_COMPARE(>=, 1, 8, 0)
194 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords,
196 const std::vector<std::vector<Eigen::Vector2f> > & texCoords,
199 bool mergeTextures =
false);
201pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT assemblePolygonMesh(
202 const cv::Mat & cloudMat,
203 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
209cv::Mat RTABMAP_CORE_EXPORT mergeTextures(
210 pcl::TextureMesh & mesh,
211 const std::map<int, cv::Mat> & images,
212 const std::map<int, CameraModel> & calibrations,
213 const Memory * memory = 0,
214 const DBDriver * dbDriver = 0,
215 int textureSize = 4096,
216 int textureCount = 1,
217 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels = std::vector<std::map<int, pcl::PointXY> >(),
218 bool gainCompensation =
true,
219 float gainBeta = 10.0f,
221 bool blending =
true,
222 int blendingDecimation = 0,
223 int brightnessContrastRatioLow = 0,
224 int brightnessContrastRatioHigh = 0,
225 bool exposureFusion =
false,
226 const ProgressState * state = 0,
227 unsigned char blankValue = 255,
228 bool clearVertexColorUnderTexture =
true,
229 std::map<
int, std::map<int, cv::Vec4d> > * gains = 0,
230 std::map<
int, std::map<int, cv::Mat> > * blendingGains = 0,
231 std::pair<float, float> * contrastValues = 0);
232cv::Mat RTABMAP_CORE_EXPORT mergeTextures(
233 pcl::TextureMesh & mesh,
234 const std::map<int, cv::Mat> & images,
235 const std::map<
int, std::vector<CameraModel> > & calibrations,
236 const Memory * memory = 0,
237 const DBDriver * dbDriver = 0,
238 int textureSize = 4096,
239 int textureCount = 1,
240 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels = std::vector<std::map<int, pcl::PointXY> >(),
241 bool gainCompensation =
true,
242 float gainBeta = 10.0f,
244 bool blending =
true,
245 int blendingDecimation = 0,
246 int brightnessContrastRatioLow = 0,
247 int brightnessContrastRatioHigh = 0,
248 bool exposureFusion =
false,
249 const ProgressState * state = 0,
250 unsigned char blankValue = 255,
251 bool clearVertexColorUnderTexture =
true,
252 std::map<
int, std::map<int, cv::Vec4d> > * gains = 0,
253 std::map<
int, std::map<int, cv::Mat> > * blendingGains = 0,
254 std::pair<float, float> * contrastValues = 0);
256void RTABMAP_CORE_EXPORT fixTextureMeshForVisualization(pcl::TextureMesh & textureMesh);
259RTABMAP_DEPRECATED
bool RTABMAP_CORE_EXPORT multiBandTexturing(
260 const std::string & outputOBJPath,
261 const pcl::PCLPointCloud2 & cloud,
262 const std::vector<pcl::Vertices> & polygons,
263 const std::map<int, Transform> & cameraPoses,
264 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels,
265 const std::map<int, cv::Mat> & images,
266 const std::map<
int, std::vector<CameraModel> > & cameraModels,
267 const Memory * memory = 0,
268 const DBDriver * dbDriver = 0,
269 int textureSize = 8192,
270 const std::string & textureFormat =
"jpg",
271 const std::map<
int, std::map<int, cv::Vec4d> > & gains = std::map<
int, std::map<int, cv::Vec4d> >(),
272 const std::map<
int, std::map<int, cv::Mat> > & blendingGains = std::map<
int, std::map<int, cv::Mat> >(),
273 const std::pair<float, float> & contrastValues = std::pair<float, float>(0,0),
274 bool gainRGB =
true);
302bool RTABMAP_CORE_EXPORT multiBandTexturing(
303 const std::string & outputOBJPath,
304 const pcl::PCLPointCloud2 & cloud,
305 const std::vector<pcl::Vertices> & polygons,
306 const std::map<int, Transform> & cameraPoses,
307 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels,
308 const std::map<int, cv::Mat> & images,
309 const std::map<
int, std::vector<CameraModel> > & cameraModels,
310 const Memory * memory = 0,
311 const DBDriver * dbDriver = 0,
312 unsigned int textureSize = 8192,
313 unsigned int textureDownscale = 2,
314 const std::string & nbContrib =
"1 5 10 0",
315 const std::string & textureFormat =
"jpg",
316 const std::map<
int, std::map<int, cv::Vec4d> > & gains = std::map<
int, std::map<int, cv::Vec4d> >(),
317 const std::map<
int, std::map<int, cv::Mat> > & blendingGains = std::map<
int, std::map<int, cv::Mat> >(),
318 const std::pair<float, float> & contrastValues = std::pair<float, float>(0,0),
320 unsigned int unwrapMethod = 0,
321 bool fillHoles =
false,
322 unsigned int padding = 5,
323 double bestScoreThreshold = 0.1,
324 double angleHardThreshold = 90.0,
325 bool forceVisibleByAllVertices =
false);
327cv::Mat RTABMAP_CORE_EXPORT computeNormals(
328 const cv::Mat & laserScan,
331pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
332 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
334 float searchRadius = 0.0f,
335 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
336pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
337 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
339 float searchRadius = 0.0f,
340 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
341pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
342 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
344 float searchRadius = 0.0f,
345 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
346pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
347 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
348 const pcl::IndicesPtr & indices,
350 float searchRadius = 0.0f,
351 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
352pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
353 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
354 const pcl::IndicesPtr & indices,
356 float searchRadius = 0.0f,
357 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
358pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
359 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
360 const pcl::IndicesPtr & indices,
362 float searchRadius = 0.0f,
363 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
365pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals2D(
366 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
368 float searchRadius = 0.0f,
369 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
370pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals2D(
371 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
373 float searchRadius = 0.0f,
374 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
375pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals2D(
376 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
378 float searchRadius = 0.0f,
379 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
380pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals2D(
381 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
383 float searchRadius = 0.0f,
384 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
386pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals(
387 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
388 float maxDepthChangeFactor = 0.02f,
389 float normalSmoothingSize = 10.0f,
390 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
391pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals(
392 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
393 const pcl::IndicesPtr & indices,
394 float maxDepthChangeFactor = 0.02f,
395 float normalSmoothingSize = 10.0f,
396 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
438 cv::Mat * pcaEigenVectors = 0,
439 cv::Mat * pcaEigenValues = 0,
440 bool centered =
true);
446 const pcl::PointCloud<pcl::Normal> & normals,
449 cv::Mat * pcaEigenVectors = 0,
450 cv::Mat * pcaEigenValues = 0,
451 bool centered =
true);
457 const pcl::PointCloud<pcl::PointNormal> & cloud,
460 cv::Mat * pcaEigenVectors = 0,
461 cv::Mat * pcaEigenValues = 0,
462 bool centered =
true);
468 const pcl::PointCloud<pcl::PointXYZINormal> & cloud,
471 cv::Mat * pcaEigenVectors = 0,
472 cv::Mat * pcaEigenValues = 0,
473 bool centered =
true);
479 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
482 cv::Mat * pcaEigenVectors = 0,
483 cv::Mat * pcaEigenValues = 0,
484 bool centered =
true);
486pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
487 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
488 float searchRadius = 0.0f,
489 int polygonialOrder = 2,
490 int upsamplingMethod = 0,
491 float upsamplingRadius = 0.0f,
492 float upsamplingStep = 0.0f,
493 int pointDensity = 0,
494 float dilationVoxelSize = 1.0f,
495 int dilationIterations = 0);
496pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
497 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
498 const pcl::IndicesPtr & indices,
499 float searchRadius = 0.0f,
500 int polygonialOrder = 2,
501 int upsamplingMethod = 0,
502 float upsamplingRadius = 0.0f,
503 float upsamplingStep = 0.0f,
504 int pointDensity = 0,
505 float dilationVoxelSize = 1.0f,
506 int dilationIterations = 0);
509RTABMAP_DEPRECATED
LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
511 const Eigen::Vector3f & viewpoint,
512 bool forceGroundNormalsUp);
513LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
515 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
516 float groundNormalsUp = 0.0f);
518RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
519 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
520 const Eigen::Vector3f & viewpoint,
521 bool forceGroundNormalsUp);
522void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
523 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
524 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
525 float groundNormalsUp = 0.0f);
527RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
528 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
529 const Eigen::Vector3f & viewpoint,
530 bool forceGroundNormalsUp);
531void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
532 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
533 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
534 float groundNormalsUp = 0.0f);
536RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
537 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
538 const Eigen::Vector3f & viewpoint,
539 bool forceGroundNormalsUp);
540void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
541 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
542 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
543 float groundNormalsUp = 0.0f);
545void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
546 const std::map<int, Transform> & poses,
547 const std::vector<int> & cameraIndices,
548 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
549 float groundNormalsUp = 0.0f);
550void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
551 const std::map<int, Transform> & poses,
552 const std::vector<int> & cameraIndices,
553 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
554 float groundNormalsUp = 0.0f);
555void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
556 const std::map<int, Transform> & poses,
557 const std::vector<int> & cameraIndices,
558 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
559 float groundNormalsUp = 0.0f);
561void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
562 const std::map<int, Transform> & poses,
563 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
564 const std::vector<int> & rawCameraIndices,
565 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
566 float groundNormalsUp = 0.0f);
567void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
568 const std::map<int, Transform> & poses,
569 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
570 const std::vector<int> & rawCameraIndices,
571 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
572 float groundNormalsUp = 0.0f);
573void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
574 const std::map<int, Transform> & poses,
575 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
576 const std::vector<int> & rawCameraIndices,
577 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
578 float groundNormalsUp = 0.0f);
580void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
581 const std::map<int, Transform> & viewpoints,
583 const std::vector<int> & viewpointIds,
585 float groundNormalsUp = 0.0f);
587pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT meshDecimation(
const pcl::PolygonMesh::Ptr & mesh,
float factor);
589template<
typename po
intT>
590std::vector<pcl::Vertices> normalizePolygonsSide(
591 const pcl::PointCloud<pointT> & cloud,
592 const std::vector<pcl::Vertices> & polygons,
593 const pcl::PointXYZ & viewPoint = pcl::PointXYZ(0,0,0));
595template<
typename po
intRGBT>
596void denseMeshPostProcessing(
597 pcl::PolygonMeshPtr & mesh,
598 float meshDecimationFactor = 0.0f,
599 int maximumPolygons = 0,
600 const typename pcl::PointCloud<pointRGBT>::Ptr & cloud = pcl::PointCloud<pointRGBT>::Ptr(),
601 float transferColorRadius = 0.05f,
602 bool coloredOutput =
true,
603 bool cleanMesh =
true,
604 int minClusterSize = 50,
629bool RTABMAP_CORE_EXPORT intersectRayTriangle(
630 const Eigen::Vector3f & p,
631 const Eigen::Vector3f & dir,
632 const Eigen::Vector3f & v0,
633 const Eigen::Vector3f & v1,
634 const Eigen::Vector3f & v2,
636 Eigen::Vector3f & normal);
638template<
typename Po
intT>
639bool intersectRayMesh(
640 const Eigen::Vector3f & origin,
641 const Eigen::Vector3f & dir,
642 const typename pcl::PointCloud<PointT> & cloud,
643 const std::vector<pcl::Vertices> & polygons,
644 bool ignoreBackFaces,
646 Eigen::Vector3f & normal,
649int RTABMAP_CORE_EXPORT saveOBJFile(
650 const std::string &file_name,
651 const pcl::TextureMesh &tex_mesh,
652 unsigned precision = 5);
654int RTABMAP_CORE_EXPORT saveOBJFile(
655 const std::string &file_name,
656 const pcl::PolygonMesh &mesh,
657 unsigned precision = 5);
662#include "rtabmap/core/impl/util3d_surface.hpp"
Represents 2D or 3D laser scan data with support for multiple point data formats.
float RTABMAP_CORE_EXPORT computeNormalsComplexity(const LaserScan &scan, const Transform &t=Transform::getIdentity(), cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
Computes the complexity of surface normals in a point cloud of type LaserScan.