40 #include <pcl/2d/kernel.h>
44 template <
typename Po
intT>
48 switch (kernel_type_) {
70 case DERIVATIVE_CENTRAL_X:
71 derivativeXCentralKernel(
kernel);
73 case DERIVATIVE_FORWARD_X:
74 derivativeXForwardKernel(
kernel);
76 case DERIVATIVE_BACKWARD_X:
77 derivativeXBackwardKernel(
kernel);
79 case DERIVATIVE_CENTRAL_Y:
80 derivativeYCentralKernel(
kernel);
82 case DERIVATIVE_FORWARD_Y:
83 derivativeYForwardKernel(
kernel);
85 case DERIVATIVE_BACKWARD_Y:
86 derivativeYBackwardKernel(
kernel);
94 template <
typename Po
intT>
99 kernel.resize(kernel_size_ * kernel_size_);
100 kernel.height = kernel_size_;
101 kernel.width = kernel_size_;
103 double sigma_sqr = 2 * sigma_ * sigma_;
105 for (
int i = 0; i < kernel_size_; i++) {
106 for (
int j = 0; j < kernel_size_; j++) {
107 int iks = (i - kernel_size_ / 2);
108 int jks = (j - kernel_size_ / 2);
110 std::exp(
float(-
double(iks * iks + jks * jks) / sigma_sqr));
111 sum += float(
kernel(j, i).intensity);
116 for (std::size_t i = 0; i <
kernel.size(); ++i)
117 kernel[i].intensity /= sum;
120 template <
typename Po
intT>
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++) {
132 for (
int j = 0; j < kernel_size_; j++) {
133 int iks = (i - kernel_size_ / 2);
134 int jks = (j - kernel_size_ / 2);
135 float temp = float(
double(iks * iks + jks * jks) / sigma_sqr);
136 kernel(j, i).intensity = (1.0f - temp) * std::exp(-temp);
137 sum +=
kernel(j, i).intensity;
142 for (std::size_t i = 0; i <
kernel.size(); ++i)
143 kernel[i].intensity /= sum;
146 template <
typename Po
intT>
153 kernel(0, 0).intensity = -1;
154 kernel(1, 0).intensity = 0;
155 kernel(2, 0).intensity = 1;
156 kernel(0, 1).intensity = -2;
157 kernel(1, 1).intensity = 0;
158 kernel(2, 1).intensity = 2;
159 kernel(0, 2).intensity = -1;
160 kernel(1, 2).intensity = 0;
161 kernel(2, 2).intensity = 1;
164 template <
typename Po
intT>
171 kernel(0, 0).intensity = -1;
172 kernel(1, 0).intensity = 0;
173 kernel(2, 0).intensity = 1;
174 kernel(0, 1).intensity = -1;
175 kernel(1, 1).intensity = 0;
176 kernel(2, 1).intensity = 1;
177 kernel(0, 2).intensity = -1;
178 kernel(1, 2).intensity = 0;
179 kernel(2, 2).intensity = 1;
182 template <
typename Po
intT>
189 kernel(0, 0).intensity = 1;
190 kernel(1, 0).intensity = 0;
191 kernel(0, 1).intensity = 0;
192 kernel(1, 1).intensity = -1;
195 template <
typename Po
intT>
202 kernel(0, 0).intensity = -1;
203 kernel(1, 0).intensity = -2;
204 kernel(2, 0).intensity = -1;
205 kernel(0, 1).intensity = 0;
206 kernel(1, 1).intensity = 0;
207 kernel(2, 1).intensity = 0;
208 kernel(0, 2).intensity = 1;
209 kernel(1, 2).intensity = 2;
210 kernel(2, 2).intensity = 1;
213 template <
typename Po
intT>
220 kernel(0, 0).intensity = 1;
221 kernel(1, 0).intensity = 1;
222 kernel(2, 0).intensity = 1;
223 kernel(0, 1).intensity = 0;
224 kernel(1, 1).intensity = 0;
225 kernel(2, 1).intensity = 0;
226 kernel(0, 2).intensity = -1;
227 kernel(1, 2).intensity = -1;
228 kernel(2, 2).intensity = -1;
231 template <
typename Po
intT>
238 kernel(0, 0).intensity = 0;
239 kernel(1, 0).intensity = 1;
240 kernel(0, 1).intensity = -1;
241 kernel(1, 1).intensity = 0;
244 template <
typename Po
intT>
251 kernel(0, 0).intensity = -1;
252 kernel(1, 0).intensity = 0;
253 kernel(2, 0).intensity = 1;
256 template <
typename Po
intT>
263 kernel(0, 0).intensity = 0;
264 kernel(1, 0).intensity = -1;
265 kernel(2, 0).intensity = 1;
268 template <
typename Po
intT>
275 kernel(0, 0).intensity = -1;
276 kernel(1, 0).intensity = 1;
277 kernel(2, 0).intensity = 0;
280 template <
typename Po
intT>
287 kernel(0, 0).intensity = -1;
288 kernel(0, 1).intensity = 0;
289 kernel(0, 2).intensity = 1;
292 template <
typename Po
intT>
299 kernel(0, 0).intensity = 0;
300 kernel(0, 1).intensity = -1;
301 kernel(0, 2).intensity = 1;
304 template <
typename Po
intT>
311 kernel(0, 0).intensity = -1;
312 kernel(0, 1).intensity = 1;
313 kernel(0, 2).intensity = 0;
316 template <
typename Po
intT>
320 kernel_type_ = kernel_type;
323 template <
typename Po
intT>
327 kernel_size_ = kernel_size;
330 template <
typename Po
intT>
334 sigma_ = kernel_sigma;