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,
155pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT createTextureMesh(
156 const pcl::PolygonMesh::Ptr & mesh,
157 const std::map<int, Transform> & poses,
158 const std::map<
int, std::vector<CameraModel> > & cameraModels,
159 const std::map<int, cv::Mat> & cameraDepths,
160 float maxDistance = 0.0f,
161 float maxDepthError = 0.0f,
162 float maxAngle = 0.0f,
163 int minClusterSize = 50,
164 const std::vector<float> & roiRatios = std::vector<float>(),
166 std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0,
167 bool distanceToCamPolicy =
false,
174 pcl::TextureMesh & textureMesh,
177pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT concatenateTextureMeshes(
178 const std::list<pcl::TextureMesh::Ptr> & meshes);
180void RTABMAP_CORE_EXPORT concatenateTextureMaterials(
181 pcl::TextureMesh & mesh,
const cv::Size & imageSize,
int textureSize,
int maxTextures,
float & scale, std::vector<bool> * materialsKept=0);
183std::vector<std::vector<RTABMAP_PCL_INDEX> > RTABMAP_CORE_EXPORT convertPolygonsFromPCL(
184 const std::vector<pcl::Vertices> & polygons);
185std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > RTABMAP_CORE_EXPORT convertPolygonsFromPCL(
186 const std::vector<std::vector<pcl::Vertices> > & polygons);
187std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT convertPolygonsToPCL(
188 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
189std::vector<std::vector<pcl::Vertices> > RTABMAP_CORE_EXPORT convertPolygonsToPCL(
190 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & tex_polygons);
192pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT assembleTextureMesh(
193 const cv::Mat & cloudMat,
194 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons,
195#
if PCL_VERSION_COMPARE(>=, 1, 8, 0)
196 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords,
198 const std::vector<std::vector<Eigen::Vector2f> > & texCoords,
203pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT assemblePolygonMesh(
204 const cv::Mat & cloudMat,
205 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
212 pcl::TextureMesh & mesh,
213 const std::map<int, cv::Mat> & images,
214 const std::map<int, CameraModel> & calibrations,
215 const Memory * memory = 0,
217 int textureSize = 4096,
218 int textureCount = 1,
219 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels = std::vector<std::map<int, pcl::PointXY> >(),
220 bool gainCompensation =
true,
221 float gainBeta = 10.0f,
223 bool blending =
true,
224 int blendingDecimation = 0,
225 int brightnessContrastRatioLow = 0,
226 int brightnessContrastRatioHigh = 0,
227 bool exposureFusion =
false,
229 unsigned char blankValue = 255,
230 bool clearVertexColorUnderTexture =
true,
231 std::map<
int, std::map<int, cv::Vec4d> > * gains = 0,
232 std::map<
int, std::map<int, cv::Mat> > * blendingGains = 0,
233 std::pair<float, float> * contrastValues = 0);
235 pcl::TextureMesh & mesh,
236 const std::map<int, cv::Mat> & images,
237 const std::map<
int, std::vector<CameraModel> > & calibrations,
238 const Memory * memory = 0,
240 int textureSize = 4096,
241 int textureCount = 1,
242 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels = std::vector<std::map<int, pcl::PointXY> >(),
243 bool gainCompensation =
true,
244 float gainBeta = 10.0f,
246 bool blending =
true,
247 int blendingDecimation = 0,
248 int brightnessContrastRatioLow = 0,
249 int brightnessContrastRatioHigh = 0,
250 bool exposureFusion =
false,
252 unsigned char blankValue = 255,
253 bool clearVertexColorUnderTexture =
true,
254 std::map<
int, std::map<int, cv::Vec4d> > * gains = 0,
255 std::map<
int, std::map<int, cv::Mat> > * blendingGains = 0,
256 std::pair<float, float> * contrastValues = 0);
258void RTABMAP_CORE_EXPORT fixTextureMeshForVisualization(pcl::TextureMesh & textureMesh);
261RTABMAP_DEPRECATED
bool RTABMAP_CORE_EXPORT multiBandTexturing(
262 const std::string & outputOBJPath,
263 const pcl::PCLPointCloud2 & cloud,
264 const std::vector<pcl::Vertices> & polygons,
265 const std::map<int, Transform> & cameraPoses,
266 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels,
267 const std::map<int, cv::Mat> & images,
268 const std::map<
int, std::vector<CameraModel> > & cameraModels,
269 const Memory * memory = 0,
271 int textureSize = 8192,
272 const std::string & textureFormat =
"jpg",
273 const std::map<
int, std::map<int, cv::Vec4d> > & gains = std::map<
int, std::map<int, cv::Vec4d> >(),
274 const std::map<
int, std::map<int, cv::Mat> > & blendingGains = std::map<
int, std::map<int, cv::Mat> >(),
275 const std::pair<float, float> & contrastValues = std::pair<float, float>(0,0),
276 bool gainRGB =
true);
304bool RTABMAP_CORE_EXPORT multiBandTexturing(
305 const std::string & outputOBJPath,
306 const pcl::PCLPointCloud2 & cloud,
307 const std::vector<pcl::Vertices> & polygons,
308 const std::map<int, Transform> & cameraPoses,
309 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels,
310 const std::map<int, cv::Mat> & images,
311 const std::map<
int, std::vector<CameraModel> > & cameraModels,
312 const Memory * memory = 0,
314 unsigned int textureSize = 8192,
315 unsigned int textureDownscale = 2,
316 const std::string & nbContrib =
"1 5 10 0",
317 const std::string & textureFormat =
"jpg",
318 const std::map<
int, std::map<int, cv::Vec4d> > & gains = std::map<
int, std::map<int, cv::Vec4d> >(),
319 const std::map<
int, std::map<int, cv::Mat> > & blendingGains = std::map<
int, std::map<int, cv::Mat> >(),
320 const std::pair<float, float> & contrastValues = std::pair<float, float>(0,0),
322 unsigned int unwrapMethod = 0,
323 bool fillHoles =
false,
324 unsigned int padding = 5,
325 double bestScoreThreshold = 0.1,
326 double angleHardThreshold = 90.0,
327 bool forceVisibleByAllVertices =
false);
329cv::Mat RTABMAP_CORE_EXPORT computeNormals(
330 const cv::Mat & laserScan,
333pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
334 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
336 float searchRadius = 0.0f,
337 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
338pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
339 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
341 float searchRadius = 0.0f,
342 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
343pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
344 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
346 float searchRadius = 0.0f,
347 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
348pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
349 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
350 const pcl::IndicesPtr & indices,
352 float searchRadius = 0.0f,
353 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
354pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
355 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
356 const pcl::IndicesPtr & indices,
358 float searchRadius = 0.0f,
359 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
360pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
361 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
362 const pcl::IndicesPtr & indices,
364 float searchRadius = 0.0f,
365 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
367pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals2D(
368 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
370 float searchRadius = 0.0f,
371 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
372pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals2D(
373 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
375 float searchRadius = 0.0f,
376 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
377pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals2D(
378 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
380 float searchRadius = 0.0f,
381 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
382pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals2D(
383 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
385 float searchRadius = 0.0f,
386 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
388pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals(
389 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
390 float maxDepthChangeFactor = 0.02f,
391 float normalSmoothingSize = 10.0f,
392 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
393pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals(
394 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
395 const pcl::IndicesPtr & indices,
396 float maxDepthChangeFactor = 0.02f,
397 float normalSmoothingSize = 10.0f,
398 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
438 cv::Mat * pcaEigenVectors = 0,
439 cv::Mat * pcaEigenValues = 0,
440 bool centered =
true);
443 const pcl::PointCloud<pcl::Normal> & normals,
446 cv::Mat * pcaEigenVectors = 0,
447 cv::Mat * pcaEigenValues = 0,
448 bool centered =
true);
451 const pcl::PointCloud<pcl::PointNormal> & cloud,
454 cv::Mat * pcaEigenVectors = 0,
455 cv::Mat * pcaEigenValues = 0,
456 bool centered =
true);
459 const pcl::PointCloud<pcl::PointXYZINormal> & cloud,
462 cv::Mat * pcaEigenVectors = 0,
463 cv::Mat * pcaEigenValues = 0,
464 bool centered =
true);
467 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
470 cv::Mat * pcaEigenVectors = 0,
471 cv::Mat * pcaEigenValues = 0,
472 bool centered =
true);
475pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
476 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
477 float searchRadius = 0.0f,
478 int polygonialOrder = 2,
479 int upsamplingMethod = 0,
480 float upsamplingRadius = 0.0f,
481 float upsamplingStep = 0.0f,
482 int pointDensity = 0,
483 float dilationVoxelSize = 1.0f,
484 int dilationIterations = 0);
485pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
486 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
487 const pcl::IndicesPtr & indices,
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);
498RTABMAP_DEPRECATED
LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
500 const Eigen::Vector3f & viewpoint,
501 bool forceGroundNormalsUp);
502LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
504 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
505 float groundNormalsUp = 0.0f);
507RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
508 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
509 const Eigen::Vector3f & viewpoint,
510 bool forceGroundNormalsUp);
511void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
512 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
513 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
514 float groundNormalsUp = 0.0f);
516RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
517 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
518 const Eigen::Vector3f & viewpoint,
519 bool forceGroundNormalsUp);
520void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
521 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
522 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
523 float groundNormalsUp = 0.0f);
525RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
526 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
527 const Eigen::Vector3f & viewpoint,
528 bool forceGroundNormalsUp);
529void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
530 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
531 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
532 float groundNormalsUp = 0.0f);
534void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
535 const std::map<int, Transform> & poses,
536 const std::vector<int> & cameraIndices,
537 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
538 float groundNormalsUp = 0.0f);
539void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
540 const std::map<int, Transform> & poses,
541 const std::vector<int> & cameraIndices,
542 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
543 float groundNormalsUp = 0.0f);
544void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
545 const std::map<int, Transform> & poses,
546 const std::vector<int> & cameraIndices,
547 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
548 float groundNormalsUp = 0.0f);
550void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
551 const std::map<int, Transform> & poses,
552 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
553 const std::vector<int> & rawCameraIndices,
554 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
555 float groundNormalsUp = 0.0f);
556void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
557 const std::map<int, Transform> & poses,
558 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
559 const std::vector<int> & rawCameraIndices,
560 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
561 float groundNormalsUp = 0.0f);
562void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
563 const std::map<int, Transform> & poses,
564 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
565 const std::vector<int> & rawCameraIndices,
566 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
567 float groundNormalsUp = 0.0f);
569void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
570 const std::map<int, Transform> & viewpoints,
572 const std::vector<int> & viewpointIds,
574 float groundNormalsUp = 0.0f);
576pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT meshDecimation(
const pcl::PolygonMesh::Ptr & mesh,
float factor);
578template<
typename po
intT>
579std::vector<pcl::Vertices> normalizePolygonsSide(
580 const pcl::PointCloud<pointT> & cloud,
581 const std::vector<pcl::Vertices> & polygons,
582 const pcl::PointXYZ & viewPoint = pcl::PointXYZ(0,0,0));
584template<
typename po
intRGBT>
585void denseMeshPostProcessing(
586 pcl::PolygonMeshPtr & mesh,
587 float meshDecimationFactor = 0.0f,
588 int maximumPolygons = 0,
589 const typename pcl::PointCloud<pointRGBT>::Ptr & cloud = pcl::PointCloud<pointRGBT>::Ptr(),
590 float transferColorRadius = 0.05f,
591 bool coloredOutput =
true,
592 bool cleanMesh =
true,
593 int minClusterSize = 50,
619 const Eigen::Vector3f & p,
620 const Eigen::Vector3f & dir,
621 const Eigen::Vector3f & v0,
622 const Eigen::Vector3f & v1,
623 const Eigen::Vector3f & v2,
625 Eigen::Vector3f & normal);
627template<
typename Po
intT>
628bool intersectRayMesh(
629 const Eigen::Vector3f & origin,
630 const Eigen::Vector3f & dir,
631 const typename pcl::PointCloud<PointT> & cloud,
632 const std::vector<pcl::Vertices> & polygons,
633 bool ignoreBackFaces,
635 Eigen::Vector3f & normal,
638int RTABMAP_CORE_EXPORT saveOBJFile(
639 const std::string &file_name,
640 const pcl::TextureMesh &tex_mesh,
641 unsigned precision = 5);
643int RTABMAP_CORE_EXPORT saveOBJFile(
644 const std::string &file_name,
645 const pcl::PolygonMesh &mesh,
646 unsigned precision = 5);
651#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)