40 #ifndef PCL_GAUSSIAN_KERNEL
41 #define PCL_GAUSSIAN_KERNEL
44 #include <pcl/common/eigen.h>
45 #include <pcl/point_cloud.h>
46 #include <boost/function.hpp>
63 static const unsigned MAX_KERNEL_WIDTH = 71;
73 Eigen::VectorXf &kernel,
74 unsigned kernel_width = MAX_KERNEL_WIDTH)
const;
86 Eigen::VectorXf &kernel,
87 Eigen::VectorXf &derivative,
88 unsigned kernel_width = MAX_KERNEL_WIDTH)
const;
99 const Eigen::VectorXf &kernel,
110 template <
typename Po
intT>
void
112 boost::function <
float (
const PointT& p)> field_accessor,
113 const Eigen::VectorXf &kernel,
125 const Eigen::VectorXf &kernel,
136 template <
typename Po
intT>
void
138 boost::function <
float (
const PointT& p)> field_accessor,
139 const Eigen::VectorXf &kernel,
152 const Eigen::VectorXf &horiz_kernel,
153 const Eigen::VectorXf &vert_kernel,
156 std::cout <<
">>> convolve cpp" << std::endl;
158 convolveRows (input, horiz_kernel, tmp);
159 convolveCols (tmp, vert_kernel, output);
160 std::cout <<
"<<< convolve cpp" << std::endl;
172 template <
typename Po
intT>
inline void
174 boost::function <
float (
const PointT& p)> field_accessor,
175 const Eigen::VectorXf &horiz_kernel,
176 const Eigen::VectorXf &vert_kernel,
179 std::cout <<
">>> convolve hpp" << std::endl;
181 convolveRows<PointT>(input, field_accessor, horiz_kernel, tmp);
182 convolveCols(tmp, vert_kernel, output);
183 std::cout <<
"<<< convolve hpp" << std::endl;
198 const Eigen::VectorXf &gaussian_kernel,
199 const Eigen::VectorXf &gaussian_kernel_derivative,
203 convolve (input, gaussian_kernel_derivative, gaussian_kernel, grad_x);
204 convolve (input, gaussian_kernel, gaussian_kernel_derivative, grad_y);
218 template <
typename Po
intT>
inline void
220 boost::function <
float (
const PointT& p)> field_accessor,
221 const Eigen::VectorXf &gaussian_kernel,
222 const Eigen::VectorXf &gaussian_kernel_derivative,
226 convolve<PointT> (input, field_accessor, gaussian_kernel_derivative, gaussian_kernel, grad_x);
227 convolve<PointT> (input, field_accessor, gaussian_kernel, gaussian_kernel_derivative, grad_y);
239 const Eigen::VectorXf &gaussian_kernel,
242 convolve (input, gaussian_kernel, gaussian_kernel, output);
253 template <
typename Po
intT>
inline void
255 boost::function <
float (
const PointT& p)> field_accessor,
256 const Eigen::VectorXf &gaussian_kernel,
259 convolve<PointT> (input, field_accessor, gaussian_kernel, gaussian_kernel, output);
264 #include <pcl/common/impl/gaussian.hpp>
266 #endif // PCL_GAUSSIAN_KERNEL
void smooth(const pcl::PointCloud< float > &input, const Eigen::VectorXf &gaussian_kernel, pcl::PointCloud< float > &output) const
Smooth image using a gaussian kernel.
uint32_t height
The point cloud height (if organized as an image-structure).
Class GaussianKernel assembles all the method for computing, convolving, smoothing, gradients computing an image using a gaussian kernel.
uint32_t width
The point cloud width (if organized as an image-structure).
void convolve(const pcl::PointCloud< PointT > &input, boost::function< float(const PointT &p)> field_accessor, const Eigen::VectorXf &horiz_kernel, const Eigen::VectorXf &vert_kernel, pcl::PointCloud< float > &output) const
Convolve a float image in the 2 directions.
void computeGradients(const pcl::PointCloud< float > &input, const Eigen::VectorXf &gaussian_kernel, const Eigen::VectorXf &gaussian_kernel_derivative, pcl::PointCloud< float > &grad_x, pcl::PointCloud< float > &grad_y) const
Computes float image gradients using a gaussian kernel and gaussian kernel derivative.
void smooth(const pcl::PointCloud< PointT > &input, boost::function< float(const PointT &p)> field_accessor, const Eigen::VectorXf &gaussian_kernel, pcl::PointCloud< float > &output) const
Smooth image using a gaussian kernel.
A point structure representing Euclidean xyz coordinates, and the RGB color.
void convolve(const pcl::PointCloud< float > &input, const Eigen::VectorXf &horiz_kernel, const Eigen::VectorXf &vert_kernel, pcl::PointCloud< float > &output) const
Convolve a float image in the 2 directions.
void computeGradients(const pcl::PointCloud< PointT > &input, boost::function< float(const PointT &p)> field_accessor, const Eigen::VectorXf &gaussian_kernel, const Eigen::VectorXf &gaussian_kernel_derivative, pcl::PointCloud< float > &grad_x, pcl::PointCloud< float > &grad_y) const
Computes float image gradients using a gaussian kernel and gaussian kernel derivative.