# Architecture

## PCLBase

* virtual void **setInputCloud** (const PointCloudConstPtr \&cloud);
* virtual void **setIndices** (const IndicesConstPtr \&indices);
* bool **initCompute** ();    \[protected]
* bool **deinitCompute** ();    \[protected]

### Filter : public PCLBase

* :: void removeNaNFromPointCloud (...)
* inline void **filter** (PointCloud \&output)
* virtual void **applyFilter** (PointCloud \&output) = 0;    \[protected]

#### VoxelGrid : public Filter    ([voxel\_grid.h](https://pointclouds.org/documentation/classpcl_1_1_voxel_grid.html))

* inline void **setLeafSize** (float lx, float ly, float lz) / (const Eigen::Vector4f \&leaf\_size)
* inline void setDownsampleAllData (bool downsample)
* inline void setMinimumPointsNumberPerVoxel (unsigned int min\_points\_per\_voxel)
* inline void setFilterLimits (const double \&limit\_min, const double \&limit\_max)
* void **applyFilter** (PointCloud \&output);    \[protected]

### Keypoint : public PCLBase

* virtual void **setSearchSurface** (const PointCloudInConstPtr \&cloud) { surface\_ = cloud; }
* inline void **setSearchMethod** (const KdTreePtr \&tree) { tree\_ = tree; }
* inline void **setKSearch** (int k) { k\_ = k; }
* inline void **setRadiusSearch** (double radius) { search\_radius\_ = radius; }
* inline void **compute** (PointCloudOut \&output);
* inline int searchForNeighbors (...)
* virtual void **detectKeypoints** (PointCloudOut \&output) = 0;    \[protected]

#### HarrisKeypoint3D : public Keypoint    ([harris\_3d.h](https://pointclouds.org/documentation/classpcl_1_1_harris_keypoint3_d.html))

* void setMethod (ResponseMethod type);
* void setRadius (float radius);
* void **setThreshold** (float threshold);
* void **setNonMaxSupression** (bool = false);
* inline void setNumberOfThreads (unsigned int nr\_threads = 0) { threads\_= nr\_threads; }
* pcl::PointIndicesConstPtr  &#x20;**getKeypointsIndices** () { return (keypoints\_indices\_); }&#x20;

#### SIFTKeypoint : public Keypoint    ([sift\_keypoint.h](https://pointclouds.org/documentation/classpcl_1_1_s_i_f_t_keypoint.html))

* void **setScales** (float min\_scale, int nr\_octaves, int nr\_scales\_per\_octave);
* void **setMinimumContrast** (float min\_contrast);

#### ISSKeypoint3D : public Keypoint    ([iss\_3d.h](https://pointclouds.org/documentation/classpcl_1_1_i_s_s_keypoint3_d.html))

* void **setSalientRadius** (double salient\_radius)      \[ref: 6 \* model\_resolution]
* void **setNonMaxRadius** (double non\_max\_radius)     \[ref: 4 \* model\_resolution]
* void setNormalRadius (double normal\_radius)  &#x20;
* void setBorderRadius (double border\_radius)
* void **setMinNeighbors** (int min\_neighbors)        \[ref: 5]
* void setNormals (const PointCloudNConstPtr \&normals)
* void setNumberOfThreads (unsigned int nr\_threads=0)
* pcl::PointIndicesConstPtr  &#x20;**getKeypointsIndices** () { return (keypoints\_indices\_); }&#x20;

### Feature : public PCLBase

* inline void  &#x20;**setSearchSurface** (const PointCloudInConstPtr \&cloud)
* inline void **setSearchMethod** (const KdTreePtr \&tree) { tree\_ = tree; }
* inline void **setKSearch** (int k) { k\_ = k; }
* inline void **setRadiusSearch** (double radius)
* void  &#x20;**compute** (PointCloudOut \&output);
* inline int searchForNeighbors(...)    \[protected]
* virtual void **computeFeature** (PointCloudOut \&output) = 0;    \[private]

#### NormalEstimation : public Feature    ([normal\_3d.h](https://pointclouds.org/documentation/classpcl_1_1_normal_estimation.html))

* void **computeFeature** (PointCloudOut \&output);    \[protected]

#### FeatureFromNormals : public Feature

