1 #ifndef TIL_TENSOR_PRODUCT_INTERPOLATION_H 2 #define TIL_TENSOR_PRODUCT_INTERPOLATION_H 24 template < typename Interpolation, int TNNeighbors = InterpolationSampleSize<Interpolation>::value >
27 template <
typename Interpolation>
37 template <
class Extrapolator,
class TImage >
39 {
return Self::template computeUnsafe<Extrapolator>(im,
EXPAND_VECTOR(pos)); }
41 template <
class Extrapolator,
class TImage >
43 {
return Self::template compute<Extrapolator>(im,
EXPAND_VECTOR(pos)); }
45 template <
class Extrapolator,
class TImage >
53 dx = x - (i1 = floor(x)); i2 = i1+1;
54 dy = y - (j1 = floor(y)); j2 = j1+1;
55 dz = z - (k1 = floor(z)); k2 = k1+1;
58 iIm.setPos(i1, j1, k1);
60 assert(dx>=0); assert(dx<1);
61 assert(dy>=0); assert(dy<1);
62 assert(dz>=0); assert(dz<1);
65 Interpolation::template compute<t_interp>(
66 Interpolation::template compute<t_interp>(
67 Interpolation::template compute<t_interp>(
69 iIm.template getUnsafeValue<Extrapolator, +1, 0, 0>(), dx),
70 Interpolation::template compute<t_interp>(
71 iIm.template getUnsafeValue<Extrapolator, 0,+1, 0>(),
72 iIm.template getUnsafeValue<Extrapolator, +1,+1, 0>(), dx), dy),
73 Interpolation::template compute<t_interp>(
74 Interpolation::template compute<t_interp>(
75 iIm.template getUnsafeValue<Extrapolator, 0, 0,+1>(),
76 iIm.template getUnsafeValue<Extrapolator, +1, 0,+1>(), dx),
77 Interpolation::template compute<t_interp>(
78 iIm.template getUnsafeValue<Extrapolator, 0,+1,+1>(),
79 iIm.template getUnsafeValue<Extrapolator, +1,+1,+1>(), dx), dy), dz);
82 template <
class Extrapolator,
class TImage >
90 dx = x - (i1 = floor(x)); i2 = i1+1;
91 dy = y - (j1 = floor(y)); j2 = j1+1;
92 dz = z - (k1 = floor(z)); k2 = k1+1;
94 assert(dx>=0); assert(dx<1);
95 assert(dy>=0); assert(dy<1);
96 assert(dz>=0); assert(dz<1);
99 iIm.setPos(i1, j1, k1);
109 Interpolation::template compute<t_interp>(
110 Interpolation::template compute<t_interp>(
111 Interpolation::template compute<t_interp>(
113 iIm.template getValue<Extrapolator,+1, 0, 0>(), dx),
114 Interpolation::template compute<t_interp>(
115 iIm.template getValue<Extrapolator, 0,+1, 0>(),
116 iIm.template getValue<Extrapolator,+1,+1, 0>(), dx), dy),
117 Interpolation::template compute<t_interp>(
118 Interpolation::template compute<t_interp>(
119 iIm.template getValue<Extrapolator, 0, 0,+1>(),
120 iIm.template getValue<Extrapolator,+1, 0,+1>(), dx),
121 Interpolation::template compute<t_interp>(
122 iIm.template getValue<Extrapolator, 0,+1,+1>(),
123 iIm.template getValue<Extrapolator,+1,+1,+1>(), dx), dy), dz);
129 template <
typename Interpolation>
139 template <
class Extrapolator,
class TImage >
141 {
return Self::template computeUnsafe<Extrapolator>(im,
EXPAND_VECTOR(pos)); }
142 template <
class Extrapolator,
class TImage >
144 {
return Self::template compute<Extrapolator>(im,
EXPAND_VECTOR(pos)); }
146 template <
class Extrapolator,
class TImage >
156 dx = x - (i2 = floor(x)); Self::span(i2, i1, i3, i4);
157 dy = y - (j2 = floor(y)); Self::span(j2, j1, j3, j4);
158 dz = z - (k2 = floor(z)); Self::span(k2, k1, k3, k4);
160 assert(dx>=0); assert(dx<1);
161 assert(dy>=0); assert(dy<1);
162 assert(dz>=0); assert(dz<1);
165 iIm.setPos(i2, j2, k2);
168 return Interpolation::template compute<t_interp>(
169 Interpolation::template compute<t_interp>(
170 Interpolation::template compute<t_interp>(
171 iIm.template getUnsafeValue<Extrapolator,-1,-1,-1>(),
172 iIm.template getUnsafeValue<Extrapolator, 0,-1,-1>(),
173 iIm.template getUnsafeValue<Extrapolator,+1,-1,-1>(),
174 iIm.template getUnsafeValue<Extrapolator,+2,-1,-1>(), dx),
175 Interpolation::template compute<t_interp>(
176 iIm.template getUnsafeValue<Extrapolator,-1, 0,-1>(),
177 iIm.template getUnsafeValue<Extrapolator, 0, 0,-1>(),
178 iIm.template getUnsafeValue<Extrapolator,+1, 0,-1>(),
179 iIm.template getUnsafeValue<Extrapolator,+2, 0,-1>(), dx),
180 Interpolation::template compute<t_interp>(
181 iIm.template getUnsafeValue<Extrapolator,-1,+1,-1>(),
182 iIm.template getUnsafeValue<Extrapolator, 0,+1,-1>(),
183 iIm.template getUnsafeValue<Extrapolator,+1,+1,-1>(),
184 iIm.template getUnsafeValue<Extrapolator,+2,+1,-1>(), dx),
185 Interpolation::template compute<t_interp>(
186 iIm.template getUnsafeValue<Extrapolator,-1,+2,-1>(),
187 iIm.template getUnsafeValue<Extrapolator, 0,+2,-1>(),
188 iIm.template getUnsafeValue<Extrapolator,+1,+2,-1>(),
189 iIm.template getUnsafeValue<Extrapolator,+2,+2,-1>(), dx), dy),
190 Interpolation::template compute<t_interp>(
191 Interpolation::template compute<t_interp>(
192 iIm.template getUnsafeValue<Extrapolator,-1,-1, 0>(),
193 iIm.template getUnsafeValue<Extrapolator, 0,-1, 0>(),
194 iIm.template getUnsafeValue<Extrapolator,+1,-1, 0>(),
195 iIm.template getUnsafeValue<Extrapolator,+2,-1, 0>(), dx),
196 Interpolation::template compute<t_interp>(
197 iIm.template getUnsafeValue<Extrapolator,-1, 0, 0>(),
199 iIm.template getUnsafeValue<Extrapolator,+1, 0, 0>(),
200 iIm.template getUnsafeValue<Extrapolator,+2, 0, 0>(), dx),
201 Interpolation::template compute<t_interp>(
202 iIm.template getUnsafeValue<Extrapolator,-1,+1, 0>(),
203 iIm.template getUnsafeValue<Extrapolator, 0,+1, 0>(),
204 iIm.template getUnsafeValue<Extrapolator,+1,+1, 0>(),
205 iIm.template getUnsafeValue<Extrapolator,+2,+1, 0>(), dx),
206 Interpolation::template compute<t_interp>(
207 iIm.template getUnsafeValue<Extrapolator,-1,+2, 0>(),
208 iIm.template getUnsafeValue<Extrapolator, 0,+2, 0>(),
209 iIm.template getUnsafeValue<Extrapolator,+1,+2, 0>(),
210 iIm.template getUnsafeValue<Extrapolator,+2,+2, 0>(), dx), dy),
211 Interpolation::template compute<t_interp>(
212 Interpolation::template compute<t_interp>(
213 iIm.template getUnsafeValue<Extrapolator,-1,-1,+1>(),
214 iIm.template getUnsafeValue<Extrapolator, 0,-1,+1>(),
215 iIm.template getUnsafeValue<Extrapolator,+1,-1,+1>(),
216 iIm.template getUnsafeValue<Extrapolator,+2,-1,+1>(), dx),
217 Interpolation::template compute<t_interp>(
218 iIm.template getUnsafeValue<Extrapolator,-1, 0,+1>(),
219 iIm.template getUnsafeValue<Extrapolator, 0, 0,+1>(),
220 iIm.template getUnsafeValue<Extrapolator,+1, 0,+1>(),
221 iIm.template getUnsafeValue<Extrapolator,+2, 0,+1>(), dx),
222 Interpolation::template compute<t_interp>(
223 iIm.template getUnsafeValue<Extrapolator,-1,+1,+1>(),
224 iIm.template getUnsafeValue<Extrapolator, 0,+1,+1>(),
225 iIm.template getUnsafeValue<Extrapolator,+1,+1,+1>(),
226 iIm.template getUnsafeValue<Extrapolator,+2,+1,+1>(), dx),
227 Interpolation::template compute<t_interp>(
228 iIm.template getUnsafeValue<Extrapolator,-1,+2,+1>(),
229 iIm.template getUnsafeValue<Extrapolator, 0,+2,+1>(),
230 iIm.template getUnsafeValue<Extrapolator,+1,+2,+1>(),
231 iIm.template getUnsafeValue<Extrapolator,+2,+2,+1>(), dx), dy),
232 Interpolation::template compute<t_interp>(
233 Interpolation::template compute<t_interp>(
234 iIm.template getUnsafeValue<Extrapolator,-1,-1,+2>(),
235 iIm.template getUnsafeValue<Extrapolator, 0,-1,+2>(),
236 iIm.template getUnsafeValue<Extrapolator,+1,-1,+2>(),
237 iIm.template getUnsafeValue<Extrapolator,+2,-1,+2>(), dx),
238 Interpolation::template compute<t_interp>(
239 iIm.template getUnsafeValue<Extrapolator,-1, 0,+2>(),
240 iIm.template getUnsafeValue<Extrapolator, 0, 0,+2>(),
241 iIm.template getUnsafeValue<Extrapolator,+1, 0,+2>(),
242 iIm.template getUnsafeValue<Extrapolator,+2, 0,+2>(), dx),
243 Interpolation::template compute<t_interp>(
244 iIm.template getUnsafeValue<Extrapolator,-1,+1,+2>(),
245 iIm.template getUnsafeValue<Extrapolator, 0,+1,+2>(),
246 iIm.template getUnsafeValue<Extrapolator,+1,+1,+2>(),
247 iIm.template getUnsafeValue<Extrapolator,+2,+1,+2>(), dx),
248 Interpolation::template compute<t_interp>(
249 iIm.template getUnsafeValue<Extrapolator,-1,+2,+2>(),
250 iIm.template getUnsafeValue<Extrapolator, 0,+2,+2>(),
251 iIm.template getUnsafeValue<Extrapolator,+1,+2,+2>(),
252 iIm.template getUnsafeValue<Extrapolator,+2,+2,+2>(), dx), dy), dz);
255 template <
class Extrapolator,
class TImage >
265 dx = x - (i2 = (int)floor(x)); Self::span(i2, i1, i3, i4);
266 dy = y - (j2 = (int)floor(y)); Self::span(j2, j1, j3, j4);
267 dz = z - (k2 = (int)floor(z)); Self::span(k2, k1, k3, k4);
269 assert(dx>=0); assert(dx<1);
270 assert(dy>=0); assert(dy<1);
271 assert(dz>=0); assert(dz<1);
288 Interpolation::template compute<t_interp>(
289 Interpolation::template compute<t_interp>(
290 Interpolation::template compute<t_interp>(
291 iIm.template getValue<Extrapolator,-1,-1,-1>(),
292 iIm.template getValue<Extrapolator, 0,-1,-1>(),
293 iIm.template getValue<Extrapolator,+1,-1,-1>(),
294 iIm.template getValue<Extrapolator,+2,-1,-1>(), dx),
295 Interpolation::template compute<t_interp>(
296 iIm.template getValue<Extrapolator,-1, 0,-1>(),
297 iIm.template getValue<Extrapolator, 0, 0,-1>(),
298 iIm.template getValue<Extrapolator,+1, 0,-1>(),
299 iIm.template getValue<Extrapolator,+2, 0,-1>(), dx),
300 Interpolation::template compute<t_interp>(
301 iIm.template getValue<Extrapolator,-1,+1,-1>(),
302 iIm.template getValue<Extrapolator, 0,+1,-1>(),
303 iIm.template getValue<Extrapolator,+1,+1,-1>(),
304 iIm.template getValue<Extrapolator,+2,+1,-1>(), dx),
305 Interpolation::template compute<t_interp>(
306 iIm.template getValue<Extrapolator,-1,+2,-1>(),
307 iIm.template getValue<Extrapolator, 0,+2,-1>(),
308 iIm.template getValue<Extrapolator,+1,+2,-1>(),
309 iIm.template getValue<Extrapolator,+2,+2,-1>(), dx), dy),
310 Interpolation::template compute<t_interp>(
311 Interpolation::template compute<t_interp>(
312 iIm.template getValue<Extrapolator,-1,-1, 0>(),
313 iIm.template getValue<Extrapolator, 0,-1, 0>(),
314 iIm.template getValue<Extrapolator,+1,-1, 0>(),
315 iIm.template getValue<Extrapolator,+2,-1, 0>(), dx),
316 Interpolation::template compute<t_interp>(
317 iIm.template getValue<Extrapolator,-1, 0, 0>(),
319 iIm.template getValue<Extrapolator,+1, 0, 0>(),
320 iIm.template getValue<Extrapolator,+2, 0, 0>(), dx),
321 Interpolation::template compute<t_interp>(
322 iIm.template getValue<Extrapolator,-1,+1, 0>(),
323 iIm.template getValue<Extrapolator, 0,+1, 0>(),
324 iIm.template getValue<Extrapolator,+1,+1, 0>(),
325 iIm.template getValue<Extrapolator,+2,+1, 0>(), dx),
326 Interpolation::template compute<t_interp>(
327 iIm.template getValue<Extrapolator,-1,+2, 0>(),
328 iIm.template getValue<Extrapolator, 0,+2, 0>(),
329 iIm.template getValue<Extrapolator,+1,+2, 0>(),
330 iIm.template getValue<Extrapolator,+2,+2, 0>(), dx), dy),
331 Interpolation::template compute<t_interp>(
332 Interpolation::template compute<t_interp>(
333 iIm.template getValue<Extrapolator,-1,-1,+1>(),
334 iIm.template getValue<Extrapolator, 0,-1,+1>(),
335 iIm.template getValue<Extrapolator,+1,-1,+1>(),
336 iIm.template getValue<Extrapolator,+2,-1,+1>(), dx),
337 Interpolation::template compute<t_interp>(
338 iIm.template getValue<Extrapolator,-1, 0,+1>(),
339 iIm.template getValue<Extrapolator, 0, 0,+1>(),
340 iIm.template getValue<Extrapolator,+1, 0,+1>(),
341 iIm.template getValue<Extrapolator,+2, 0,+1>(), dx),
342 Interpolation::template compute<t_interp>(
343 iIm.template getValue<Extrapolator,-1,+1,+1>(),
344 iIm.template getValue<Extrapolator, 0,+1,+1>(),
345 iIm.template getValue<Extrapolator,+1,+1,+1>(),
346 iIm.template getValue<Extrapolator,+2,+1,+1>(), dx),
347 Interpolation::template compute<t_interp>(
348 iIm.template getValue<Extrapolator,-1,+2,+1>(),
349 iIm.template getValue<Extrapolator, 0,+2,+1>(),
350 iIm.template getValue<Extrapolator,+1,+2,+1>(),
351 iIm.template getValue<Extrapolator,+2,+2,+1>(), dx), dy),
352 Interpolation::template compute<t_interp>(
353 Interpolation::template compute<t_interp>(
354 iIm.template getValue<Extrapolator,-1,-1,+2>(),
355 iIm.template getValue<Extrapolator, 0,-1,+2>(),
356 iIm.template getValue<Extrapolator,+1,-1,+2>(),
357 iIm.template getValue<Extrapolator,+2,-1,+2>(), dx),
358 Interpolation::template compute<t_interp>(
359 iIm.template getValue<Extrapolator,-1, 0,+2>(),
360 iIm.template getValue<Extrapolator, 0, 0,+2>(),
361 iIm.template getValue<Extrapolator,+1, 0,+2>(),
362 iIm.template getValue<Extrapolator,+2, 0,+2>(), dx),
363 Interpolation::template compute<t_interp>(
364 iIm.template getValue<Extrapolator,-1,+1,+2>(),
365 iIm.template getValue<Extrapolator, 0,+1,+2>(),
366 iIm.template getValue<Extrapolator,+1,+1,+2>(),
367 iIm.template getValue<Extrapolator,+2,+1,+2>(), dx),
368 Interpolation::template compute<t_interp>(
369 iIm.template getValue<Extrapolator,-1,+2,+2>(),
370 iIm.template getValue<Extrapolator, 0,+2,+2>(),
371 iIm.template getValue<Extrapolator,+1,+2,+2>(),
372 iIm.template getValue<Extrapolator,+2,+2,+2>(), dx), dy), dz);
378 INLINE static void span(
int i2,
int &i1,
int &i3,
int &i4)
381 i4 = (i3 = i2 + 1) + 1;
385 template <
typename Interpolation>
395 template <
class TImage >
398 template <
class TImage >
402 template <
class TImage >
414 dx = x - (i3 = floor(x)); Self::span(i3, i1, i2, i4, i5, i6);
415 dy = y - (j3 = floor(y)); Self::span(j3, j1, j2, j4, j5, j6);
416 dz = z - (k3 = floor(z)); Self::span(k3, k1, k2, k4, k5, k6);
418 assert(dx>=0); assert(dx<1);
419 assert(dy>=0); assert(dy<1);
420 assert(dz>=0); assert(dz<1);
422 return Interpolation::template compute<t_interp>(
423 Interpolation::template compute<t_interp>(
424 Interpolation::template compute<t_interp>(
425 im.getUnsafeValue(i1,j1,k1),
426 im.getUnsafeValue(i2,j1,k1),
427 im.getUnsafeValue(i3,j1,k1),
428 im.getUnsafeValue(i4,j1,k1),
429 im.getUnsafeValue(i5,j1,k1),
430 im.getUnsafeValue(i6,j1,k1), dx),
431 Interpolation::template compute<t_interp>(
432 im.getUnsafeValue(i1,j2,k1),
433 im.getUnsafeValue(i2,j2,k1),
434 im.getUnsafeValue(i3,j2,k1),
435 im.getUnsafeValue(i4,j2,k1),
436 im.getUnsafeValue(i5,j2,k1),
437 im.getUnsafeValue(i6,j2,k1), dx),
438 Interpolation::template compute<t_interp>(
439 im.getUnsafeValue(i1,j3,k1),
440 im.getUnsafeValue(i2,j3,k1),
441 im.getUnsafeValue(i3,j3,k1),
442 im.getUnsafeValue(i4,j3,k1),
443 im.getUnsafeValue(i5,j3,k1),
444 im.getUnsafeValue(i6,j3,k1), dx),
445 Interpolation::template compute<t_interp>(
446 im.getUnsafeValue(i1,j4,k1),
447 im.getUnsafeValue(i2,j4,k1),
448 im.getUnsafeValue(i3,j4,k1),
449 im.getUnsafeValue(i4,j4,k1),
450 im.getUnsafeValue(i5,j4,k1),
451 im.getUnsafeValue(i6,j4,k1), dx),
452 Interpolation::template compute<t_interp>(
453 im.getUnsafeValue(i1,j5,k1),
454 im.getUnsafeValue(i2,j5,k1),
455 im.getUnsafeValue(i3,j5,k1),
456 im.getUnsafeValue(i4,j5,k1),
457 im.getUnsafeValue(i5,j5,k1),
458 im.getUnsafeValue(i6,j5,k1), dx),
459 Interpolation::template compute<t_interp>(
460 im.getUnsafeValue(i1,j6,k1),
461 im.getUnsafeValue(i2,j6,k1),
462 im.getUnsafeValue(i3,j6,k1),
463 im.getUnsafeValue(i4,j6,k1),
464 im.getUnsafeValue(i5,j6,k1),
465 im.getUnsafeValue(i6,j6,k1), dx), dy),
466 Interpolation::template compute<t_interp>(
467 Interpolation::template compute<t_interp>(
468 im.getUnsafeValue(i1,j1,k2),
469 im.getUnsafeValue(i2,j1,k2),
470 im.getUnsafeValue(i3,j1,k2),
471 im.getUnsafeValue(i4,j1,k2),
472 im.getUnsafeValue(i5,j1,k2),
473 im.getUnsafeValue(i6,j1,k2), dx),
474 Interpolation::template compute<t_interp>(
475 im.getUnsafeValue(i1,j2,k2),
476 im.getUnsafeValue(i2,j2,k2),
477 im.getUnsafeValue(i3,j2,k2),
478 im.getUnsafeValue(i4,j2,k2),
479 im.getUnsafeValue(i5,j2,k2),
480 im.getUnsafeValue(i6,j2,k2), dx),
481 Interpolation::template compute<t_interp>(
482 im.getUnsafeValue(i1,j3,k2),
483 im.getUnsafeValue(i2,j3,k2),
484 im.getUnsafeValue(i3,j3,k2),
485 im.getUnsafeValue(i4,j3,k2),
486 im.getUnsafeValue(i5,j3,k2),
487 im.getUnsafeValue(i6,j3,k2), dx),
488 Interpolation::template compute<t_interp>(
489 im.getUnsafeValue(i1,j4,k2),
490 im.getUnsafeValue(i2,j4,k2),
491 im.getUnsafeValue(i3,j4,k2),
492 im.getUnsafeValue(i4,j4,k2),
493 im.getUnsafeValue(i5,j4,k2),
494 im.getUnsafeValue(i6,j4,k2), dx),
495 Interpolation::template compute<t_interp>(
496 im.getUnsafeValue(i1,j5,k2),
497 im.getUnsafeValue(i2,j5,k2),
498 im.getUnsafeValue(i3,j5,k2),
499 im.getUnsafeValue(i4,j5,k2),
500 im.getUnsafeValue(i5,j5,k2),
501 im.getUnsafeValue(i6,j5,k2), dx),
502 Interpolation::template compute<t_interp>(
503 im.getUnsafeValue(i1,j6,k2),
504 im.getUnsafeValue(i2,j6,k2),
505 im.getUnsafeValue(i3,j6,k2),
506 im.getUnsafeValue(i4,j6,k2),
507 im.getUnsafeValue(i5,j6,k2),
508 im.getUnsafeValue(i6,j6,k2), dx), dy),
509 Interpolation::template compute<t_interp>(
510 Interpolation::template compute<t_interp>(
511 im.getUnsafeValue(i1,j1,k3),
512 im.getUnsafeValue(i2,j1,k3),
513 im.getUnsafeValue(i3,j1,k3),
514 im.getUnsafeValue(i4,j1,k3),
515 im.getUnsafeValue(i5,j1,k3),
516 im.getUnsafeValue(i6,j1,k3), dx),
517 Interpolation::template compute<t_interp>(
518 im.getUnsafeValue(i1,j2,k3),
519 im.getUnsafeValue(i2,j2,k3),
520 im.getUnsafeValue(i3,j2,k3),
521 im.getUnsafeValue(i4,j2,k3),
522 im.getUnsafeValue(i5,j2,k3),
523 im.getUnsafeValue(i6,j2,k3), dx),
524 Interpolation::template compute<t_interp>(
525 im.getUnsafeValue(i1,j3,k3),
526 im.getUnsafeValue(i2,j3,k3),
527 im.getUnsafeValue(i3,j3,k3),
528 im.getUnsafeValue(i4,j3,k3),
529 im.getUnsafeValue(i5,j3,k3),
530 im.getUnsafeValue(i6,j3,k3), dx),
531 Interpolation::template compute<t_interp>(
532 im.getUnsafeValue(i1,j4,k3),
533 im.getUnsafeValue(i2,j4,k3),
534 im.getUnsafeValue(i3,j4,k3),
535 im.getUnsafeValue(i4,j4,k3),
536 im.getUnsafeValue(i5,j4,k3),
537 im.getUnsafeValue(i6,j4,k3), dx),
538 Interpolation::template compute<t_interp>(
539 im.getUnsafeValue(i1,j5,k3),
540 im.getUnsafeValue(i2,j5,k3),
541 im.getUnsafeValue(i3,j5,k3),
542 im.getUnsafeValue(i4,j5,k3),
543 im.getUnsafeValue(i5,j5,k3),
544 im.getUnsafeValue(i6,j5,k3), dx),
545 Interpolation::template compute<t_interp>(
546 im.getUnsafeValue(i1,j6,k3),
547 im.getUnsafeValue(i2,j6,k3),
548 im.getUnsafeValue(i3,j6,k3),
549 im.getUnsafeValue(i4,j6,k3),
550 im.getUnsafeValue(i5,j6,k3),
551 im.getUnsafeValue(i6,j6,k3), dx), dy),
552 Interpolation::template compute<t_interp>(
553 Interpolation::template compute<t_interp>(
554 im.getUnsafeValue(i1,j1,k4),
555 im.getUnsafeValue(i2,j1,k4),
556 im.getUnsafeValue(i3,j1,k4),
557 im.getUnsafeValue(i4,j1,k4),
558 im.getUnsafeValue(i5,j1,k4),
559 im.getUnsafeValue(i6,j1,k4), dx),
560 Interpolation::template compute<t_interp>(
561 im.getUnsafeValue(i1,j2,k4),
562 im.getUnsafeValue(i2,j2,k4),
563 im.getUnsafeValue(i3,j2,k4),
564 im.getUnsafeValue(i4,j2,k4),
565 im.getUnsafeValue(i5,j2,k4),
566 im.getUnsafeValue(i6,j2,k4), dx),
567 Interpolation::template compute<t_interp>(
568 im.getUnsafeValue(i1,j3,k4),
569 im.getUnsafeValue(i2,j3,k4),
570 im.getUnsafeValue(i3,j3,k4),
571 im.getUnsafeValue(i4,j3,k4),
572 im.getUnsafeValue(i5,j3,k4),
573 im.getUnsafeValue(i6,j3,k4), dx),
574 Interpolation::template compute<t_interp>(
575 im.getUnsafeValue(i1,j4,k4),
576 im.getUnsafeValue(i2,j4,k4),
577 im.getUnsafeValue(i3,j4,k4),
578 im.getUnsafeValue(i4,j4,k4),
579 im.getUnsafeValue(i5,j4,k4),
580 im.getUnsafeValue(i6,j4,k4), dx),
581 Interpolation::template compute<t_interp>(
582 im.getUnsafeValue(i1,j5,k4),
583 im.getUnsafeValue(i2,j5,k4),
584 im.getUnsafeValue(i3,j5,k4),
585 im.getUnsafeValue(i4,j5,k4),
586 im.getUnsafeValue(i5,j5,k4),
587 im.getUnsafeValue(i6,j5,k4), dx),
588 Interpolation::template compute<t_interp>(
589 im.getUnsafeValue(i1,j6,k4),
590 im.getUnsafeValue(i2,j6,k4),
591 im.getUnsafeValue(i3,j6,k4),
592 im.getUnsafeValue(i4,j6,k4),
593 im.getUnsafeValue(i5,j6,k4),
594 im.getUnsafeValue(i6,j6,k4), dx), dy),
595 Interpolation::template compute<t_interp>(
596 Interpolation::template compute<t_interp>(
597 im.getUnsafeValue(i1,j1,k5),
598 im.getUnsafeValue(i2,j1,k5),
599 im.getUnsafeValue(i3,j1,k5),
600 im.getUnsafeValue(i4,j1,k5),
601 im.getUnsafeValue(i5,j1,k5),
602 im.getUnsafeValue(i6,j1,k5), dx),
603 Interpolation::template compute<t_interp>(
604 im.getUnsafeValue(i1,j2,k5),
605 im.getUnsafeValue(i2,j2,k5),
606 im.getUnsafeValue(i3,j2,k5),
607 im.getUnsafeValue(i4,j2,k5),
608 im.getUnsafeValue(i5,j2,k5),
609 im.getUnsafeValue(i6,j2,k5), dx),
610 Interpolation::template compute<t_interp>(
611 im.getUnsafeValue(i1,j3,k5),
612 im.getUnsafeValue(i2,j3,k5),
613 im.getUnsafeValue(i3,j3,k5),
614 im.getUnsafeValue(i4,j3,k5),
615 im.getUnsafeValue(i5,j3,k5),
616 im.getUnsafeValue(i6,j3,k5), dx),
617 Interpolation::template compute<t_interp>(
618 im.getUnsafeValue(i1,j4,k5),
619 im.getUnsafeValue(i2,j4,k5),
620 im.getUnsafeValue(i3,j4,k5),
621 im.getUnsafeValue(i4,j4,k5),
622 im.getUnsafeValue(i5,j4,k5),
623 im.getUnsafeValue(i6,j4,k5), dx),
624 Interpolation::template compute<t_interp>(
625 im.getUnsafeValue(i1,j5,k5),
626 im.getUnsafeValue(i2,j5,k5),
627 im.getUnsafeValue(i3,j5,k5),
628 im.getUnsafeValue(i4,j5,k5),
629 im.getUnsafeValue(i5,j5,k5),
630 im.getUnsafeValue(i6,j5,k5), dx),
631 Interpolation::template compute<t_interp>(
632 im.getUnsafeValue(i1,j6,k5),
633 im.getUnsafeValue(i2,j6,k5),
634 im.getUnsafeValue(i3,j6,k5),
635 im.getUnsafeValue(i4,j6,k5),
636 im.getUnsafeValue(i5,j6,k5),
637 im.getUnsafeValue(i6,j6,k5), dx), dy),
638 Interpolation::template compute<t_interp>(
639 Interpolation::template compute<t_interp>(
640 im.getUnsafeValue(i1,j1,k6),
641 im.getUnsafeValue(i2,j1,k6),
642 im.getUnsafeValue(i3,j1,k6),
643 im.getUnsafeValue(i4,j1,k6),
644 im.getUnsafeValue(i5,j1,k6),
645 im.getUnsafeValue(i6,j1,k6), dx),
646 Interpolation::template compute<t_interp>(
647 im.getUnsafeValue(i1,j2,k6),
648 im.getUnsafeValue(i2,j2,k6),
649 im.getUnsafeValue(i3,j2,k6),
650 im.getUnsafeValue(i4,j2,k6),
651 im.getUnsafeValue(i5,j2,k6),
652 im.getUnsafeValue(i6,j2,k6), dx),
653 Interpolation::template compute<t_interp>(
654 im.getUnsafeValue(i1,j3,k6),
655 im.getUnsafeValue(i2,j3,k6),
656 im.getUnsafeValue(i3,j3,k6),
657 im.getUnsafeValue(i4,j3,k6),
658 im.getUnsafeValue(i5,j3,k6),
659 im.getUnsafeValue(i6,j3,k6), dx),
660 Interpolation::template compute<t_interp>(
661 im.getUnsafeValue(i1,j4,k6),
662 im.getUnsafeValue(i2,j4,k6),
663 im.getUnsafeValue(i3,j4,k6),
664 im.getUnsafeValue(i4,j4,k6),
665 im.getUnsafeValue(i5,j4,k6),
666 im.getUnsafeValue(i6,j4,k6), dx),
667 Interpolation::template compute<t_interp>(
668 im.getUnsafeValue(i1,j5,k6),
669 im.getUnsafeValue(i2,j5,k6),
670 im.getUnsafeValue(i3,j5,k6),
671 im.getUnsafeValue(i4,j5,k6),
672 im.getUnsafeValue(i5,j5,k6),
673 im.getUnsafeValue(i6,j5,k6), dx),
674 Interpolation::template compute<t_interp>(
675 im.getUnsafeValue(i1,j6,k6),
676 im.getUnsafeValue(i2,j6,k6),
677 im.getUnsafeValue(i3,j6,k6),
678 im.getUnsafeValue(i4,j6,k6),
679 im.getUnsafeValue(i5,j6,k6),
680 im.getUnsafeValue(i6,j6,k6), dx), dy), dz);
683 template <
class TImage >
695 dx = x - (i3 = floor(x)); Self::span(i3, i1, i2, i4, i5, i6);
696 dy = y - (j3 = floor(y)); Self::span(j3, j1, j2, j4, j5, j6);
697 dz = z - (k3 = floor(z)); Self::span(k3, k1, k2, k4, k5, k6);
699 assert(dx>=0); assert(dx<1);
700 assert(dy>=0); assert(dy<1);
701 assert(dz>=0); assert(dz<1);
718 return Interpolation::template compute<t_interp>(
719 Interpolation::template compute<t_interp>(
720 Interpolation::template compute<t_interp>(
721 im.getValue(i1,j1,k1),
722 im.getValue(i2,j1,k1),
723 im.getValue(i3,j1,k1),
724 im.getValue(i4,j1,k1),
725 im.getValue(i5,j1,k1),
726 im.getValue(i6,j1,k1), dx),
727 Interpolation::template compute<t_interp>(
728 im.getValue(i1,j2,k1),
729 im.getValue(i2,j2,k1),
730 im.getValue(i3,j2,k1),
731 im.getValue(i4,j2,k1),
732 im.getValue(i5,j2,k1),
733 im.getValue(i6,j2,k1), dx),
734 Interpolation::template compute<t_interp>(
735 im.getValue(i1,j3,k1),
736 im.getValue(i2,j3,k1),
737 im.getValue(i3,j3,k1),
738 im.getValue(i4,j3,k1),
739 im.getValue(i5,j3,k1),
740 im.getValue(i6,j3,k1), dx),
741 Interpolation::template compute<t_interp>(
742 im.getValue(i1,j4,k1),
743 im.getValue(i2,j4,k1),
744 im.getValue(i3,j4,k1),
745 im.getValue(i4,j4,k1),
746 im.getValue(i5,j4,k1),
747 im.getValue(i6,j4,k1), dx),
748 Interpolation::template compute<t_interp>(
749 im.getValue(i1,j5,k1),
750 im.getValue(i2,j5,k1),
751 im.getValue(i3,j5,k1),
752 im.getValue(i4,j5,k1),
753 im.getValue(i5,j5,k1),
754 im.getValue(i6,j5,k1), dx),
755 Interpolation::template compute<t_interp>(
756 im.getValue(i1,j6,k1),
757 im.getValue(i2,j6,k1),
758 im.getValue(i3,j6,k1),
759 im.getValue(i4,j6,k1),
760 im.getValue(i5,j6,k1),
761 im.getValue(i6,j6,k1), dx), dy),
762 Interpolation::template compute<t_interp>(
763 Interpolation::template compute<t_interp>(
764 im.getValue(i1,j1,k2),
765 im.getValue(i2,j1,k2),
766 im.getValue(i3,j1,k2),
767 im.getValue(i4,j1,k2),
768 im.getValue(i5,j1,k2),
769 im.getValue(i6,j1,k2), dx),
770 Interpolation::template compute<t_interp>(
771 im.getValue(i1,j2,k2),
772 im.getValue(i2,j2,k2),
773 im.getValue(i3,j2,k2),
774 im.getValue(i4,j2,k2),
775 im.getValue(i5,j2,k2),
776 im.getValue(i6,j2,k2), dx),
777 Interpolation::template compute<t_interp>(
778 im.getValue(i1,j3,k2),
779 im.getValue(i2,j3,k2),
780 im.getValue(i3,j3,k2),
781 im.getValue(i4,j3,k2),
782 im.getValue(i5,j3,k2),
783 im.getValue(i6,j3,k2), dx),
784 Interpolation::template compute<t_interp>(
785 im.getValue(i1,j4,k2),
786 im.getValue(i2,j4,k2),
787 im.getValue(i3,j4,k2),
788 im.getValue(i4,j4,k2),
789 im.getValue(i5,j4,k2),
790 im.getValue(i6,j4,k2), dx),
791 Interpolation::template compute<t_interp>(
792 im.getValue(i1,j5,k2),
793 im.getValue(i2,j5,k2),
794 im.getValue(i3,j5,k2),
795 im.getValue(i4,j5,k2),
796 im.getValue(i5,j5,k2),
797 im.getValue(i6,j5,k2), dx),
798 Interpolation::template compute<t_interp>(
799 im.getValue(i1,j6,k2),
800 im.getValue(i2,j6,k2),
801 im.getValue(i3,j6,k2),
802 im.getValue(i4,j6,k2),
803 im.getValue(i5,j6,k2),
804 im.getValue(i6,j6,k2), dx), dy),
805 Interpolation::template compute<t_interp>(
806 Interpolation::template compute<t_interp>(
807 im.getValue(i1,j1,k3),
808 im.getValue(i2,j1,k3),
809 im.getValue(i3,j1,k3),
810 im.getValue(i4,j1,k3),
811 im.getValue(i5,j1,k3),
812 im.getValue(i6,j1,k3), dx),
813 Interpolation::template compute<t_interp>(
814 im.getValue(i1,j2,k3),
815 im.getValue(i2,j2,k3),
816 im.getValue(i3,j2,k3),
817 im.getValue(i4,j2,k3),
818 im.getValue(i5,j2,k3),
819 im.getValue(i6,j2,k3), dx),
820 Interpolation::template compute<t_interp>(
821 im.getValue(i1,j3,k3),
822 im.getValue(i2,j3,k3),
823 im.getValue(i3,j3,k3),
824 im.getValue(i4,j3,k3),
825 im.getValue(i5,j3,k3),
826 im.getValue(i6,j3,k3), dx),
827 Interpolation::template compute<t_interp>(
828 im.getValue(i1,j4,k3),
829 im.getValue(i2,j4,k3),
830 im.getValue(i3,j4,k3),
831 im.getValue(i4,j4,k3),
832 im.getValue(i5,j4,k3),
833 im.getValue(i6,j4,k3), dx),
834 Interpolation::template compute<t_interp>(
835 im.getValue(i1,j5,k3),
836 im.getValue(i2,j5,k3),
837 im.getValue(i3,j5,k3),
838 im.getValue(i4,j5,k3),
839 im.getValue(i5,j5,k3),
840 im.getValue(i6,j5,k3), dx),
841 Interpolation::template compute<t_interp>(
842 im.getValue(i1,j6,k3),
843 im.getValue(i2,j6,k3),
844 im.getValue(i3,j6,k3),
845 im.getValue(i4,j6,k3),
846 im.getValue(i5,j6,k3),
847 im.getValue(i6,j6,k3), dx), dy),
848 Interpolation::template compute<t_interp>(
849 Interpolation::template compute<t_interp>(
850 im.getValue(i1,j1,k4),
851 im.getValue(i2,j1,k4),
852 im.getValue(i3,j1,k4),
853 im.getValue(i4,j1,k4),
854 im.getValue(i5,j1,k4),
855 im.getValue(i6,j1,k4), dx),
856 Interpolation::template compute<t_interp>(
857 im.getValue(i1,j2,k4),
858 im.getValue(i2,j2,k4),
859 im.getValue(i3,j2,k4),
860 im.getValue(i4,j2,k4),
861 im.getValue(i5,j2,k4),
862 im.getValue(i6,j2,k4), dx),
863 Interpolation::template compute<t_interp>(
864 im.getValue(i1,j3,k4),
865 im.getValue(i2,j3,k4),
866 im.getValue(i3,j3,k4),
867 im.getValue(i4,j3,k4),
868 im.getValue(i5,j3,k4),
869 im.getValue(i6,j3,k4), dx),
870 Interpolation::template compute<t_interp>(
871 im.getValue(i1,j4,k4),
872 im.getValue(i2,j4,k4),
873 im.getValue(i3,j4,k4),
874 im.getValue(i4,j4,k4),
875 im.getValue(i5,j4,k4),
876 im.getValue(i6,j4,k4), dx),
877 Interpolation::template compute<t_interp>(
878 im.getValue(i1,j5,k4),
879 im.getValue(i2,j5,k4),
880 im.getValue(i3,j5,k4),
881 im.getValue(i4,j5,k4),
882 im.getValue(i5,j5,k4),
883 im.getValue(i6,j5,k4), dx),
884 Interpolation::template compute<t_interp>(
885 im.getValue(i1,j6,k4),
886 im.getValue(i2,j6,k4),
887 im.getValue(i3,j6,k4),
888 im.getValue(i4,j6,k4),
889 im.getValue(i5,j6,k4),
890 im.getValue(i6,j6,k4), dx), dy),
891 Interpolation::template compute<t_interp>(
892 Interpolation::template compute<t_interp>(
893 im.getValue(i1,j1,k5),
894 im.getValue(i2,j1,k5),
895 im.getValue(i3,j1,k5),
896 im.getValue(i4,j1,k5),
897 im.getValue(i5,j1,k5),
898 im.getValue(i6,j1,k5), dx),
899 Interpolation::template compute<t_interp>(
900 im.getValue(i1,j2,k5),
901 im.getValue(i2,j2,k5),
902 im.getValue(i3,j2,k5),
903 im.getValue(i4,j2,k5),
904 im.getValue(i5,j2,k5),
905 im.getValue(i6,j2,k5), dx),
906 Interpolation::template compute<t_interp>(
907 im.getValue(i1,j3,k5),
908 im.getValue(i2,j3,k5),
909 im.getValue(i3,j3,k5),
910 im.getValue(i4,j3,k5),
911 im.getValue(i5,j3,k5),
912 im.getValue(i6,j3,k5), dx),
913 Interpolation::template compute<t_interp>(
914 im.getValue(i1,j4,k5),
915 im.getValue(i2,j4,k5),
916 im.getValue(i3,j4,k5),
917 im.getValue(i4,j4,k5),
918 im.getValue(i5,j4,k5),
919 im.getValue(i6,j4,k5), dx),
920 Interpolation::template compute<t_interp>(
921 im.getValue(i1,j5,k5),
922 im.getValue(i2,j5,k5),
923 im.getValue(i3,j5,k5),
924 im.getValue(i4,j5,k5),
925 im.getValue(i5,j5,k5),
926 im.getValue(i6,j5,k5), dx),
927 Interpolation::template compute<t_interp>(
928 im.getValue(i1,j6,k5),
929 im.getValue(i2,j6,k5),
930 im.getValue(i3,j6,k5),
931 im.getValue(i4,j6,k5),
932 im.getValue(i5,j6,k5),
933 im.getValue(i6,j6,k5), dx), dy),
934 Interpolation::template compute<t_interp>(
935 Interpolation::template compute<t_interp>(
936 im.getValue(i1,j1,k6),
937 im.getValue(i2,j1,k6),
938 im.getValue(i3,j1,k6),
939 im.getValue(i4,j1,k6),
940 im.getValue(i5,j1,k6),
941 im.getValue(i6,j1,k6), dx),
942 Interpolation::template compute<t_interp>(
943 im.getValue(i1,j2,k6),
944 im.getValue(i2,j2,k6),
945 im.getValue(i3,j2,k6),
946 im.getValue(i4,j2,k6),
947 im.getValue(i5,j2,k6),
948 im.getValue(i6,j2,k6), dx),
949 Interpolation::template compute<t_interp>(
950 im.getValue(i1,j3,k6),
951 im.getValue(i2,j3,k6),
952 im.getValue(i3,j3,k6),
953 im.getValue(i4,j3,k6),
954 im.getValue(i5,j3,k6),
955 im.getValue(i6,j3,k6), dx),
956 Interpolation::template compute<t_interp>(
957 im.getValue(i1,j4,k6),
958 im.getValue(i2,j4,k6),
959 im.getValue(i3,j4,k6),
960 im.getValue(i4,j4,k6),
961 im.getValue(i5,j4,k6),
962 im.getValue(i6,j4,k6), dx),
963 Interpolation::template compute<t_interp>(
964 im.getValue(i1,j5,k6),
965 im.getValue(i2,j5,k6),
966 im.getValue(i3,j5,k6),
967 im.getValue(i4,j5,k6),
968 im.getValue(i5,j5,k6),
969 im.getValue(i6,j5,k6), dx),
970 Interpolation::template compute<t_interp>(
971 im.getValue(i1,j6,k6),
972 im.getValue(i2,j6,k6),
973 im.getValue(i3,j6,k6),
974 im.getValue(i4,j6,k6),
975 im.getValue(i5,j6,k6),
976 im.getValue(i6,j6,k6), dx), dy), dz);
982 INLINE static void span(
int i3,
int &i1,
int &i2,
int &i4,
int &i5,
int &i6)
984 i1 = (i2 = i3 - 1) - 1;
985 i6 = (i5 = (i4 = i3 + 1) + 1) +1;
A trait class to assign iterators to image types.
static INLINE t_interp compute(const TImage &im, const numeric_array< t_interp, 3 > &pos)
static INLINE t_interp compute(const TImage &im, t_interp x, t_interp y, t_interp z)
static INLINE t_interp compute(const TImage &im, t_interp x, t_interp y, t_interp z)
Belongs to package Box Do not include directly, include til/Box.h instead.
static INLINE t_interp computeUnsafe(const TImage &im, const numeric_array< t_interp, 3 > &pos)
General macros, definitions and functions.
static INLINE t_interp computeUnsafe(const TImage &im, t_interp x, t_interp y, t_interp z)
static INLINE t_interp computeUnsafe(const TImage &im, const numeric_array< t_interp, 3 > &pos)
TensorProductInterpolation< Interpolation, 6 > Self
This file contains forward declarations of classes defined in the TIL library.
static INLINE t_interp computeUnsafe(const TImage &im, const numeric_array< t_interp, 3 > &pos)
TensorProductInterpolation< Interpolation, 4 > Self
static INLINE t_interp compute(const TImage &im, const numeric_array< t_interp, 3 > &pos)
static INLINE t_interp computeUnsafe(const TImage &im, t_interp x, t_interp y, t_interp z)
static INLINE t_interp compute(const TImage &im, const numeric_array< t_interp, 3 > &pos)
static INLINE t_interp compute(const TImage &im, t_interp x, t_interp y, t_interp z)
TensorProductInterpolation< Interpolation, 2 > Self
static INLINE t_interp computeUnsafe(const TImage &im, t_interp x, t_interp y, t_interp z)