38 #ifndef PCL_2D_KERNEL_IMPL_HPP 39 #define PCL_2D_KERNEL_IMPL_HPP 42 template <
typename Po
intT>
void 49 sobelKernelX (kernel);
54 sobelKernelY (kernel);
59 prewittKernelX (kernel);
64 prewittKernelY (kernel);
69 robertsKernelX (kernel);
74 robertsKernelY (kernel);
82 case DERIVATIVE_CENTRAL_X:
84 derivativeXCentralKernel (kernel);
87 case DERIVATIVE_FORWARD_X:
89 derivativeXForwardKernel (kernel);
92 case DERIVATIVE_BACKWARD_X:
94 derivativeXBackwardKernel (kernel);
97 case DERIVATIVE_CENTRAL_Y:
99 derivativeYCentralKernel (kernel);
102 case DERIVATIVE_FORWARD_Y:
104 derivativeYForwardKernel (kernel);
107 case DERIVATIVE_BACKWARD_Y:
109 derivativeYBackwardKernel (kernel);
114 gaussianKernel (kernel);
121 template <
typename Po
intT>
void 125 kernel.
resize (kernel_size_ * kernel_size_);
126 kernel.
height = kernel_size_;
127 kernel.
width = kernel_size_;
129 double sigma_sqr = 2 * sigma_ * sigma_;
131 for (
int i = 0; i < kernel_size_; i++)
133 for (
int j = 0; j < kernel_size_; j++)
135 int iks = (i - kernel_size_ / 2);
136 int jks = (j - kernel_size_ / 2);
137 kernel (j, i).intensity = expf (
float (-
double (iks * iks + jks * jks) / sigma_sqr));
138 sum += float (kernel (j, i).intensity);
143 for (
size_t i = 0; i < kernel.
size (); ++i)
144 kernel[i].intensity /= sum;
148 template<
typename Po
intT>
void 153 kernel.
resize (kernel_size_ * kernel_size_);
154 kernel.
height = kernel_size_;
155 kernel.
width = kernel_size_;
157 double sigma_sqr = 2 * sigma_ * sigma_;
159 for (
int i = 0; i < kernel_size_; i++)
161 for (
int j = 0; j < kernel_size_; j++)
163 int iks = (i - kernel_size_ / 2);
164 int jks = (j - kernel_size_ / 2);
165 temp = float (
double (iks * iks + jks * jks) / sigma_sqr);
166 kernel (j, i).intensity = (1.0f - temp) * expf (-temp);
167 sum += kernel (j, i).intensity;
172 for (
size_t i = 0; i < kernel.
size (); ++i)
173 kernel[i].intensity /= sum;
177 template <
typename Po
intT>
void 183 kernel (0, 0).intensity = -1; kernel (1, 0).intensity = 0; kernel (2, 0).intensity = 1;
184 kernel (0, 1).intensity = -2; kernel (1, 1).intensity = 0; kernel (2, 1).intensity = 2;
185 kernel (0, 2).intensity = -1; kernel (1, 2).intensity = 0; kernel (2, 2).intensity = 1;
189 template <
typename Po
intT>
void 195 kernel (0, 0).intensity = -1; kernel (1, 0).intensity = 0; kernel (2, 0).intensity = 1;
196 kernel (0, 1).intensity = -1; kernel (1, 1).intensity = 0; kernel (2, 1).intensity = 1;
197 kernel (0, 2).intensity = -1; kernel (1, 2).intensity = 0; kernel (2, 2).intensity = 1;
201 template <
typename Po
intT>
void 207 kernel (0, 0).intensity = 1; kernel (1, 0).intensity = 0;
208 kernel (0, 1).intensity = 0; kernel (1, 1).intensity = -1;
212 template <
typename Po
intT>
void 218 kernel (0, 0).intensity = -1; kernel (1, 0).intensity = -2; kernel (2, 0).intensity = -1;
219 kernel (0, 1).intensity = 0; kernel (1, 1).intensity = 0; kernel (2, 1).intensity = 0;
220 kernel (0, 2).intensity = 1; kernel (1, 2).intensity = 2; kernel (2, 2).intensity = 1;
224 template <
typename Po
intT>
void 230 kernel (0, 0).intensity = 1; kernel (1, 0).intensity = 1; kernel (2, 0).intensity = 1;
231 kernel (0, 1).intensity = 0; kernel (1, 1).intensity = 0; kernel (2, 1).intensity = 0;
232 kernel (0, 2).intensity = -1; kernel (1, 2).intensity = -1; kernel (2, 2).intensity = -1;
235 template <
typename Po
intT>
void 241 kernel (0, 0).intensity = 0; kernel (1, 0).intensity = 1;
242 kernel (0, 1).intensity = -1; kernel (1, 1).intensity = 0;
246 template <
typename Po
intT>
void 252 kernel (0, 0).intensity = -1; kernel (1, 0).intensity = 0; kernel (2, 0).intensity = 1;
256 template <
typename Po
intT>
void 262 kernel (0, 0).intensity = 0; kernel (1, 0).intensity = -1; kernel (2, 0).intensity = 1;
266 template <
typename Po
intT>
void 272 kernel (0, 0).intensity = -1; kernel (1, 0).intensity = 1; kernel (2, 0).intensity = 0;
276 template <
typename Po
intT>
void 282 kernel (0, 0).intensity = -1; kernel (0, 1).intensity = 0; kernel (0, 2).intensity = 1;
286 template <
typename Po
intT>
void 292 kernel (0, 0).intensity = 0; kernel (0, 1).intensity = -1; kernel (0, 2).intensity = 1;
296 template <
typename Po
intT>
void 302 kernel (0, 0).intensity = -1; kernel (0, 1).intensity = 1; kernel (0, 2).intensity = 0;
307 template <
typename Po
intT>
void 310 kernel_type_ = kernel_type;
314 template <
typename Po
intT>
void 317 kernel_size_ = kernel_size;
321 template <
typename Po
intT>
void 324 sigma_ = kernel_sigma;
void setKernelType(KERNEL_ENUM kernel_type)
void prewittKernelY(pcl::PointCloud< PointT > &kernel)
void prewittKernelX(pcl::PointCloud< PointT > &kernel)
void robertsKernelX(pcl::PointCloud< PointT > &kernel)
void derivativeYForwardKernel(pcl::PointCloud< PointT > &kernel)
void sobelKernelX(pcl::PointCloud< PointT > &kernel)
uint32_t height
The point cloud height (if organized as an image-structure).
void derivativeYBackwardKernel(PointCloud< PointT > &kernel)
uint32_t width
The point cloud width (if organized as an image-structure).
void sobelKernelY(pcl::PointCloud< PointT > &kernel)
void loGKernel(pcl::PointCloud< PointT > &kernel)
void setKernelSigma(float kernel_sigma)
PointCloud represents the base class in PCL for storing collections of 3D points. ...
void fetchKernel(pcl::PointCloud< PointT > &kernel)
void gaussianKernel(pcl::PointCloud< PointT > &kernel)
void derivativeXForwardKernel(pcl::PointCloud< PointT > &kernel)
void derivativeYCentralKernel(pcl::PointCloud< PointT > &kernel)
void resize(size_t n)
Resize the cloud.
void derivativeXCentralKernel(pcl::PointCloud< PointT > &kernel)
void derivativeXBackwardKernel(pcl::PointCloud< PointT > &kernel)
void robertsKernelY(pcl::PointCloud< PointT > &kernel)
void setKernelSize(int kernel_size)