* inline void **setInputNormals** (const PointCloudNConstPtr \&normals) { normals\_ = normals; }

#### PFHEstimation : public FeatureFromNormals    ([pfh.h](https://pointclouds.org/documentation/classpcl_1_1_p_f_h_estimation.html))

#### FPFHEstimation : public FeatureFromNormals    ([fpfh.h](https://pointclouds.org/documentation/classpcl_1_1_f_p_f_h_estimation.html))

* void **computeFeature** (PointCloudOut \&output);    \[protected]

#### PFHRGBEstimation : public FeatureFromNormals    ([pfhrgb.h](https://pointclouds.org/documentation/classpcl_1_1_p_f_h_r_g_b_estimation.html))

#### SHOTEstimation : public FeatureFromNormals, FeatureWithLocalReferenceFrames   ([shot.h](https://pointclouds.org/documentation/classpcl_1_1_s_h_o_t_estimation.html))

#### SHOTColorEstimation : public FeatureFromNormals, FeatureWithLocalReferenceFrames    ([shot.h](https://pointclouds.org/documentation/classpcl_1_1_s_h_o_t_color_estimation.html))

### Registration : public PCLBase

* void  &#x20;setTransformationEstimation (const TransformationEstimationPtr \&te)
* void  &#x20;setCorrespondenceEstimation (const CorrespondenceEstimationPtr \&ce)
* virtual void **setInputSource** (const PointCloudSourceConstPtr \&cloud)
* virtual inline void&#x20;  **setInputTarget** (const PointCloudTargetConstPtr \&cloud)
* inline void setSearchMethodSource (const KdTreeReciprocalPtr \&tree, bool force\_no\_recompute = ...)
* inline void setSearchMethodTarget (const KdTreePtr \&tree, bool force\_no\_recompute = false)
* inline Matrix4  &#x20;**getFinalTransformation** () { return (final\_transformation\_); }
* inline Matrix4 getLastIncrementalTransformation () { return (transformation\_); }
* inline void&#x20;  **setMaxCorrespondenceDistance** (double distance\_threshold)       \[ref: 0.05]
* inline void&#x20;  **setMaximumIterations** (int nr\_iterations)          \[termination criterion 1; ref: 50, 500]
* inline void **setTransformationEpsilon** (double epsilon)      \[termination criterion 2; ref: 1e-6, 1e-8]
* inline void **setEuclideanFitnessEpsilon** (double epsilon)   \[termination criterion 3; ref: 1]
* inline void setRANSACIterations (int ransac\_iterations)
* inline void setRANSACOutlierRejectionThreshold (double inlier\_threshold)
* inline void **align** (PointCloudSource \&output);
* inline void addCorrespondenceRejector (const CorrespondenceRejectorPtr \&rejector)
* virtual void **computeTransformation** (PointCloudSource \&output, const Matrix4& guess)    \[protected]
* inline bool searchForNeighbors (const PointCloudSource &, int, std::vector &, std::vector &)\[protected]

#### SampleConsensusInitialAlignment : public Registration    ([ia\_ransac.h](https://pointclouds.org/documentation/classpcl_1_1_sample_consensus_initial_alignment.html))

* void **setSourceFeatures** (const FeatureCloudConstPtr \&features);
* void **setTargetFeatures** (const FeatureCloudConstPtr \&features);
* void&#x20;  **setMinSampleDistance** (float min\_sample\_distance)
* void&#x20;  setNumberOfSamples (int nr\_samples) { nr\_samples\_ = nr\_samples; }
* void  &#x20;setCorrespondenceRandomness (int k) { k\_correspondences\_ = k; }
* void  &#x20;setErrorFunction (const boost::shared\_ptr\<ErrorFunctor> & error\_functor)

#### FPCSInitialAlignment : public Registration    ([ia\_fpcs.h](https://pointclouds.org/documentation/classpcl_1_1registration_1_1_f_p_c_s_initial_alignment.html))

#### KFPCSInitialAlignment : public FPCSInitialAlignment   ([ia\_kfpcs.h](https://pointclouds.org/documentation/classpcl_1_1registration_1_1_k_f_p_c_s_initial_alignment.html))

