38 #ifndef PCL_2D_KERNEL_IMPL_HPP
39 #define PCL_2D_KERNEL_IMPL_HPP
42 template <
typename Po
intT>
46 switch (kernel_type_) {
68 case DERIVATIVE_CENTRAL_X:
69 derivativeXCentralKernel(
kernel);
71 case DERIVATIVE_FORWARD_X:
72 derivativeXForwardKernel(
kernel);
74 case DERIVATIVE_BACKWARD_X:
75 derivativeXBackwardKernel(
kernel);
77 case DERIVATIVE_CENTRAL_Y:
78 derivativeYCentralKernel(
kernel);
80 case DERIVATIVE_FORWARD_Y:
81 derivativeYForwardKernel(
kernel);
83 case DERIVATIVE_BACKWARD_Y:
84 derivativeYBackwardKernel(
kernel);
93 template <
typename Po
intT>
98 kernel.resize(kernel_size_ * kernel_size_);
99 kernel.height = kernel_size_;
100 kernel.width = kernel_size_;
102 double sigma_sqr = 2 * sigma_ * sigma_;
104 for (
int i = 0; i < kernel_size_; i++) {
105 for (
int j = 0; j < kernel_size_; j++) {
106 int iks = (i - kernel_size_ / 2);
107 int jks = (j - kernel_size_ / 2);
109 std::exp(
float(-
double(iks * iks + jks * jks) / sigma_sqr));
110 sum += float(
kernel(j, i).intensity);
115 for (std::size_t i = 0; i <
kernel.size(); ++i)
116 kernel[i].intensity /= sum;
120 template <
typename Po
intT>
126 kernel.resize(kernel_size_ * kernel_size_);
127 kernel.height = kernel_size_;
128 kernel.width = kernel_size_;
130 double sigma_sqr = 2 * sigma_ * sigma_;
132 for (
int i = 0; i < kernel_size_; i++) {
133 for (
int j = 0; j < kernel_size_; j++) {
134 int iks = (i - kernel_size_ / 2);
135 int jks = (j - kernel_size_ / 2);
136 temp = float(
double(iks * iks + jks * jks) / sigma_sqr);
137 kernel(j, i).intensity = (1.0f - temp) * std::exp(-temp);
138 sum +=
kernel(j, i).intensity;
143 for (std::size_t i = 0; i <
kernel.size(); ++i)
144 kernel[i].intensity /= sum;
148 template <
typename Po
intT>
155 kernel(0, 0).intensity = -1;
156 kernel(1, 0).intensity = 0;
157 kernel(2, 0).intensity = 1;
158 kernel(0, 1).intensity = -2;
159 kernel(1, 1).intensity = 0;
160 kernel(2, 1).intensity = 2;
161 kernel(0, 2).intensity = -1;
162 kernel(1, 2).intensity = 0;
163 kernel(2, 2).intensity = 1;
167 template <
typename Po
intT>
174 kernel(0, 0).intensity = -1;
175 kernel(1, 0).intensity = 0;
176 kernel(2, 0).intensity = 1;
177 kernel(0, 1).intensity = -1;
178 kernel(1, 1).intensity = 0;
179 kernel(2, 1).intensity = 1;
180 kernel(0, 2).intensity = -1;
181 kernel(1, 2).intensity = 0;
182 kernel(2, 2).intensity = 1;
186 template <
typename Po
intT>
193 kernel(0, 0).intensity = 1;
194 kernel(1, 0).intensity = 0;
195 kernel(0, 1).intensity = 0;
196 kernel(1, 1).intensity = -1;
200 template <
typename Po
intT>
207 kernel(0, 0).intensity = -1;
208 kernel(1, 0).intensity = -2;
209 kernel(2, 0).intensity = -1;
210 kernel(0, 1).intensity = 0;
211 kernel(1, 1).intensity = 0;
212 kernel(2, 1).intensity = 0;
213 kernel(0, 2).intensity = 1;
214 kernel(1, 2).intensity = 2;
215 kernel(2, 2).intensity = 1;
219 template <
typename Po
intT>
226 kernel(0, 0).intensity = 1;
227 kernel(1, 0).intensity = 1;
228 kernel(2, 0).intensity = 1;
229 kernel(0, 1).intensity = 0;
230 kernel(1, 1).intensity = 0;
231 kernel(2, 1).intensity = 0;
232 kernel(0, 2).intensity = -1;
233 kernel(1, 2).intensity = -1;
234 kernel(2, 2).intensity = -1;
237 template <
typename Po
intT>
244 kernel(0, 0).intensity = 0;
245 kernel(1, 0).intensity = 1;
246 kernel(0, 1).intensity = -1;
247 kernel(1, 1).intensity = 0;
251 template <
typename Po
intT>
258 kernel(0, 0).intensity = -1;
259 kernel(1, 0).intensity = 0;
260 kernel(2, 0).intensity = 1;
264 template <
typename Po
intT>
271 kernel(0, 0).intensity = 0;
272 kernel(1, 0).intensity = -1;
273 kernel(2, 0).intensity = 1;
277 template <
typename Po
intT>
284 kernel(0, 0).intensity = -1;
285 kernel(1, 0).intensity = 1;
286 kernel(2, 0).intensity = 0;
290 template <
typename Po
intT>
297 kernel(0, 0).intensity = -1;
298 kernel(0, 1).intensity = 0;
299 kernel(0, 2).intensity = 1;
303 template <
typename Po
intT>
310 kernel(0, 0).intensity = 0;
311 kernel(0, 1).intensity = -1;
312 kernel(0, 2).intensity = 1;
316 template <
typename Po
intT>
323 kernel(0, 0).intensity = -1;
324 kernel(0, 1).intensity = 1;
325 kernel(0, 2).intensity = 0;
330 template <
typename Po
intT>
334 kernel_type_ = kernel_type;
338 template <
typename Po
intT>
342 kernel_size_ = kernel_size;
346 template <
typename Po
intT>
350 sigma_ = kernel_sigma;