39 #ifndef PCL_SEGMENTATION_PROGRESSIVE_MORPHOLOGICAL_FILTER_HPP_ 40 #define PCL_SEGMENTATION_PROGRESSIVE_MORPHOLOGICAL_FILTER_HPP_ 43 #include <pcl/common/io.h> 44 #include <pcl/filters/morphological_filter.h> 45 #include <pcl/filters/extract_indices.h> 46 #include <pcl/segmentation/progressive_morphological_filter.h> 47 #include <pcl/point_cloud.h> 51 template <
typename Po
intT>
53 max_window_size_ (33),
55 max_distance_ (10.0f),
56 initial_distance_ (0.15f),
64 template <
typename Po
intT>
70 template <
typename Po
intT>
void 73 bool segmentation_is_possible = initCompute ();
74 if (!segmentation_is_possible)
81 std::vector<float> height_thresholds;
82 std::vector<float> window_sizes;
84 float window_size = 0.0f;
85 float height_threshold = 0.0f;
87 while (window_size < max_window_size_)
91 window_size = cell_size_ * (2.0f * std::pow (base_, iteration) + 1.0f);
93 window_size = cell_size_ * (2.0f * (iteration+1) * base_ + 1.0f);
97 height_threshold = initial_distance_;
99 height_threshold = slope_ * (window_size - window_sizes[iteration-1]) * cell_size_ + initial_distance_;
102 if (height_threshold > max_distance_)
103 height_threshold = max_distance_;
105 window_sizes.push_back (window_size);
106 height_thresholds.push_back (height_threshold);
116 for (std::size_t i = 0; i < window_sizes.size (); ++i)
118 PCL_DEBUG (
" Iteration %d (height threshold = %f, window size = %f)...",
119 i, height_thresholds[i], window_sizes[i]);
123 pcl::copyPointCloud<PointT> (*input_, ground, *cloud);
128 pcl::applyMorphologicalOperator<PointT> (cloud, window_sizes[i],
MORPH_OPEN, *cloud_f);
132 std::vector<int> pt_indices;
133 for (std::size_t p_idx = 0; p_idx < ground.size (); ++p_idx)
135 float diff = (*cloud)[p_idx].z - (*cloud_f)[p_idx].z;
136 if (diff < height_thresholds[i])
137 pt_indices.push_back (ground[p_idx]);
141 ground.swap (pt_indices);
143 PCL_DEBUG (
"ground now has %d points\n", ground.size ());
149 #define PCL_INSTANTIATE_ProgressiveMorphologicalFilter(T) template class pcl::ProgressiveMorphologicalFilter<T>; 151 #endif // PCL_SEGMENTATION_PROGRESSIVE_MORPHOLOGICAL_FILTER_HPP_ shared_ptr< PointCloud< PointT > > Ptr
~ProgressiveMorphologicalFilter()
Define standard C methods and C++ classes that are common to all methods.
ProgressiveMorphologicalFilter()
Constructor that sets default values for member variables.
Defines all the PCL implemented PointT point type structures.
PointCloud represents the base class in PCL for storing collections of 3D points. ...
virtual void extract(std::vector< int > &ground)
This method launches the segmentation algorithm and returns indices of points determined to be ground...