#### NormalDistributionsTransform : public Registration      ([ndt.h](https://pointclouds.org/documentation/classpcl_1_1_normal_distributions_transform.html))

* inline void setResolution (float resolution)
* inline void setStepSize (double step\_size)
* inline void setOulierRatio (double outlier\_ratio)

#### IterativeClosestPoint : public Registration     ([icp.h](https://pointclouds.org/documentation/classpcl_1_1_iterative_closest_point.html))

* inline void setUseReciprocalCorrespondences (bool use\_reciprocal\_correspondence)
* IterativeClosestPointWithNormals : public IterativeClosestPoint       (icp.h)
* IterativeClosestPointNonLinear  &#x20;: public IterativeClosestPoint      (icp\_nl.h)

#### GeneralizedIterativeClosestPoint : public IterativeClosestPoint    ([gicp.h](https://pointclouds.org/documentation/classpcl_1_1_generalized_iterative_closest_point.html))

#### GeneralizedIterativeClosestPoint6D : public GeneralizedIterativeClosestPoint   ([gicp6d.h](https://pointclouds.org/documentation/gicp6d_8h_source.html))

### CorrespondenceEstimationBase : public PCLBase

* inline void  &#x20;**setInput**Source (const PointCloudSourceConstPtr& cloud)
* inline void  &#x20;setInputTarget (const PointCloudTargetConstPtr& cloud)
* inline void  &#x20;**setIndices**Source (const IndicesPtr& indices)
* inline void  &#x20;setIndicesTarget (const IndicesPtr& indices)
* inline void  &#x20;**setSearchMethod**Source(const KdTreeReciprocalPtr& tree,  &#x20;bool force\_no\_recompute = ...)
* inline void  &#x20;setSearchMethodTarget(const KdTreePtr& tree, bool force\_no\_recompute = false)
* virtual void  &#x20;**determineCorrespondences**(  pcl::Correspondences& correspondences,  &#x20;...) = 0;
* virtual void  &#x20;determineReciprocalCorrespondences(  pcl::Correspondences& correspondences,  &#x20;...) = 0;
* inline void  &#x20;setPointRepresentation(const PointRepresentationConstPtr& point\_representation)

#### CorrespondenceEstimation&#xD; : public CorrespondenceEstimationBase   （[corres\_est.h](https://pointclouds.org/documentation/classpcl_1_1registration_1_1_correspondence_estimation.html)）

* void  &#x20;**determineCorrespondences** (  pcl::Correspondences& correspondences,  &#x20;...) override;
* void  &#x20;determineReciprocalCorrespondences(  pcl::Correspondences& correspondences,  &#x20;...) override;

## Registration::TransformationEstimation

* virtual void **estimateRigidTransformation** (const pcl::PointCloud< PointSource > \&cloud\_src, const pcl::PointCloud< PointTarget > \&cloud\_tgt, Matrix4 \&transformation\_matrix) const =0

#### TransformationEstimationSVD&#xD; : public TransformationEstimation

* virtual void  &#x20;getTransformationFromCorrelation(...) const     \[protected]

#### TransformationEstimationLM&#xD; : public TransformationEstimation    ([trans\_est.h](https://pointclouds.org/documentation/classpcl_1_1registration_1_1_transformation_estimation_l_m.html))

* virtual MatScalar  &#x20;**computeDistance**(const Vector4& p\_src, const PointTarget& p\_tgt)    \[protected]
* struct OptimizationFunctor : public Functor      \[protected]

#### TransformationEstimationPointToPlane&#xD; : public TransformationEstimationLM

* Scalar  &#x20;computeDistance(const Vector4& p\_src, const PointTarget& p\_tgt) const override   \[protected]

## Search

* virtual void setSortedResults (bool sorted);
* virtual void **setInputCloud** (const PointCloudConstPtr& cloud, const IndicesConstPtr \&indices = ...);
* virtual int nearestKSearch (...)&#x20;
* virtual int **radiusSearch** (...)
* void sortResults (std::vector& indices, std::vector& distances) const;   \[protected]

#### KdTree : public Search    ([search/kdtree.h](https://pointclouds.org/documentation/classpcl_1_1search_1_1_kd_tree.html))

