# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.hanzheteng.com/development/pcl/architecture.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
