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>
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>(),
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>(),
165 std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0,
166 bool distanceToCamPolicy =
false);
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,
201pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT assemblePolygonMesh(
202 const cv::Mat & cloudMat,
203 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
210 pcl::TextureMesh & mesh,
211 const std::map<int, cv::Mat> & images,
212 const std::map<int, CameraModel> & calibrations,
213 const Memory * memory = 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,
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);
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,
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,
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,
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,
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));
436 cv::Mat * pcaEigenVectors = 0,
437 cv::Mat * pcaEigenValues = 0,
438 bool centered =
true);
441 const pcl::PointCloud<pcl::Normal> & normals,
444 cv::Mat * pcaEigenVectors = 0,
445 cv::Mat * pcaEigenValues = 0,
446 bool centered =
true);
449 const pcl::PointCloud<pcl::PointNormal> & cloud,
452 cv::Mat * pcaEigenVectors = 0,
453 cv::Mat * pcaEigenValues = 0,
454 bool centered =
true);
457 const pcl::PointCloud<pcl::PointXYZINormal> & cloud,
460 cv::Mat * pcaEigenVectors = 0,
461 cv::Mat * pcaEigenValues = 0,
462 bool centered =
true);
465 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
468 cv::Mat * pcaEigenVectors = 0,
469 cv::Mat * pcaEigenValues = 0,
470 bool centered =
true);
473pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
474 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
475 float searchRadius = 0.0f,
476 int polygonialOrder = 2,
477 int upsamplingMethod = 0,
478 float upsamplingRadius = 0.0f,
479 float upsamplingStep = 0.0f,
480 int pointDensity = 0,
481 float dilationVoxelSize = 1.0f,
482 int dilationIterations = 0);
483pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
484 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
485 const pcl::IndicesPtr & indices,
486 float searchRadius = 0.0f,
487 int polygonialOrder = 2,
488 int upsamplingMethod = 0,
489 float upsamplingRadius = 0.0f,
490 float upsamplingStep = 0.0f,
491 int pointDensity = 0,
492 float dilationVoxelSize = 1.0f,
493 int dilationIterations = 0);
496RTABMAP_DEPRECATED
LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
498 const Eigen::Vector3f & viewpoint,
499 bool forceGroundNormalsUp);
500LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
502 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
503 float groundNormalsUp = 0.0f);
505RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
506 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
507 const Eigen::Vector3f & viewpoint,
508 bool forceGroundNormalsUp);
509void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
510 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
511 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
512 float groundNormalsUp = 0.0f);
514RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
515 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
516 const Eigen::Vector3f & viewpoint,
517 bool forceGroundNormalsUp);
518void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
519 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
520 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
521 float groundNormalsUp = 0.0f);
523RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
524 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
525 const Eigen::Vector3f & viewpoint,
526 bool forceGroundNormalsUp);
527void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
528 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
529 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
530 float groundNormalsUp = 0.0f);
532void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
533 const std::map<int, Transform> & poses,
534 const std::vector<int> & cameraIndices,
535 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
536 float groundNormalsUp = 0.0f);
537void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
538 const std::map<int, Transform> & poses,
539 const std::vector<int> & cameraIndices,
540 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
541 float groundNormalsUp = 0.0f);
542void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
543 const std::map<int, Transform> & poses,
544 const std::vector<int> & cameraIndices,
545 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
546 float groundNormalsUp = 0.0f);
548void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
549 const std::map<int, Transform> & poses,
550 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
551 const std::vector<int> & rawCameraIndices,
552 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
553 float groundNormalsUp = 0.0f);
554void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
555 const std::map<int, Transform> & poses,
556 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
557 const std::vector<int> & rawCameraIndices,
558 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
559 float groundNormalsUp = 0.0f);
560void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
561 const std::map<int, Transform> & poses,
562 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
563 const std::vector<int> & rawCameraIndices,
564 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
565 float groundNormalsUp = 0.0f);
567void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
568 const std::map<int, Transform> & viewpoints,
570 const std::vector<int> & viewpointIds,
572 float groundNormalsUp = 0.0f);
574pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT meshDecimation(
const pcl::PolygonMesh::Ptr & mesh,
float factor);
576template<
typename po
intT>
577std::vector<pcl::Vertices> normalizePolygonsSide(
578 const pcl::PointCloud<pointT> & cloud,
579 const std::vector<pcl::Vertices> & polygons,
580 const pcl::PointXYZ & viewPoint = pcl::PointXYZ(0,0,0));
582template<
typename po
intRGBT>
583void denseMeshPostProcessing(
584 pcl::PolygonMeshPtr & mesh,
585 float meshDecimationFactor = 0.0f,
586 int maximumPolygons = 0,
587 const typename pcl::PointCloud<pointRGBT>::Ptr & cloud = pcl::PointCloud<pointRGBT>::Ptr(),
588 float transferColorRadius = 0.05f,
589 bool coloredOutput =
true,
590 bool cleanMesh =
true,
591 int minClusterSize = 50,
617 const Eigen::Vector3f & p,
618 const Eigen::Vector3f & dir,
619 const Eigen::Vector3f & v0,
620 const Eigen::Vector3f & v1,
621 const Eigen::Vector3f & v2,
623 Eigen::Vector3f & normal);
625template<
typename Po
intT>
626bool intersectRayMesh(
627 const Eigen::Vector3f & origin,
628 const Eigen::Vector3f & dir,
629 const typename pcl::PointCloud<PointT> & cloud,
630 const std::vector<pcl::Vertices> & polygons,
631 bool ignoreBackFaces,
633 Eigen::Vector3f & normal,
636int RTABMAP_CORE_EXPORT saveOBJFile(
637 const std::string &file_name,
638 const pcl::TextureMesh &tex_mesh,
639 unsigned precision = 5);
641int RTABMAP_CORE_EXPORT saveOBJFile(
642 const std::string &file_name,
643 const pcl::PolygonMesh &mesh,
644 unsigned precision = 5);
649#include "rtabmap/core/impl/util3d_surface.hpp"
Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).
Represents 2D or 3D laser scan data with support for multiple point data formats.
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
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.
void RTABMAP_CORE_EXPORT cleanTextureMesh(pcl::TextureMesh &textureMesh, int minClusterSize)
void RTABMAP_CORE_EXPORT createPolygonIndexes(const std::vector< pcl::Vertices > &polygons, int cloudSize, std::vector< std::set< int > > &neighborPolygons, std::vector< std::set< int > > &vertexPolygons)
Given a set of polygons, create two indexes: polygons to neighbor polygons and vertices to polygons.
bool RTABMAP_CORE_EXPORT intersectRayTriangle(const Eigen::Vector3f &p, const Eigen::Vector3f &dir, const Eigen::Vector3f &v0, const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, float &distance, Eigen::Vector3f &normal)
cv::Mat RTABMAP_CORE_EXPORT mergeTextures(pcl::TextureMesh &mesh, const std::map< int, cv::Mat > &images, const std::map< int, CameraModel > &calibrations, const Memory *memory=0, const DBDriver *dbDriver=0, int textureSize=4096, int textureCount=1, const std::vector< std::map< int, pcl::PointXY > > &vertexToPixels=std::vector< std::map< int, pcl::PointXY > >(), bool gainCompensation=true, float gainBeta=10.0f, bool gainRGB=true, bool blending=true, int blendingDecimation=0, int brightnessContrastRatioLow=0, int brightnessContrastRatioHigh=0, bool exposureFusion=false, const ProgressState *state=0, unsigned char blankValue=255, bool clearVertexColorUnderTexture=true, std::map< int, std::map< int, cv::Vec4d > > *gains=0, std::map< int, std::map< int, cv::Mat > > *blendingGains=0, std::pair< float, float > *contrastValues=0)