* template\<typename PointT, class Tree = pcl::KdTreeFLANN\<PointT> >
* void setPointRepresentation (const PointRepresentationConstPtr \&point\_representation);
* void setSortedResults (bool sorted\_results);
* void **setInputCloud** (const PointCloudConstPtr& cloud, const IndicesConstPtr& indices = ...);
* void setEpsilon (float eps);
* int nearestKSearch (...)
* int **radiusSearch** (...)

## Visualization

### PCLVisualizer  ([visualizer](https://pointclouds.org/documentation/classpcl_1_1visualization_1_1_p_c_l_visualizer.html))

* void setBackgroundColor (const double \&r, const double \&g, const double \&b, int viewport = 0);
* void createViewPort (double xmin, double ymin, double xmax, double ymax, int \&viewport)
* boost::signals2::connection **registerKeyboardCallback** (std::function...)
* boost::signals2::connection **registerMouseCallback** (std::function...)
* void initCameraParameters ()
* void setCameraParameters (const Eigen::Matrix3f \&intrinsics, const Eigen::Matrix4f \&extrinsics, int viewport=0)
* void **setCameraPosition** (double pos\_x, double pos\_y, double pos\_z, double view\_x, double view\_y, double view\_z, double up\_x, double up\_y, double up\_z, int viewport=0)
* bool setShapeRenderingProperties (int property, double value, const std::string \&id, int viewport=0)
* bool **addPointCloud** (...)
* bool addPointCloudNormals (...)
* bool addPointCloudPrincipalCurvatures (...)
* bool **addCorrespondences** (...)
* bool addPolygonMesh (...)
* bool addText (...)
* bool addText3D (...)
* bool wasStopped () const
* void spinOnce (int time=1, bool force\_redraw=false)

### PointCloudColorHandler  ([color\_handler](https://pointclouds.org/documentation/classpcl_1_1visualization_1_1_point_cloud_color_handler.html))

* PointCloudColorHandler (const PointCloudConstPtr \&cloud) :  &#x20;cloud\_ (cloud), capable\_ (false), field\_idx\_ (-1), fields\_ ()  &#x20;{}

#### PointCloudColorHandlerCustom : public PointCloudColorHandler

* PointCloudColorHandlerCustom (const PointCloudConstPtr \&cloud, double r, double g, double b)

#### PointCloudColorHandlerRGBField : public PointCloudColorHandler

#### PointCloudColorHandlerLabelField : public PointCloudColorHandler

### PointCloudGeometryHandler  ([geometry\_handler](https://pointclouds.org/documentation/classpcl_1_1visualization_1_1_point_cloud_geometry_handler.html))

#### PointCloudGeometryHandlerCustom : public PointCloudGeometryHandler

* Custom handler class for PointCloud geometry. Given an input dataset and three user defined fields, all data present in them is extracted and displayed on screen as XYZ data.&#x20;

### PCLHistogramVisualizer  ([histogram\_visualizer](https://pointclouds.org/documentation/classpcl_1_1visualization_1_1_p_c_l_histogram_visualizer.html))

* bool addFeatureHistogram (const pcl::PointCloud< PointT > \&cloud, int hsize, ...)

### PCLPlotter  ([plotter](https://pointclouds.org/documentation/classpcl_1_1visualization_1_1_p_c_l_plotter.html))

* void addPlotData (double const \*array\_X, double const \*array\_Y, unsigned long size, ...)
* void addHistogramData (std::vector< double > const \&data, int const nbins=10, ...)
* bool addFeatureHistogram (const pcl::PointCloud< PointT > \&cloud, int hsize, ...)
* void setBackgroundColor (const double r, const double g, const double b)
* void plot ()

## IO

### FileReader

#### PCDReader : public FileReader   ([pcd\_io.h](https://pointclouds.org/documentation/classpcl_1_1_p_c_d_reader.html))

* int loadPCDFile (const std::string \&file\_name, pcl::PointCloud< PointT > \&cloud)
  * {pcl::PCDReader p;  return (p.read (file\_name, cloud));}

#### PLYReader : public FileReader   ([ply\_io.h](https://pointclouds.org/documentation/classpcl_1_1_p_l_y_reader.html))

* int loadPLYFile (const std::string \&file\_name, pcl::PointCloud< PointT > \&cloud)
