Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef PCL_SURFEL_SMOOTHING_H_
00039 #define PCL_SURFEL_SMOOTHING_H_
00040
00041 #include <pcl/pcl_base.h>
00042 #include <pcl/search/pcl_search.h>
00043
00044 namespace pcl
00045 {
00046 template <typename PointT, typename PointNT>
00047 class SurfelSmoothing : public PCLBase<PointT>
00048 {
00049 using PCLBase<PointT>::input_;
00050 using PCLBase<PointT>::initCompute;
00051
00052 public:
00053 typedef boost::shared_ptr<SurfelSmoothing<PointT, PointNT> > Ptr;
00054 typedef boost::shared_ptr<const SurfelSmoothing<PointT, PointNT> > ConstPtr;
00055
00056 typedef pcl::PointCloud<PointT> PointCloudIn;
00057 typedef typename pcl::PointCloud<PointT>::Ptr PointCloudInPtr;
00058 typedef pcl::PointCloud<PointNT> NormalCloud;
00059 typedef typename pcl::PointCloud<PointNT>::Ptr NormalCloudPtr;
00060 typedef pcl::search::Search<PointT> CloudKdTree;
00061 typedef typename pcl::search::Search<PointT>::Ptr CloudKdTreePtr;
00062
00063 SurfelSmoothing (float a_scale = 0.01)
00064 : PCLBase<PointT> ()
00065 , scale_ (a_scale)
00066 , scale_squared_ (a_scale * a_scale)
00067 , normals_ ()
00068 , interm_cloud_ ()
00069 , interm_normals_ ()
00070 , tree_ ()
00071 {
00072 }
00073
00074 void
00075 setInputNormals (NormalCloudPtr &a_normals) { normals_ = a_normals; };
00076
00077 void
00078 setSearchMethod (const CloudKdTreePtr &a_tree) { tree_ = a_tree; };
00079
00080 bool
00081 initCompute ();
00082
00083 float
00084 smoothCloudIteration (PointCloudInPtr &output_positions,
00085 NormalCloudPtr &output_normals);
00086
00087 void
00088 computeSmoothedCloud (PointCloudInPtr &output_positions,
00089 NormalCloudPtr &output_normals);
00090
00091
00092 void
00093 smoothPoint (size_t &point_index,
00094 PointT &output_point,
00095 PointNT &output_normal);
00096
00097 void
00098 extractSalientFeaturesBetweenScales (PointCloudInPtr &cloud2,
00099 NormalCloudPtr &cloud2_normals,
00100 boost::shared_ptr<std::vector<int> > &output_features);
00101
00102 private:
00103 float scale_, scale_squared_;
00104 NormalCloudPtr normals_;
00105
00106 PointCloudInPtr interm_cloud_;
00107 NormalCloudPtr interm_normals_;
00108
00109 CloudKdTreePtr tree_;
00110
00111 };
00112 }
00113
00114 #ifdef PCL_NO_PRECOMPILE
00115 #include <pcl/surface/impl/surfel_smoothing.hpp>
00116 #endif
00117
00118 #endif // PCL_SURFEL_SMOOTHING_H_