ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
PCLModules.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "PclUtils/PCLModules.h"
9 
10 // CV_CORE_LIB
11 #include <CVConst.h>
12 #include <CVTools.h>
13 
14 // PCL COMMON
15 #include <pcl/io/pcd_io.h>
16 
17 // PCL FEATURES
18 #include <pcl/features/fpfh.h>
19 #include <pcl/features/fpfh_omp.h>
20 
21 #include <pcl/features/impl/normal_3d_omp.hpp>
22 
23 // PCL SEARCH
24 #include <pcl/impl/instantiate.hpp>
25 #include <pcl/kdtree/impl/kdtree_flann.hpp>
26 #include <pcl/search/impl/search.hpp>
27 
28 // PCL SEGMENTATION
29 #include <pcl/segmentation/region_growing.h>
30 #include <pcl/segmentation/region_growing_rgb.h>
31 #include <pcl/segmentation/sac_segmentation.h>
32 
33 // PCL RECOGNITION
34 #include <pcl/recognition/impl/cg/geometric_consistency.hpp>
35 
36 // PCL SURFACE
37 #include <pcl/surface/gp3.h>
38 #include <pcl/surface/grid_projection.h>
39 #include <pcl/surface/poisson.h>
40 
41 // normal function
42 namespace PCLModules {
46 int GetRegionGrowing(const PointCloudT::ConstPtr cloud,
47  std::vector<pcl::PointIndices> &clusters,
48  PointCloudRGB::Ptr cloud_segmented,
49  int k,
50  int min_cluster_size,
51  int max_cluster_size,
52  unsigned int neighbour_number,
53  float smoothness_theta,
54  float curvature) {
55  CloudNormal::Ptr normals(new CloudNormal);
57 
58  pcl::search::KdTree<PointT>::Ptr kdtree(new pcl::search::KdTree<PointT>);
59  kdtree->setInputCloud(cloud);
60 
61  //
62  pcl::RegionGrowing<PointT, NormalT> regionGrowing;
63  //
64  regionGrowing.setMinClusterSize(min_cluster_size); // example default: 50
65  //
66  regionGrowing.setMaxClusterSize(max_cluster_size);
67  //
68  regionGrowing.setSearchMethod(kdtree);
69  //
70  //
71  regionGrowing.setNumberOfNeighbours(
72  neighbour_number); // example default: 30
73  //
74  regionGrowing.setInputCloud(cloud);
75  // regionGrowing.setIndices(indicesPtr);
76  //
77  regionGrowing.setInputNormals(normals);
78  //
79  //
80  regionGrowing.setSmoothnessThreshold(smoothness_theta);
81  regionGrowing.setCurvatureThreshold(curvature);
82 
83  regionGrowing.extract(clusters);
85  QString("[Basic Region Growing] Number of clusters is equal to %1")
86  .arg(clusters.size()));
87  if (clusters.size() != 0) {
89  QString("[Basic Region Growing] First cluster has %1 points.")
90  .arg(clusters[0].indices.size()));
91  }
92 
93  pcl::copyPointCloud(*regionGrowing.getColoredCloud(), *cloud_segmented);
94 
95  return 1;
96 }
97 
98 int GetRegionGrowingRGB(const PointCloudRGB::ConstPtr cloud,
99  std::vector<pcl::PointIndices> &clusters,
100  PointCloudRGB::Ptr cloud_segmented,
101  int min_cluster_size,
102  float neighbors_distance,
103  float point_color_diff,
104  float region_color_diff) {
105  // color-based region growing segmentation
106  // kd-tree object for searches.
107  pcl::search::KdTree<PointRGB>::Ptr kdtree(
108  new pcl::search::KdTree<PointRGB>);
109  kdtree->setInputCloud(cloud);
110 
111  // Color-based region growing clustering object.
112  pcl::RegionGrowingRGB<PointRGB> regionGrowing;
113  regionGrowing.setInputCloud(cloud);
114  regionGrowing.setSearchMethod(kdtree);
115  // Here, the minimum cluster size affects also the postprocessing step:
116  // clusters smaller than this will be merged with their neighbors.
117  regionGrowing.setMinClusterSize(min_cluster_size);
118  // Set the distance threshold, to know which points will be considered
119  // neighbors.
120  regionGrowing.setDistanceThreshold(neighbors_distance);
121  // Color threshold for comparing the RGB color of two points.
122  regionGrowing.setPointColorThreshold(point_color_diff);
123  // Region color threshold for the postprocessing step: clusters with colors
124  // within the threshold will be merged in one.
125  regionGrowing.setRegionColorThreshold(region_color_diff);
126 
127  regionGrowing.extract(clusters);
128  CVLog::Print(
129  QString("[RGB Region Growing] Number of clusters is equal to %1")
130  .arg(clusters.size()));
131  if (clusters.size() != 0) {
132  CVLog::Print(
133  QString("[RGB Region Growing] First cluster has %1 points.")
134  .arg(clusters[0].indices.size()));
135  }
136 
137  pcl::copyPointCloud(*regionGrowing.getColoredCloud(), *cloud_segmented);
138 
139  return 1;
140 }
141 
142 int GetSACSegmentation(const PointCloudT::ConstPtr cloud,
143  pcl::PointIndices::Ptr inliers,
144  pcl::ModelCoefficients::Ptr coefficients /* = nullptr*/,
145  const int &methodType /* = pcl::SAC_RANSAC*/,
146  const int &modelType /* = pcl::SACMODEL_PLANE*/,
147  float distanceThreshold /* = 0.02*/,
148  float probability /* = 0.95*/,
149  int maxIterations /* = 100*/,
150  float minRadiusLimits /* = -10000.0f*/,
151  float maxRadiusLimits /* = 10000.0f*/,
152  float normalDisWeight /* = 0.1f*/) {
153  // Build the model
154  switch (modelType) {
155  case pcl::SACMODEL_CYLINDER:
156  case pcl::SACMODEL_NORMAL_PLANE:
157  case pcl::SACMODEL_NORMAL_PARALLEL_PLANE:
158  case pcl::SACMODEL_CONE:
159  case pcl::SACMODEL_NORMAL_SPHERE: {
160  pcl::SACSegmentationFromNormals<PointT, NormalT> seg;
161  seg.setOptimizeCoefficients(coefficients ? true : false);
162 
163  CloudNormal::Ptr cloudNormas(new CloudNormal);
164  if (!ComputeNormals<PointT, NormalT>(cloud, cloudNormas, -1,
165  false) ||
166  cloudNormas->width * cloudNormas->height == 0) {
167  return -1;
168  }
169 
170  float normalWeight =
171  normalDisWeight > 0 ? normalDisWeight : 0.1 /*default*/;
172  seg.setModelType(modelType);
173  seg.setMethodType(methodType);
174  seg.setNormalDistanceWeight(normalWeight);
175  seg.setDistanceThreshold(distanceThreshold);
176  seg.setRadiusLimits(minRadiusLimits, maxRadiusLimits);
177  seg.setMaxIterations(maxIterations);
178  seg.setProbability(probability);
179  seg.setInputCloud(cloud);
180  seg.setInputNormals(cloudNormas);
181 
182  if (coefficients)
183  seg.segment(*inliers, *coefficients);
184  else {
185  pcl::ModelCoefficients coeff;
186  seg.segment(*inliers, coeff);
187  }
188  } break;
189  // If nothing else, try SACSegmentation
190  default: {
191  pcl::SACSegmentation<PointT> seg;
192  seg.setOptimizeCoefficients(coefficients ? true : false);
193 
194  seg.setInputCloud(cloud);
195  seg.setModelType(modelType);
196  seg.setMethodType(methodType);
197  seg.setDistanceThreshold(distanceThreshold);
198  seg.setRadiusLimits(minRadiusLimits, maxRadiusLimits);
199  seg.setMaxIterations(maxIterations);
200  seg.setProbability(probability);
201 
202  if (coefficients)
203  seg.segment(*inliers, *coefficients);
204  else {
205  pcl::ModelCoefficients coeff;
206  seg.segment(*inliers, coeff);
207  }
208  } break;
209  }
210 
211  return 1;
212 }
213 
217 int GridProjection(const PointCloudNormal::ConstPtr &cloudWithNormals,
218  PCLMesh &outMesh,
219  float resolution,
220  int paddingSize,
221  int maxSearchLevel) {
222  // another kd-tree for reconstruction
223  pcl::search::KdTree<PointNT>::Ptr kdtree(new pcl::search::KdTree<PointNT>);
224  kdtree->setInputCloud(cloudWithNormals);
225 
226  // reconstruction
227  pcl::GridProjection<PointNT> gp;
228  gp.setInputCloud(cloudWithNormals);
229  gp.setSearchMethod(kdtree);
230  gp.setResolution(static_cast<double>(resolution));
231  gp.setPaddingSize(paddingSize);
232  gp.setMaxBinarySearchLevel(maxSearchLevel);
233  gp.reconstruct(outMesh);
234  return 1;
235 }
236 
237 int GetPoissonReconstruction(const PointCloudNormal::ConstPtr &cloudWithNormals,
238  PCLMesh &outMesh,
239  int degree,
240  int treeDepth,
241  int isoDivideDepth,
242  int solverDivideDepth,
243  float scale,
244  float samplesPerNode,
245  bool useConfidence,
246  bool useManifold,
247  bool outputPolygons) {
248  // another kd-tree for reconstruction
249  pcl::search::KdTree<PointNT>::Ptr kdtree(new pcl::search::KdTree<PointNT>);
250  kdtree->setInputCloud(cloudWithNormals);
251  pcl::Poisson<PointNT> pn;
252  pn.setConfidence(useConfidence); // normalize normals[false]
253  pn.setDegree(degree); // degree[1,5], the bigger the more time needed
254  pn.setDepth(treeDepth); // tree maximum depth, calculate 2^d x 2 ^d x 2^d
255  pn.setIsoDivide(isoDivideDepth); // extract ISO depth
256  pn.setManifold(useManifold); // add triangle gravity
257  pn.setOutputPolygons(outputPolygons); // output polygon mesh
258  pn.setSamplesPerNode(samplesPerNode); // minimum sample points number no
259  // noise[1.0-5.0], noise[15.-20.]
260  pn.setScale(scale); // rate
261  pn.setSolverDivide(solverDivideDepth); // Gauss-Seidel depth
262  // pn.setIndices();
263  pn.setSearchMethod(kdtree);
264  pn.setInputCloud(cloudWithNormals);
265  pn.performReconstruction(outMesh);
266 
267  return 1;
268 }
269 
270 int GetGreedyTriangulation(const PointCloudNormal::ConstPtr &cloudWithNormals,
271  PCLMesh &outMesh,
272  int trigulationSearchRadius,
273  float weightingFactor,
274  int maxNearestNeighbors,
275  int maxSurfaceAngle,
276  int minAngle,
277  int maxAngle,
278  bool normalConsistency) {
279  // another kd-tree for reconstruction
280  pcl::search::KdTree<PointNT>::Ptr kdtree(new pcl::search::KdTree<PointNT>);
281  kdtree->setInputCloud(cloudWithNormals);
282  pcl::GreedyProjectionTriangulation<PointNT> gp3;
283  // options
284  gp3.setSearchRadius(trigulationSearchRadius);
285  gp3.setMu(static_cast<double>(weightingFactor));
286  gp3.setMaximumNearestNeighbors(maxNearestNeighbors);
287  gp3.setMaximumSurfaceAngle(cloudViewer::DegreesToRadians(maxSurfaceAngle));
288  gp3.setMinimumAngle(cloudViewer::DegreesToRadians(minAngle));
289  gp3.setMaximumAngle(cloudViewer::DegreesToRadians(maxAngle));
290  gp3.setNormalConsistency(normalConsistency);
291  gp3.setInputCloud(cloudWithNormals);
292  gp3.setSearchMethod(kdtree);
293  gp3.reconstruct(outMesh);
294 
295  return 1;
296 }
297 
298 int GetProjection(const PointCloudT::ConstPtr &originCloud,
299  PointCloudT::Ptr &projectedCloud,
300  const pcl::ModelCoefficients::ConstPtr coefficients,
301  const int &modelType /* = pcl::SACMODEL_PLANE*/) {
302  // Create the filtering object
303  pcl::ProjectInliers<PointT> projectInliers;
304  // set object projection model
305  projectInliers.setModelType(static_cast<pcl::SacModel>(modelType));
306  // input point cloud
307  projectInliers.setInputCloud(originCloud);
308  // set mode coefficients
309  projectInliers.setModelCoefficients(coefficients);
310  // execute projection filter result
311  projectInliers.filter(*projectedCloud);
312 
313  return 1;
314 }
315 
316 int GetProjection(const PointCloudT::ConstPtr &originCloud,
317  PointCloudT::Ptr &projectedCloud,
318  float coefficientA /* = 0.0f*/,
319  float coefficientB /* = 0.0f*/,
320  float coefficientC /* = 1.0f*/,
321  float coefficientD /* = 0.0f*/,
322  const int &modelType /* = pcl::SACMODEL_PLANE*/) {
323  // define model object -> With X = Y= 0, Z=1
324  // we use a plane model, with ax + by + cz + d = 0,
325  // where default : a= b = d =0, and c=1, or said differently, the X-Y plane.
326  pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
327  coefficients->values.resize(4);
328  coefficients->values[0] = coefficientA;
329  coefficients->values[1] = coefficientB;
330  coefficients->values[2] = coefficientC;
331  coefficients->values[3] = coefficientD;
332 
333  return GetProjection(originCloud, projectedCloud, coefficients, modelType);
334 }
335 
336 template int GetMarchingCubes<PointNT>(const PointCloudNormal::ConstPtr inCloud,
337  const MarchingMethod &marchingMethod,
338  PCLMesh &outMesh,
339  float epsilon,
340  float isoLevel,
341  float gridResolution,
342  float percentageExtendGrid);
343 
344 } // namespace PCLModules
345 
346 // class
347 namespace PCLModules {
348 /* ############################## FeatureCloud Class
349  * ################################# */
350 FeatureCloud::FeatureCloud()
351  : m_searchMethod(new SearchMethod),
352  m_normalRadius(0.02f),
353  m_featureRadius(0.02f),
354  m_maxThreadCount(QThread::idealThreadCount()) {}
355 
356 // Load and process the cloud in the given PCD file
357 void FeatureCloud::loadInputCloud(const std::string &pcd_file) {
358  m_xyz = PointCloudT::Ptr(new PointCloudT);
359  pcl::io::loadPCDFile(pcd_file, *m_xyz);
360  processInput();
361 }
362 
363 // Compute the surface normals
365  m_normals = SurfaceNormals::Ptr(new SurfaceNormals);
366  ComputeNormals<PointT, NormalT>(m_xyz, m_normals, m_normalRadius, false);
367 }
368 
369 // Compute the local feature descriptors
371  m_features = LocalFeatures::Ptr(new LocalFeatures);
372  pcl::FPFHEstimationOMP<PointT, NormalT, pcl::FPFHSignature33> fpfh_est;
373  fpfh_est.setNumberOfThreads(m_maxThreadCount);
374  fpfh_est.setInputCloud(m_xyz);
375  fpfh_est.setInputNormals(m_normals);
376  fpfh_est.setSearchMethod(m_searchMethod);
377  fpfh_est.setRadiusSearch(m_featureRadius);
378  fpfh_est.compute(*m_features);
379 }
380 
381 /* ############################## FeatureCloud Class
382  * ################################# */
383 
384 /* ############################## TemplateMatching Class
385  * ################################# */
386 
388  : m_minSampleDistance(0.05f),
389  m_maxCorrespondenceDistance(0.01f * 0.01f),
390  m_nr_iterations(500) {
391  // Initialize the parameters in the Sample Consensus Initial Alignment
392  // (SAC-IA) algorithm
393  m_sac_ia.setMinSampleDistance(m_minSampleDistance);
394  m_sac_ia.setMaxCorrespondenceDistance(m_maxCorrespondenceDistance);
395  m_sac_ia.setMaximumIterations(m_nr_iterations);
396 }
397 
398 // Set the given cloud as the target to which the templates will be aligned
400  m_target = target_cloud;
401  m_sac_ia.setInputTarget(target_cloud.getPointCloud());
402  m_sac_ia.setTargetFeatures(target_cloud.getLocalFeatures());
403 }
404 
405 // Align the given template cloud to the target specified by setTargetCloud ()
408  m_sac_ia.setInputSource(template_cloud.getPointCloud());
409  m_sac_ia.setSourceFeatures(template_cloud.getLocalFeatures());
410 
411  pcl::PointCloud<PointT> registration_output;
412 
413  m_sac_ia.align(registration_output);
414  result.fitness_score =
415  (float)m_sac_ia.getFitnessScore(m_maxCorrespondenceDistance);
416  result.final_transformation = m_sac_ia.getFinalTransformation();
417 }
418 
419 // Align all of template clouds set by addTemplateCloud to the target specified
420 // by setTargetCloud ()
422  std::vector<TemplateMatching::Result, Eigen::aligned_allocator<Result>>
423  &results) {
424  results.resize(m_templates.size());
425  for (std::size_t i = 0; i < m_templates.size(); ++i) {
426  align(m_templates[i], results[i]);
427  }
428 }
429 
430 // Align all of template clouds to the target cloud to find the one with best
431 // alignment score
433  // Align all of the templates to the target cloud
434  std::vector<Result, Eigen::aligned_allocator<Result>> results;
435  alignAll(results);
436 
437  // Find the template with the best (lowest) fitness score
438  float lowest_score = std::numeric_limits<float>::infinity();
439  int best_template = 0;
440  for (std::size_t i = 0; i < results.size(); ++i) {
441  const Result &r = results[i];
442  if (r.fitness_score < lowest_score) {
443  lowest_score = r.fitness_score;
444  best_template = (int)i;
445  }
446  }
447 
448  // Output the best alignment
449  result = results[best_template];
450  return (best_template);
451 }
452 /* ############################## TemplateMatching Class
453  * ################################# */
454 
455 } // namespace PCLModules
456 
457 // Template function instance
458 namespace PCLModules {
459 // INSTANTIATING TEMPLATED FUNCTIONS
461  const PointCloudT::ConstPtr inCloud,
462  CloudNormal::Ptr outcloud,
463  const float radius,
464  const bool useKnn, // true if use knn, false if radius search
465  bool normalConsistency,
466  int maxThreadCount);
468  const PointCloudRGB::ConstPtr inCloud,
469  CloudNormal::Ptr outcloud,
470  const float radius,
471  const bool useKnn, // true if use knn, false if radius search
472  bool normalConsistency,
473  int maxThreadCount);
475  const PointCloudRGBA::ConstPtr inCloud,
476  CloudNormal::Ptr outcloud,
477  const float radius,
478  const bool useKnn, // true if use knn, false if radius search
479  bool normalConsistency,
480  int maxThreadCount);
482  const PointCloudT::ConstPtr inCloud,
483  PointCloudNormal::Ptr outcloud,
484  const float radius,
485  const bool useKnn, // true if use knn, false if radius search
486  bool normalConsistency,
487  int maxThreadCount);
489  const PointCloudRGB::ConstPtr inCloud,
490  PointCloudNormal::Ptr outcloud,
491  const float radius,
492  const bool useKnn, // true if use knn, false if radius search
493  bool normalConsistency,
494  int maxThreadCount);
496  const PointCloudRGBA::ConstPtr inCloud,
497  PointCloudNormal::Ptr outcloud,
498  const float radius,
499  const bool useKnn, // true if use knn, false if radius search
500  bool normalConsistency,
501  int maxThreadCount);
502 
504  const PCLCloud::ConstPtr inCloud,
505  PCLCloud::Ptr outCloud,
506  int knn,
507  double nSigma);
508 
510  const PointCloudT::ConstPtr inCloud, PCLMesh &outMesh, int dimension);
512  const PointCloudRGB::ConstPtr inCloud, PCLMesh &outMesh, int dimension);
514  const PointCloudT::ConstPtr inCloud,
515  PCLMesh &outMesh,
516  int dimension /* = 3*/,
517  float alpha /* = 0.05*/);
519  const PointCloudRGB::ConstPtr inCloud,
520  PCLMesh &outMesh,
521  int dimension /* = 3*/,
522  float alpha /* = 0.05*/);
523 
524 template int CropHullFilter<PointT>(const PointCloudT::ConstPtr inCloud,
525  const PointCloudT::ConstPtr boundingBox,
526  PointCloudT::Ptr outCloud,
527  int dimensions);
528 template int CropHullFilter<PointRGB>(const PointCloudRGB::ConstPtr inCloud,
529  const PointCloudT::ConstPtr boundingBox,
530  PointCloudRGB::Ptr outCloud,
531  int dimensions);
532 
533 #if defined(WITH_PCL_NURBS)
534 template int NurbsSurfaceFitting<PointT>(const PointCloudT::ConstPtr inCloud,
535  const NurbsParameters &nurbsParams,
536  PCLMesh &outMesh,
537  PointCloudRGB::Ptr outCurve);
538 template int NurbsSurfaceFitting<PointRGB>(
539  const PointCloudRGB::ConstPtr inCloud,
540  const NurbsParameters &nurbsParams,
541  PCLMesh &outMesh,
542  PointCloudRGB::Ptr outCurve);
543 
544 template int BSplineCurveFitting3D<PointT>(const PointCloudT::ConstPtr inCloud,
545  PointCloudRGB::Ptr outCurve,
546  int order,
547  int controlPointsNum,
548  unsigned curveResolution,
549  double smoothness,
550  double rScale,
551  bool closed);
552 template int BSplineCurveFitting3D<PointRGB>(
553  const PointCloudRGB::ConstPtr inCloud,
554  PointCloudRGB::Ptr outCurve,
555  int order,
556  int controlPointsNum,
557  unsigned curveResolution,
558  double smoothness,
559  double rScale,
560  bool closed);
561 template int BSplineCurveFitting2D<PointT>(
562  const PointCloudT::ConstPtr inCloud,
563  const CurveFittingMethod &fittingMethod,
564  PointCloudRGB::Ptr outCurve,
565  int order,
566  int controlPointsNum,
567  unsigned curveResolution,
568  double smoothness,
569  double rScale,
570  bool closed);
571 template int BSplineCurveFitting2D<PointRGB>(
572  const PointCloudRGB::ConstPtr inCloud,
573  const CurveFittingMethod &fittingMethod,
574  PointCloudRGB::Ptr outCurve,
575  int order,
576  int controlPointsNum,
577  unsigned curveResolution,
578  double smoothness,
579  double rScale,
580  bool closed);
581 #endif
582 
584  const PointCloudT::ConstPtr inCloud,
585  std::vector<pcl::PointIndices> &cluster_indices,
586  float clusterTolerance /* = 0.02*/,
587  int minClusterSize /* = 100*/,
588  int maxClusterSize /* = 250000*/);
590  const PointCloudNormal::ConstPtr inCloud,
591  std::vector<pcl::PointIndices> &cluster_indices,
592  float clusterTolerance /* = 0.02*/,
593  int minClusterSize /* = 100*/,
594  int maxClusterSize /* = 250000*/);
595 
596 template int ProgressiveMpFilter<PointT>(const PointCloudT::ConstPtr inCloud,
597  pcl::PointIndicesPtr groundIndices,
598  int maxWindowSize,
599  float slope,
600  float initialDistance,
601  float maxDistance);
603  const PointCloudRGB::ConstPtr inCloud,
604  pcl::PointIndicesPtr groundIndices,
605  int maxWindowSize,
606  float slope,
607  float initialDistance,
608  float maxDistance);
609 
611  const PointCloudNormal::ConstPtr inCloud,
612  const ConditionParameters &params,
613  PointCloudNormal::Ptr outCloud,
614  bool keepOrganized);
615 
616 template int SmoothMls<PointT, PointNT>(const PointCloudT::ConstPtr &inCloud,
617  const MLSParameters &params,
618  PointCloudNormal::Ptr &outcloud
619 #ifdef LP_PCL_PATCH_ENABLED
620  ,
621  pcl::PointIndicesPtr &used_ids
622 #endif
623 );
624 
625 template int EstimateSIFT<pcl::PointXYZI, PointT>(
626  const pcl::PointCloud<pcl::PointXYZI>::ConstPtr inCloud,
627  PointCloudT::Ptr outcloud,
628  int nr_octaves,
629  float min_scale,
630  int nr_scales_per_octave,
631  float min_contrast);
633  const PointCloudRGB::ConstPtr inCloud,
634  PointCloudT::Ptr outcloud,
635  int nr_octaves,
636  float min_scale,
637  int nr_scales_per_octave,
638  float min_contrast);
640  const PointCloudRGBA::ConstPtr inCloud,
641  PointCloudT::Ptr outcloud,
642  int nr_octaves,
643  float min_scale,
644  int nr_scales_per_octave,
645  float min_contrast);
646 
647 template int EstimateShot<PointT, NormalT, pcl::SHOT352>(
648  const PointCloudT::ConstPtr inCloud,
649  const PointCloudT::ConstPtr keyPoints,
650  const CloudNormal::ConstPtr normals,
651  pcl::PointCloud<pcl::SHOT352>::Ptr outDescriptors,
652  float searchRadius,
653  int maxThreadCount);
654 template int EstimateShot<PointRGB, NormalT, pcl::SHOT352>(
655  const PointCloudRGB::ConstPtr inCloud,
656  const PointCloudRGB::ConstPtr keyPoints,
657  const CloudNormal::ConstPtr normals,
658  pcl::PointCloud<pcl::SHOT352>::Ptr outDescriptors,
659  float searchRadius,
660  int maxThreadCount);
661 template int EstimateShot<PointRGBA, NormalT, pcl::SHOT352>(
662  const PointCloudRGBA::ConstPtr inCloud,
663  const PointCloudRGBA::ConstPtr keyPoints,
664  const CloudNormal::ConstPtr normals,
665  pcl::PointCloud<pcl::SHOT352>::Ptr outDescriptors,
666  float searchRadius,
667  int maxThreadCount);
668 
670  const PointCloudT::ConstPtr inCloud,
671  const PointCloudNormal::ConstPtr normalsLargeScale,
672  const PointCloudNormal::ConstPtr normalsSmallScale,
673  PointCloudNormal::Ptr outCloud);
675  const PointCloudRGB::ConstPtr inCloud,
676  const PointCloudNormal::ConstPtr normalsLargeScale,
677  const PointCloudNormal::ConstPtr normalsSmallScale,
678  PointCloudNormal::Ptr outCloud);
679 
680 template int EstimateLocalReferenceFrame<PointT, NormalT, pcl::ReferenceFrame>(
681  const PointCloudT::ConstPtr inCloud,
682  const PointCloudT::ConstPtr keyPoints,
683  const CloudNormal::ConstPtr normals,
684  pcl::PointCloud<pcl::ReferenceFrame>::Ptr outRF,
685  float searchRadius);
686 template int
687 EstimateLocalReferenceFrame<PointRGB, NormalT, pcl::ReferenceFrame>(
688  const PointCloudRGB::ConstPtr inCloud,
689  const PointCloudRGB::ConstPtr keyPoints,
690  const CloudNormal::ConstPtr normals,
691  pcl::PointCloud<pcl::ReferenceFrame>::Ptr outRF,
692  float searchRadius);
693 template int
694 EstimateLocalReferenceFrame<PointRGBA, NormalT, pcl::ReferenceFrame>(
695  const PointCloudRGBA::ConstPtr inCloud,
696  const PointCloudRGBA::ConstPtr keyPoints,
697  const CloudNormal::ConstPtr normals,
698  pcl::PointCloud<pcl::ReferenceFrame>::Ptr outRF,
699  float searchRadius);
700 
702  PointT,
703  pcl::ReferenceFrame,
704  pcl::ReferenceFrame>(
705  const PointCloudT::ConstPtr modelKeypoints,
706  const PointCloudT::ConstPtr sceneKeypoints,
707  const pcl::PointCloud<pcl::ReferenceFrame>::ConstPtr modelRF,
708  const pcl::PointCloud<pcl::ReferenceFrame>::ConstPtr sceneRF,
709  const pcl::CorrespondencesConstPtr modelSceneCorrs,
710  std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f>>
711  &rotoTranslations,
712  std::vector<pcl::Correspondences> &clusteredCorrs,
713  float houghBinSize,
714  float houghThreshold);
716  PointRGB,
717  pcl::ReferenceFrame,
718  pcl::ReferenceFrame>(
719  const PointCloudRGB::ConstPtr modelKeypoints,
720  const PointCloudRGB::ConstPtr sceneKeypoints,
721  const pcl::PointCloud<pcl::ReferenceFrame>::ConstPtr modelRF,
722  const pcl::PointCloud<pcl::ReferenceFrame>::ConstPtr sceneRF,
723  const pcl::CorrespondencesConstPtr modelSceneCorrs,
724  std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f>>
725  &rotoTranslations,
726  std::vector<pcl::Correspondences> &clusteredCorrs,
727  float houghBinSize,
728  float houghThreshold);
730  PointRGBA,
731  pcl::ReferenceFrame,
732  pcl::ReferenceFrame>(
733  const PointCloudRGBA::ConstPtr modelKeypoints,
734  const PointCloudRGBA::ConstPtr sceneKeypoints,
735  const pcl::PointCloud<pcl::ReferenceFrame>::ConstPtr modelRF,
736  const pcl::PointCloud<pcl::ReferenceFrame>::ConstPtr sceneRF,
737  const pcl::CorrespondencesConstPtr modelSceneCorrs,
738  std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f>>
739  &rotoTranslations,
740  std::vector<pcl::Correspondences> &clusteredCorrs,
741  float houghBinSize,
742  float houghThreshold);
743 
745  const PointCloudT::ConstPtr modelKeypoints,
746  const PointCloudT::ConstPtr sceneKeypoints,
747  const pcl::CorrespondencesConstPtr modelSceneCorrs,
748  std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f>>
749  &rotoTranslations,
750  std::vector<pcl::Correspondences> &clusteredCorrs,
751  float gcSize,
752  float gcThreshold);
754  const PointCloudRGB::ConstPtr modelKeypoints,
755  const PointCloudRGB::ConstPtr sceneKeypoints,
756  const pcl::CorrespondencesConstPtr modelSceneCorrs,
757  std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f>>
758  &rotoTranslations,
759  std::vector<pcl::Correspondences> &clusteredCorrs,
760  float gcSize,
761  float gcThreshold);
763  const PointCloudRGBA::ConstPtr modelKeypoints,
764  const PointCloudRGBA::ConstPtr sceneKeypoints,
765  const pcl::CorrespondencesConstPtr modelSceneCorrs,
766  std::vector<Eigen::Matrix4f, Eigen::aligned_allocator<Eigen::Matrix4f>>
767  &rotoTranslations,
768  std::vector<pcl::Correspondences> &clusteredCorrs,
769  float gcSize,
770  float gcThreshold);
771 
773  const PointCloudT::ConstPtr inCloud,
774  pcl::PointCloud<pcl::PointXYZI>::Ptr outcloud,
775  float normalRadius,
776  float searchRadius);
778  const PointCloudRGB::ConstPtr inCloud,
779  pcl::PointCloud<pcl::PointXYZI>::Ptr outcloud,
780  float normalRadius,
781  float searchRadius);
783  const PointCloudRGBA::ConstPtr inCloud,
784  pcl::PointCloud<pcl::PointXYZI>::Ptr outcloud,
785  float normalRadius,
786  float searchRadius);
787 
788 template int GetUniformSampling<PointT>(const PointCloudT::ConstPtr inCloud,
789  PointCloudT::Ptr outcloud,
790  const float &searchRadius);
791 template int GetUniformSampling<PointRGB>(const PointCloudRGB::ConstPtr inCloud,
792  PointCloudRGB::Ptr outcloud,
793  const float &searchRadius);
795  const PointCloudRGBA::ConstPtr inCloud,
796  PointCloudRGBA::Ptr outcloud,
797  const float &searchRadius);
798 
799 template int PassThroughFilter<PointT>(const PointCloudT::ConstPtr inCloud,
800  PointCloudT::Ptr outcloud,
801  const QString &filterFieldName,
802  const float &limit_min,
803  const float &limit_max);
804 template int PassThroughFilter<PointRGB>(const PointCloudRGB::ConstPtr inCloud,
805  PointCloudRGB::Ptr outcloud,
806  const QString &filterFieldName,
807  const float &limit_min,
808  const float &limit_max);
810  const PointCloudRGBA::ConstPtr inCloud,
811  PointCloudRGBA::Ptr outcloud,
812  const QString &filterFieldName,
813  const float &limit_min,
814  const float &limit_max);
815 
816 template int VoxelGridFilter<PointT>(const PointCloudT::ConstPtr inCloud,
817  PointCloudT::Ptr outcloud,
818  const float &leafSizeX,
819  const float &leafSizeY,
820  const float &leafSizeZ);
821 template int VoxelGridFilter<PointRGB>(const PointCloudRGB::ConstPtr inCloud,
822  PointCloudRGB::Ptr outcloud,
823  const float &leafSizeX,
824  const float &leafSizeY,
825  const float &leafSizeZ);
826 template int VoxelGridFilter<PointRGBA>(const PointCloudRGBA::ConstPtr inCloud,
827  PointCloudRGBA::Ptr outcloud,
828  const float &leafSizeX,
829  const float &leafSizeY,
830  const float &leafSizeZ);
831 
833  const PointCloudT::ConstPtr inCloud,
834  const pcl::PointIndices::ConstPtr inliers,
835  PointCloudT::Ptr outcloud,
836  PointCloudT::Ptr outcloud2);
838  const PointCloudRGB::ConstPtr inCloud,
839  const pcl::PointIndices::ConstPtr inliers,
840  PointCloudRGB::Ptr outcloud,
841  PointCloudRGB::Ptr outcloud2);
843  const PointCloudRGBA::ConstPtr inCloud,
844  const pcl::PointIndices::ConstPtr inliers,
845  PointCloudRGBA::Ptr outcloud,
846  PointCloudRGBA::Ptr outcloud2);
847 
849  const PointCloudT::ConstPtr inCloud,
850  std::vector<pcl::PointIndices> &outClusters,
851  PointCloudRGB::Ptr cloud_segmented,
852  const PointT foregroundPoint,
853  int neighboursNumber,
854  float smoothSigma,
855  float backWeightRadius,
856  float foreWeight,
857  const pcl::IndicesConstPtr indices);
858 
860  const PointCloudRGB::ConstPtr inCloud,
861  std::vector<pcl::PointIndices> &outClusters,
862  PointCloudRGB::Ptr cloud_segmented,
863  const PointRGB foregroundPoint,
864  int neighboursNumber,
865  float smoothSigma,
866  float backWeightRadius,
867  float foreWeight,
868  const pcl::IndicesConstPtr indices);
869 
871  const PointCloudT::ConstPtr inCloud,
872  const CloudNormal::ConstPtr normals,
873  PointCloudT::Ptr boundaryCloud,
874  const float angleThreshold,
875  const float radius,
876  const bool useKnn);
878  const PointCloudT::ConstPtr inCloud,
879  const PointCloudNormal::ConstPtr normals,
880  PointCloudT::Ptr boundaryCloud,
881  const float angleThreshold,
882  const float radius,
883  const bool useKnn);
885  const PointCloudRGBA::ConstPtr inCloud,
886  const CloudNormal::ConstPtr normals,
887  PointCloudRGBA::Ptr boundaryCloud,
888  const float angleThreshold,
889  const float radius,
890  const bool useKnn);
892  const PointCloudRGBA::ConstPtr inCloud,
893  const PointCloudNormal::ConstPtr normals,
894  PointCloudRGBA::Ptr boundaryCloud,
895  const float angleThreshold,
896  const float radius,
897  const bool useKnn);
898 
900  const PointCloudT::ConstPtr targetCloud,
901  const PointCloudT::ConstPtr sourceCloud,
902  PointCloudT::Ptr outRegistered,
903  int ipcMaxIterations,
904  float icpCorrDistance);
906  const PointCloudRGB::ConstPtr targetCloud,
907  const PointCloudRGB::ConstPtr sourceCloud,
908  PointCloudRGB::Ptr outRegistered,
909  int ipcMaxIterations,
910  float icpCorrDistance);
911 
912 // template int GetHypothesesVerification<PointT, PointT>(
913 // const PointCloudT::Ptr sceneCloud,
914 // std::vector<PointCloudT::ConstPtr> modelClouds,
915 // std::vector<bool> &hypothesesMask,
916 // float clusterReg,
917 // float inlierThreshold,
918 // float occlusionThreshold,
919 // float radiusClutter,
920 // float regularizer,
921 // float radiusNormals,
922 // bool detectClutter);
923 // template int GetHypothesesVerification<PointRGB, PointRGB>(
924 // const PointCloudRGB::Ptr sceneCloud,
925 // std::vector<PointCloudRGB::ConstPtr> modelClouds,
926 // std::vector<bool> &hypothesesMask,
927 // float clusterReg,
928 // float inlierThreshold,
929 // float occlusionThreshold,
930 // float radiusClutter,
931 // float regularizer,
932 // float radiusNormals,
933 // bool detectClutter);
934 } // namespace PCLModules
pcl::PointCloud< PointT > PointCloudT
Definition: PCLCloud.h:17
pcl::PointXYZRGB PointRGB
Definition: PCLCloud.h:20
pcl::PointXYZ PointT
Definition: PCLCloud.h:16
pcl::PointXYZRGBA PointRGBA
Definition: PCLCloud.h:22
pcl::PointCloud< NormalT > CloudNormal
Definition: PCLCloud.h:27
pcl::PolygonMesh PCLMesh
Definition: PCLCloud.h:31
core::Tensor result
Definition: VtkUtils.cpp:76
static bool Print(const char *format,...)
Prints out a formatted message in console.
Definition: CVLog.cpp:113
pcl::PointCloud< pcl::FPFHSignature33 > LocalFeatures
Definition: PCLModules.h:1455
pcl::search::KdTree< PointT > SearchMethod
Definition: PCLModules.h:1456
pcl::PointCloud< NormalT > SurfaceNormals
Definition: PCLModules.h:1454
void loadInputCloud(const std::string &pcd_file)
Definition: PCLModules.cpp:357
LocalFeatures::Ptr getLocalFeatures() const
Definition: PCLModules.h:1485
PointCloudT::Ptr getPointCloud() const
Definition: PCLModules.h:1479
void align(FeatureCloud &template_cloud, TemplateMatching::Result &result)
Definition: PCLModules.cpp:406
void setTargetCloud(FeatureCloud &target_cloud)
Definition: PCLModules.cpp:399
void alignAll(std::vector< TemplateMatching::Result, Eigen::aligned_allocator< Result >> &results)
Definition: PCLModules.cpp:421
int findBestAlignment(TemplateMatching::Result &result)
Definition: PCLModules.cpp:432
double normals[3]
float
template int GetBoundaryCloud< PointT, PointNT >(const PointCloudT::ConstPtr inCloud, const PointCloudNormal::ConstPtr normals, PointCloudT::Ptr boundaryCloud, const float angleThreshold, const float radius, const bool useKnn)
template int PassThroughFilter< PointRGBA >(const PointCloudRGBA::ConstPtr inCloud, PointCloudRGBA::Ptr outcloud, const QString &filterFieldName, const float &limit_min, const float &limit_max)
template int GetMinCutSegmentation< PointT >(const PointCloudT::ConstPtr inCloud, std::vector< pcl::PointIndices > &outClusters, PointCloudRGB::Ptr cloud_segmented, const PointT foregroundPoint, int neighboursNumber, float smoothSigma, float backWeightRadius, float foreWeight, const pcl::IndicesConstPtr indices)
template int GetBoundaryCloud< PointRGBA, NormalT >(const PointCloudRGBA::ConstPtr inCloud, const CloudNormal::ConstPtr normals, PointCloudRGBA::Ptr boundaryCloud, const float angleThreshold, const float radius, const bool useKnn)
template int ComputeNormals< PointT, NormalT >(const PointCloudT::ConstPtr inCloud, CloudNormal::Ptr outcloud, const float radius, const bool useKnn, bool normalConsistency, int maxThreadCount)
template int EstimateSIFT< PointRGB, PointT >(const PointCloudRGB::ConstPtr inCloud, PointCloudT::Ptr outcloud, int nr_octaves, float min_scale, int nr_scales_per_octave, float min_contrast)
int GetGreedyTriangulation(const PointCloudNormal::ConstPtr &cloudWithNormals, PCLMesh &outMesh, int trigulationSearchRadius, float weightingFactor, int maxNearestNeighbors, int maxSurfaceAngle, int minAngle, int maxAngle, bool normalConsistency)
Definition: PCLModules.cpp:270
template int ProgressiveMpFilter< PointRGB >(const PointCloudRGB::ConstPtr inCloud, pcl::PointIndicesPtr groundIndices, int maxWindowSize, float slope, float initialDistance, float maxDistance)
template int ComputeNormals< PointRGBA, PointNT >(const PointCloudRGBA::ConstPtr inCloud, PointCloudNormal::Ptr outcloud, const float radius, const bool useKnn, bool normalConsistency, int maxThreadCount)
template int RemoveOutliersStatistical< PCLCloud >(const PCLCloud::ConstPtr inCloud, PCLCloud::Ptr outCloud, int knn, double nSigma)
template int ProgressiveMpFilter< PointT >(const PointCloudT::ConstPtr inCloud, pcl::PointIndicesPtr groundIndices, int maxWindowSize, float slope, float initialDistance, float maxDistance)
template int ExtractIndicesFilter< PointRGB >(const PointCloudRGB::ConstPtr inCloud, const pcl::PointIndices::ConstPtr inliers, PointCloudRGB::Ptr outcloud, PointCloudRGB::Ptr outcloud2)
int GetRegionGrowingRGB(const PointCloudRGB::ConstPtr cloud, std::vector< pcl::PointIndices > &clusters, PointCloudRGB::Ptr cloud_segmented, int min_cluster_size, float neighbors_distance, float point_color_diff, float region_color_diff)
Color based Region Growing.
Definition: PCLModules.cpp:98
template bool ICPRegistration< PointRGB, PointRGB >(const PointCloudRGB::ConstPtr targetCloud, const PointCloudRGB::ConstPtr sourceCloud, PointCloudRGB::Ptr outRegistered, int ipcMaxIterations, float icpCorrDistance)
int GetPoissonReconstruction(const PointCloudNormal::ConstPtr &cloudWithNormals, PCLMesh &outMesh, int degree, int treeDepth, int isoDivideDepth, int solverDivideDepth, float scale, float samplesPerNode, bool useConfidence, bool useManifold, bool outputPolygons)
Definition: PCLModules.cpp:237
template int GetUniformSampling< PointRGBA >(const PointCloudRGBA::ConstPtr inCloud, PointCloudRGBA::Ptr outcloud, const float &searchRadius)
template int ComputeNormals< PointRGB, PointNT >(const PointCloudRGB::ConstPtr inCloud, PointCloudNormal::Ptr outcloud, const float radius, const bool useKnn, bool normalConsistency, int maxThreadCount)
template int EstimateSIFT< PointRGBA, PointT >(const PointCloudRGBA::ConstPtr inCloud, PointCloudT::Ptr outcloud, int nr_octaves, float min_scale, int nr_scales_per_octave, float min_contrast)
int EstimateHough3DGrouping(const typename pcl::PointCloud< PointModelT >::ConstPtr modelKeypoints, const typename pcl::PointCloud< PointSceneT >::ConstPtr sceneKeypoints, const typename pcl::PointCloud< PointModelRfT >::ConstPtr modelRF, const typename pcl::PointCloud< PointSceneRfT >::ConstPtr sceneRF, const typename pcl::CorrespondencesConstPtr modelSceneCorrs, std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f >> &rotoTranslations, std::vector< pcl::Correspondences > &clusteredCorrs, float houghBinSize=0.01f, float houghThreshold=5.0f)
Definition: PCLModules.h:848
template int ConditionalRemovalFilter< PointNT >(const PointCloudNormal::ConstPtr inCloud, const ConditionParameters &params, PointCloudNormal::Ptr outCloud, bool keepOrganized)
template int EstimateGeometricConsistencyGrouping< PointRGBA, PointRGBA >(const PointCloudRGBA::ConstPtr modelKeypoints, const PointCloudRGBA::ConstPtr sceneKeypoints, const pcl::CorrespondencesConstPtr modelSceneCorrs, std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f >> &rotoTranslations, std::vector< pcl::Correspondences > &clusteredCorrs, float gcSize, float gcThreshold)
int GetRegionGrowing(const PointCloudT::ConstPtr cloud, std::vector< pcl::PointIndices > &clusters, PointCloudRGB::Ptr cloud_segmented, int k, int min_cluster_size, int max_cluster_size, unsigned int neighbour_number, float smoothness_theta, float curvature)
Basic Region Growing.
Definition: PCLModules.cpp:46
template int VoxelGridFilter< PointRGBA >(const PointCloudRGBA::ConstPtr inCloud, PointCloudRGBA::Ptr outcloud, const float &leafSizeX, const float &leafSizeY, const float &leafSizeZ)
template int VoxelGridFilter< PointRGB >(const PointCloudRGB::ConstPtr inCloud, PointCloudRGB::Ptr outcloud, const float &leafSizeX, const float &leafSizeY, const float &leafSizeZ)
int GetSACSegmentation(const PointCloudT::ConstPtr cloud, pcl::PointIndices::Ptr inliers, pcl::ModelCoefficients::Ptr coefficients, const int &methodType, const int &modelType, float distanceThreshold, float probability, int maxIterations, float minRadiusLimits, float maxRadiusLimits, float normalDisWeight)
Definition: PCLModules.cpp:142
template int ComputeNormals< PointRGBA, NormalT >(const PointCloudRGBA::ConstPtr inCloud, CloudNormal::Ptr outcloud, const float radius, const bool useKnn, bool normalConsistency, int maxThreadCount)
template int GetMarchingCubes< PointNT >(const PointCloudNormal::ConstPtr inCloud, const MarchingMethod &marchingMethod, PCLMesh &outMesh, float epsilon, float isoLevel, float gridResolution, float percentageExtendGrid)
template int GetMinCutSegmentation< PointRGB >(const PointCloudRGB::ConstPtr inCloud, std::vector< pcl::PointIndices > &outClusters, PointCloudRGB::Ptr cloud_segmented, const PointRGB foregroundPoint, int neighboursNumber, float smoothSigma, float backWeightRadius, float foreWeight, const pcl::IndicesConstPtr indices)
template int GetUniformSampling< PointT >(const PointCloudT::ConstPtr inCloud, PointCloudT::Ptr outcloud, const float &searchRadius)
template int CropHullFilter< PointRGB >(const PointCloudRGB::ConstPtr inCloud, const PointCloudT::ConstPtr boundingBox, PointCloudRGB::Ptr outCloud, int dimensions)
template int ComputeNormals< PointT, PointNT >(const PointCloudT::ConstPtr inCloud, PointCloudNormal::Ptr outcloud, const float radius, const bool useKnn, bool normalConsistency, int maxThreadCount)
template int EstimateGeometricConsistencyGrouping< PointRGB, PointRGB >(const PointCloudRGB::ConstPtr modelKeypoints, const PointCloudRGB::ConstPtr sceneKeypoints, const pcl::CorrespondencesConstPtr modelSceneCorrs, std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f >> &rotoTranslations, std::vector< pcl::Correspondences > &clusteredCorrs, float gcSize, float gcThreshold)
template int SmoothMls< PointT, PointNT >(const PointCloudT::ConstPtr &inCloud, const MLSParameters &params, PointCloudNormal::Ptr &outcloud)
template int PassThroughFilter< PointT >(const PointCloudT::ConstPtr inCloud, PointCloudT::Ptr outcloud, const QString &filterFieldName, const float &limit_min, const float &limit_max)
template int GetConvexHullReconstruction< PointRGB >(const PointCloudRGB::ConstPtr inCloud, PCLMesh &outMesh, int dimension)
template int EstimateGeometricConsistencyGrouping< PointT, PointT >(const PointCloudT::ConstPtr modelKeypoints, const PointCloudT::ConstPtr sceneKeypoints, const pcl::CorrespondencesConstPtr modelSceneCorrs, std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f >> &rotoTranslations, std::vector< pcl::Correspondences > &clusteredCorrs, float gcSize, float gcThreshold)
template int GetUniformSampling< PointRGB >(const PointCloudRGB::ConstPtr inCloud, PointCloudRGB::Ptr outcloud, const float &searchRadius)
template int GetConcaveHullReconstruction< PointT >(const PointCloudT::ConstPtr inCloud, PCLMesh &outMesh, int dimension, float alpha)
int GridProjection(const PointCloudNormal::ConstPtr &cloudWithNormals, PCLMesh &outMesh, float resolution, int paddingSize, int maxSearchLevel)
Definition: PCLModules.cpp:217
template int EstimateHarris3D< PointRGB >(const PointCloudRGB::ConstPtr inCloud, pcl::PointCloud< pcl::PointXYZI >::Ptr outcloud, float normalRadius, float searchRadius)
template int VoxelGridFilter< PointT >(const PointCloudT::ConstPtr inCloud, PointCloudT::Ptr outcloud, const float &leafSizeX, const float &leafSizeY, const float &leafSizeZ)
template int GetConcaveHullReconstruction< PointRGB >(const PointCloudRGB::ConstPtr inCloud, PCLMesh &outMesh, int dimension, float alpha)
template int CropHullFilter< PointT >(const PointCloudT::ConstPtr inCloud, const PointCloudT::ConstPtr boundingBox, PointCloudT::Ptr outCloud, int dimensions)
template int EuclideanCluster< PointNT >(const PointCloudNormal::ConstPtr inCloud, std::vector< pcl::PointIndices > &cluster_indices, float clusterTolerance, int minClusterSize, int maxClusterSize)
template int EuclideanCluster< PointT >(const PointCloudT::ConstPtr inCloud, std::vector< pcl::PointIndices > &cluster_indices, float clusterTolerance, int minClusterSize, int maxClusterSize)
template int ComputeNormals< PointRGB, NormalT >(const PointCloudRGB::ConstPtr inCloud, CloudNormal::Ptr outcloud, const float radius, const bool useKnn, bool normalConsistency, int maxThreadCount)
template int GetBoundaryCloud< PointT, NormalT >(const PointCloudT::ConstPtr inCloud, const CloudNormal::ConstPtr normals, PointCloudT::Ptr boundaryCloud, const float angleThreshold, const float radius, const bool useKnn)
template int GetConvexHullReconstruction< PointT >(const PointCloudT::ConstPtr inCloud, PCLMesh &outMesh, int dimension)
template bool ICPRegistration< PointT, PointT >(const PointCloudT::ConstPtr targetCloud, const PointCloudT::ConstPtr sourceCloud, PointCloudT::Ptr outRegistered, int ipcMaxIterations, float icpCorrDistance)
template int EstimateHarris3D< PointRGBA >(const PointCloudRGBA::ConstPtr inCloud, pcl::PointCloud< pcl::PointXYZI >::Ptr outcloud, float normalRadius, float searchRadius)
template int ExtractIndicesFilter< PointT >(const PointCloudT::ConstPtr inCloud, const pcl::PointIndices::ConstPtr inliers, PointCloudT::Ptr outcloud, PointCloudT::Ptr outcloud2)
int GetProjection(const PointCloudT::ConstPtr &originCloud, PointCloudT::Ptr &projectedCloud, const pcl::ModelCoefficients::ConstPtr coefficients, const int &modelType)
Definition: PCLModules.cpp:298
template int DONEstimation< PointRGB, PointNT, PointNT >(const PointCloudRGB::ConstPtr inCloud, const PointCloudNormal::ConstPtr normalsLargeScale, const PointCloudNormal::ConstPtr normalsSmallScale, PointCloudNormal::Ptr outCloud)
template int PassThroughFilter< PointRGB >(const PointCloudRGB::ConstPtr inCloud, PointCloudRGB::Ptr outcloud, const QString &filterFieldName, const float &limit_min, const float &limit_max)
template int EstimateHarris3D< PointT >(const PointCloudT::ConstPtr inCloud, pcl::PointCloud< pcl::PointXYZI >::Ptr outcloud, float normalRadius, float searchRadius)
template int DONEstimation< PointT, PointNT, PointNT >(const PointCloudT::ConstPtr inCloud, const PointCloudNormal::ConstPtr normalsLargeScale, const PointCloudNormal::ConstPtr normalsSmallScale, PointCloudNormal::Ptr outCloud)
template int ExtractIndicesFilter< PointRGBA >(const PointCloudRGBA::ConstPtr inCloud, const pcl::PointIndices::ConstPtr inliers, PointCloudRGBA::Ptr outcloud, PointCloudRGBA::Ptr outcloud2)
template int GetBoundaryCloud< PointRGBA, PointNT >(const PointCloudRGBA::ConstPtr inCloud, const PointCloudNormal::ConstPtr normals, PointCloudRGBA::Ptr boundaryCloud, const float angleThreshold, const float radius, const bool useKnn)
float DegreesToRadians(int degrees)
Convert degrees to radians.
Definition: CVMath.h:98
ccGenericPointCloud * sourceCloud