[vspline] 05/72: Factored out most of the prefiltering code to filter.h I noticed that the prefiltering code which was initially in prefilter.h was very close to a general routine performing the type of filter needed for b-spline prefiltering. So I factored it out into filter.h, which does not have any code specific to b-splines and implemented the b-spline-specific routines in prefilter.h as thin wrappers of the top-level function in filter.h. at the same time, I restructured the code so that it's as similar as possible for the vectorized and unverctorized code, and uses line buffering for the unvectorized code to speed up unvectorized operation. With the modifications made in the past week or so, I now have prefiltering times down to under 10ms per full HD float RGB image (vectorized), and roughly the same for lower-order splines not using vector code.

Kay F. Jahnke kfj-guest at moszumanska.debian.org
Sun Jul 2 09:02:37 UTC 2017


This is an automated email from the git hooks/post-receive script.

kfj-guest pushed a commit to branch master
in repository vspline.

commit bec223f49a1be47d31aab1d5062fe44932b2e9ec
Author: Kay F. Jahnke <kfjahnke at gmail.com>
Date:   Mon Oct 24 10:39:00 2016 +0200

    Factored out most of the prefiltering code to filter.h
    I noticed that the prefiltering code which was initially in prefilter.h
    was very close to a general routine performing the type of filter needed
    for b-spline prefiltering. So I factored it out into filter.h, which does
    not have any code specific to b-splines and implemented the b-spline-specific
    routines in prefilter.h as thin wrappers of the top-level function in
    filter.h.
    at the same time, I restructured the code so that it's as similar as possible
    for the vectorized and unverctorized code, and uses line buffering for the
    unvectorized code to speed up unvectorized operation.
    With the modifications made in the past week or so, I now have prefiltering
    times down to under 10ms per full HD float RGB image (vectorized), and
    roughly the same for lower-order splines not using vector code.
---
 README.rst              |   43 +-
 bspline.h               |   18 +-
 common.h                |   11 +-
 example/pano_extract.cc |    3 +-
 example/roundtrip.cc    |    3 +-
 example/times.txt       | 4407 +++++++----------------------------------------
 prefilter.h => filter.h | 1024 ++++++-----
 prefilter.h             | 1279 +-------------
 8 files changed, 1207 insertions(+), 5581 deletions(-)

diff --git a/README.rst b/README.rst
index 042ca97..4e4b6df 100644
--- a/README.rst
+++ b/README.rst
@@ -97,28 +97,43 @@ Speed
 While performance will vary widely from system to system and between different compiles, I'll quote some measurements from my own system. I include benchmarking code (roundtrip.cc in the examples folder). Here are some measurements done with "roundtrip", working on a full HD (1920*1080) RGB image, using single precision floats internally - the figures are averages of ten runs:
 
 testing bc code MIRROR spline degree 3
-avg 10 x prefilter:........................ 15.200000 ms
-avg 10 x remap1 from pre-split coordinates: 70.500000 ms
-avg 10 x remap1 from unsplit coordinates:.. 75.000000 ms
-avg 10 x remap with internal spline:....... 110.300000 ms
-avg 10 x remap with functor & internal bspl 111.500000 ms
-avg 10 x remap with functor & external bspl 70.900000 ms
+
+avg 10 x prefilter:........................ 13.500000 ms
+
+avg 10 x remap1 from pre-split coordinates: 62.599998 ms
+
+avg 10 x remap1 from unsplit coordinates:.. 69.099998 ms
+
+avg 10 x remap with internal spline:....... 88.199997 ms
+
+avg 10 x remap with functor & internal bspl 90.599998 ms
+
+avg 10 x remap with functor & external bspl 70.500000 ms
+
 
 testing bc code MIRROR spline degree 3 using Vc
-avg 10 x prefilter:........................ 13.000000 ms
-avg 10 x remap1 from pre-split coordinates: 24.900000 ms
-avg 10 x remap1 from unsplit coordinates:.. 31.600000 ms
-avg 10 x remap with internal spline:....... 51.900000 ms
-avg 10 x remap with functor & internal bspl 51.800000 ms
-avg 10 x remap with functor & external bspl 31.400000 ms
+
+avg 10 x prefilter:........................ 9.600000 ms
+
+avg 10 x remap1 from pre-split coordinates: 20.000000 ms
+
+avg 10 x remap1 from unsplit coordinates:.. 21.299999 ms
+
+avg 10 x remap with internal spline:....... 37.000000 ms
+
+avg 10 x remap with functor & internal bspl 37.599998 ms
+
+avg 10 x remap with functor & external bspl 21.700001 ms
 
 As can be seen from these test results, using Vc on my system speeds evaluation up a good deal. When it comes to prefiltering, a lot of time is spent buffering data to make them available for fast vector processing. The time spent on actual calculations is much less. Therefore prefiltering for higer-degree splines doesn't take much more time (when using Vc):
 
 testing bc code MIRROR spline degree 5 using Vc
-avg 10 x prefilter:........................ 14.000000 ms
+
+avg 10 x prefilter:........................ 11.000000 ms
 
 testing bc code MIRROR spline degree 7 using Vc
-avg 10 x prefilter:........................ 15.300000 ms
+
+avg 10 x prefilter:........................ 12.700000 ms
 
 Using double precision arithmetics, vectorization doesn't help so much, and prefiltering is actually slower on my system when using Vc. Doing a complete roundtrip run on your system should give you an idea about which mode of operation best suits your needs.
 
diff --git a/bspline.h b/bspline.h
index b6d2e29..ce5c4e8 100644
--- a/bspline.h
+++ b/bspline.h
@@ -412,8 +412,10 @@ public:
 
     bracer<view_type> br ;
 
-    // for the explicit schemes, we use bc code IGNORE
-    bcv_type explicit_bcv ( IGNORE ) ;
+    // KFJ 2016-10-22 changed this code from using zero-padding as explicit_bcv
+    // to using an assumed constant continuation, which produces less of a discontinuity.
+    // for the explicit schemes, we use bc code CONSTANT
+    bcv_type explicit_bcv ( CONSTANT ) ;
 
     switch ( strategy )
     {
@@ -439,8 +441,14 @@ public:
           br ( coeffs , bcv[d] , spline_degree , d ) ;
         break ;
       case EXPLICIT:
-        // apply bracing with BC codes passed in, then solve with BC code IGNORE
+        // apply bracing with BC codes passed in, then solve with BC code CONSTANT
         // this automatically fills the brace, as well, since it's part of the frame.
+        // TODO: the values in the frame will not come out precisely the same as they
+        // would by filling the brace after the coefficients have been calculated.
+        // The difference will be larger towards the margin of the frame, and we assume
+        // that due to the small support of the evaluation the differences near the
+        // margin of the core data will be negligibla, having picked a sufficiently
+        // large frame size. This is debatable.
         for ( int d = 0 ; d < dimension ; d++ )
           br.apply ( container , bcv[d] , left_frame[d] , right_frame[d] , d ) ;
         solve ( container ,
@@ -452,8 +460,8 @@ public:
         break ;
       case MANUAL:
         // like EXPLICIT, but don't apply a frame, assume a frame was applied
-        // by external code. process whole container with IGNORE BC. For cases
-        // where the frame can't be costructed by applying any of the stock bracing
+        // by external code. process whole container with CONSTANT BC. For cases
+        // where the frame can't be constructed by applying any of the stock bracing
         // modes. Note that if any data were passed into this routine, in this case
         // they will be silently ignored (makes no sense overwriting the core after
         // having manually framed it in some way)
diff --git a/common.h b/common.h
index 2652841..b2557b6 100644
--- a/common.h
+++ b/common.h
@@ -259,16 +259,23 @@ struct divide_and_conquer
   {
     if ( nthreads > 1 )
     {
-      // we split the result array into equal chunks
+      // we split the array into equal chunks
       // to process them by one thread each
 
       std::vector<view_type> dn ; // space for chunks
       nthreads = split_array_to_chunks <view_type> ( data , dn , nthreads , forbid ) ;
       
+      // one thread's here already
       int new_threads = nthreads - 1 ;
       std::thread * t[new_threads] ;
+      
+      // we'll tell the threads where in relation to the start of the data
+      // 'their' chunk is located. This is needed if the coordinates are used
+      // as input, like in the transform-based remap
+      
       shape_type offset ;
 
+      // create the threads, each with correct chunk and offset
       int s ;
       for ( s = 0 ; s < new_threads ; s++ )
       {
@@ -281,6 +288,8 @@ struct divide_and_conquer
       }
       // and process the last chunk in this thread
       func ( dn[s] , offset ) ;
+      
+      // finally, join the threads
       for ( int s = 0 ; s < new_threads ; s++ )
       {
         t[s]->join() ;
diff --git a/example/pano_extract.cc b/example/pano_extract.cc
index 4eb792e..13a5b65 100644
--- a/example/pano_extract.cc
+++ b/example/pano_extract.cc
@@ -33,9 +33,8 @@
 ///
 /// \brief demonstration of transformation-based remap
 ///
-/// This program extracts an rectilinear image
+/// This program extracts a rectilinear image from a  from a (full) spherical
 /// panorama with a given size, horizontal field of view, yaw, pitch and roll
-/// from a (full) spherical
 
 #include <cmath>
 
diff --git a/example/roundtrip.cc b/example/roundtrip.cc
index 17918ec..8feec87 100644
--- a/example/roundtrip.cc
+++ b/example/roundtrip.cc
@@ -373,10 +373,11 @@ void process_image ( char * name )
       cout << "testing bc code " << vspline::bc_name[bc]
           << " spline degree " << spline_degree << endl ;
       roundtrip < view_type , real_type , rc_type > ( imageArray , bc , spline_degree , false ) ;
-
+#ifdef USE_VC
       cout << "testing bc code " << vspline::bc_name[bc]
           << " spline degree " << spline_degree << " using Vc" << endl ;
       roundtrip < view_type , real_type , rc_type > ( imageArray , bc , spline_degree , true ) ;
+#endif
     }
   }
 }
diff --git a/example/times.txt b/example/times.txt
index a29d0cf..d413770 100644
--- a/example/times.txt
+++ b/example/times.txt
@@ -6,18 +6,18 @@ Image information:
   pixel type:  UINT8
   color image: yes (number of channels: 3)
 testing bc code MIRROR spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 18.600000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 13.830000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 29.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.709999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 41.900000 ms
+avg 100 x remap with internal spline:....... 27.709999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 48.100000 ms
-avg 10 x remap with functor & external bspl 30.700000 ms
+avg 100 x remap with functor & internal bspl 29.530001 ms
+avg 100 x remap with functor & external bspl 22.290001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -25,18 +25,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 9.400000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 6.220000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 7.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 6.130000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 17.800000 ms
+avg 100 x remap with internal spline:....... 13.500000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 19.300000 ms
-avg 10 x remap with functor & external bspl 9.900000 ms
+avg 100 x remap with functor & internal bspl 14.180000 ms
+avg 100 x remap with functor & external bspl 6.630000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -44,18 +44,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 36.900000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 25.500000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 33.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 32.529999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 54.400000 ms
+avg 100 x remap with internal spline:....... 40.209999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 63.200000 ms
-avg 10 x remap with functor & external bspl 49.600000 ms
+avg 100 x remap with functor & internal bspl 41.380001 ms
+avg 100 x remap with functor & external bspl 33.990002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -63,18 +63,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 11.200000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 8.420000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 14.300000 ms
+avg 100 x remap1 from unsplit coordinates:.. 8.820000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 24.000000 ms
+avg 100 x remap with internal spline:....... 16.620001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 24.300000 ms
-avg 10 x remap with functor & external bspl 13.400000 ms
+avg 100 x remap with functor & internal bspl 17.700001 ms
+avg 100 x remap with functor & external bspl 10.170000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -82,18 +82,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 2
-avg 10 x prefilter:........................ 16.000000 ms
-avg 10 x remap1 from pre-split coordinates: 50.100000 ms
+avg 100 x prefilter:........................ 10.650000 ms
+avg 100 x remap1 from pre-split coordinates: 42.139999 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
-avg 10 x remap1 from unsplit coordinates:.. 51.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 51.490002 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
-avg 10 x remap with internal spline:....... 80.400000 ms
+avg 100 x remap with internal spline:....... 71.199997 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
-avg 10 x remap with functor & internal bspl 81.900000 ms
-avg 10 x remap with functor & external bspl 51.600000 ms
+avg 100 x remap with functor & internal bspl 68.750000 ms
+avg 100 x remap with functor & external bspl 50.110001 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
 difference original data/restored data:
@@ -101,18 +101,18 @@ warped image diff Mean: 0.000017
 warped image diff Maximum: 0.000070
 
 testing bc code MIRROR spline degree 2 using Vc
-avg 10 x prefilter:........................ 13.800000 ms
-avg 10 x remap1 from pre-split coordinates: 16.600000 ms
+avg 100 x prefilter:........................ 8.360000 ms
+avg 100 x remap1 from pre-split coordinates: 12.940000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 17.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 13.790000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 42.500000 ms
+avg 100 x remap with internal spline:....... 31.000000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 40.500000 ms
-avg 10 x remap with functor & external bspl 22.100000 ms
+avg 100 x remap with functor & internal bspl 30.600000 ms
+avg 100 x remap with functor & external bspl 14.730000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 difference original data/restored data:
@@ -120,18 +120,18 @@ warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 
 testing bc code MIRROR spline degree 3
-avg 10 x prefilter:........................ 17.000000 ms
-avg 10 x remap1 from pre-split coordinates: 67.800000 ms
+avg 100 x prefilter:........................ 11.270000 ms
+avg 100 x remap1 from pre-split coordinates: 63.099998 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000137
-avg 10 x remap1 from unsplit coordinates:.. 92.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 70.190002 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000137
-avg 10 x remap with internal spline:....... 100.700000 ms
+avg 100 x remap with internal spline:....... 87.589996 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000137
-avg 10 x remap with functor & internal bspl 108.800000 ms
-avg 10 x remap with functor & external bspl 71.100000 ms
+avg 100 x remap with functor & internal bspl 89.940002 ms
+avg 100 x remap with functor & external bspl 71.580002 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000137
 difference original data/restored data:
@@ -139,18 +139,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000117
 
 testing bc code MIRROR spline degree 3 using Vc
-avg 10 x prefilter:........................ 11.900000 ms
-avg 10 x remap1 from pre-split coordinates: 24.400000 ms
+avg 100 x prefilter:........................ 8.450000 ms
+avg 100 x remap1 from pre-split coordinates: 19.290001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000109
-avg 10 x remap1 from unsplit coordinates:.. 29.300000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.059999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000109
-avg 10 x remap with internal spline:....... 48.400000 ms
+avg 100 x remap with internal spline:....... 36.119999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000109
-avg 10 x remap with functor & internal bspl 48.100000 ms
-avg 10 x remap with functor & external bspl 31.200000 ms
+avg 100 x remap with functor & internal bspl 37.389999 ms
+avg 100 x remap with functor & external bspl 21.330000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000109
 difference original data/restored data:
@@ -158,56 +158,56 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000109
 
 testing bc code MIRROR spline degree 4
-avg 10 x prefilter:........................ 28.900000 ms
-avg 10 x remap1 from pre-split coordinates: 95.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 101.500000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 144.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 147.200000 ms
-avg 10 x remap with functor & external bspl 100.100000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
+avg 100 x prefilter:........................ 19.799999 ms
+avg 100 x remap1 from pre-split coordinates: 91.580002 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000131
+avg 100 x remap1 from unsplit coordinates:.. 99.080002 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000131
+avg 100 x remap with internal spline:....... 137.059998 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000131
+avg 100 x remap with functor & internal bspl 127.230003 ms
+avg 100 x remap with functor & external bspl 99.959999 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000131
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000097
 
 testing bc code MIRROR spline degree 4 using Vc
-avg 10 x prefilter:........................ 14.100000 ms
-avg 10 x remap1 from pre-split coordinates: 29.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-avg 10 x remap1 from unsplit coordinates:.. 39.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-avg 10 x remap with internal spline:....... 64.100000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-avg 10 x remap with functor & internal bspl 65.200000 ms
-avg 10 x remap with functor & external bspl 40.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
+avg 100 x prefilter:........................ 9.270000 ms
+avg 100 x remap1 from pre-split coordinates: 27.990000 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000103
+avg 100 x remap1 from unsplit coordinates:.. 28.799999 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000103
+avg 100 x remap with internal spline:....... 46.200001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000103
+avg 100 x remap with functor & internal bspl 46.980000 ms
+avg 100 x remap with functor & external bspl 30.030001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000103
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000103
 
 testing bc code MIRROR spline degree 5
-avg 10 x prefilter:........................ 27.000000 ms
-avg 10 x remap1 from pre-split coordinates: 122.900000 ms
+avg 100 x prefilter:........................ 19.780001 ms
+avg 100 x remap1 from pre-split coordinates: 125.139999 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000102
-avg 10 x remap1 from unsplit coordinates:.. 132.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 131.679993 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000102
-avg 10 x remap with internal spline:....... 174.300000 ms
+avg 100 x remap with internal spline:....... 158.100006 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000102
-avg 10 x remap with functor & internal bspl 192.400000 ms
-avg 10 x remap with functor & external bspl 132.000000 ms
+avg 100 x remap with functor & internal bspl 159.800003 ms
+avg 100 x remap with functor & external bspl 132.949997 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000102
 difference original data/restored data:
@@ -215,18 +215,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000101
 
 testing bc code MIRROR spline degree 5 using Vc
-avg 10 x prefilter:........................ 15.700000 ms
-avg 10 x remap1 from pre-split coordinates: 47.600000 ms
+avg 100 x prefilter:........................ 8.880000 ms
+avg 100 x remap1 from pre-split coordinates: 38.619999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000102
-avg 10 x remap1 from unsplit coordinates:.. 47.300000 ms
+avg 100 x remap1 from unsplit coordinates:.. 39.720001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000102
-avg 10 x remap with internal spline:....... 72.200000 ms
+avg 100 x remap with internal spline:....... 55.299999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000102
-avg 10 x remap with functor & internal bspl 76.400000 ms
-avg 10 x remap with functor & external bspl 41.600000 ms
+avg 100 x remap with functor & internal bspl 56.700001 ms
+avg 100 x remap with functor & external bspl 40.330002 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000102
 difference original data/restored data:
@@ -234,18 +234,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000102
 
 testing bc code MIRROR spline degree 6
-avg 10 x prefilter:........................ 40.500000 ms
-avg 10 x remap1 from pre-split coordinates: 164.300000 ms
+avg 100 x prefilter:........................ 28.980000 ms
+avg 100 x remap1 from pre-split coordinates: 163.080002 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000114
-avg 10 x remap1 from unsplit coordinates:.. 170.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 170.520004 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000114
-avg 10 x remap with internal spline:....... 232.500000 ms
+avg 100 x remap with internal spline:....... 207.070007 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000114
-avg 10 x remap with functor & internal bspl 226.300000 ms
-avg 10 x remap with functor & external bspl 170.100000 ms
+avg 100 x remap with functor & internal bspl 208.929993 ms
+avg 100 x remap with functor & external bspl 172.270004 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000114
 difference original data/restored data:
@@ -253,18 +253,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000111
 
 testing bc code MIRROR spline degree 6 using Vc
-avg 10 x prefilter:........................ 18.000000 ms
-avg 10 x remap1 from pre-split coordinates: 61.700000 ms
+avg 100 x prefilter:........................ 9.370000 ms
+avg 100 x remap1 from pre-split coordinates: 50.860001 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000123
-avg 10 x remap1 from unsplit coordinates:.. 54.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 52.279999 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000123
-avg 10 x remap with internal spline:....... 83.000000 ms
+avg 100 x remap with internal spline:....... 68.459999 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000123
-avg 10 x remap with functor & internal bspl 86.100000 ms
-avg 10 x remap with functor & external bspl 52.700000 ms
+avg 100 x remap with functor & internal bspl 69.809998 ms
+avg 100 x remap with functor & external bspl 52.759998 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000123
 difference original data/restored data:
@@ -272,18 +272,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000123
 
 testing bc code MIRROR spline degree 7
-avg 10 x prefilter:........................ 43.000000 ms
-avg 10 x remap1 from pre-split coordinates: 206.700000 ms
+avg 100 x prefilter:........................ 29.139999 ms
+avg 100 x remap1 from pre-split coordinates: 207.850006 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000123
-avg 10 x remap1 from unsplit coordinates:.. 211.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 214.720001 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000123
-avg 10 x remap with internal spline:....... 272.000000 ms
+avg 100 x remap with internal spline:....... 250.089996 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000123
-avg 10 x remap with functor & internal bspl 274.200000 ms
-avg 10 x remap with functor & external bspl 213.400000 ms
+avg 100 x remap with functor & internal bspl 252.470001 ms
+avg 100 x remap with functor & external bspl 216.289993 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000123
 difference original data/restored data:
@@ -291,18 +291,18 @@ warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000112
 
 testing bc code MIRROR spline degree 7 using Vc
-avg 10 x prefilter:........................ 17.500000 ms
-avg 10 x remap1 from pre-split coordinates: 69.800000 ms
+avg 100 x prefilter:........................ 9.670000 ms
+avg 100 x remap1 from pre-split coordinates: 64.870003 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000131
-avg 10 x remap1 from unsplit coordinates:.. 69.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 65.839996 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000131
-avg 10 x remap with internal spline:....... 104.400000 ms
+avg 100 x remap with internal spline:....... 83.120003 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000131
-avg 10 x remap with functor & internal bspl 98.600000 ms
-avg 10 x remap with functor & external bspl 67.100000 ms
+avg 100 x remap with functor & internal bspl 84.510002 ms
+avg 100 x remap with functor & external bspl 66.720001 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000131
 difference original data/restored data:
@@ -310,18 +310,18 @@ warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000131
 
 testing bc code REFLECT spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.600000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 13.900000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 28.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.340000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 41.700000 ms
+avg 100 x remap with internal spline:....... 27.480000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 43.400000 ms
-avg 10 x remap with functor & external bspl 30.000000 ms
+avg 100 x remap with functor & internal bspl 28.910000 ms
+avg 100 x remap with functor & external bspl 21.809999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -329,18 +329,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 9.600000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 6.270000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 7.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 6.230000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 17.700000 ms
+avg 100 x remap with internal spline:....... 13.380000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 19.700000 ms
-avg 10 x remap with functor & external bspl 10.700000 ms
+avg 100 x remap with functor & internal bspl 14.110000 ms
+avg 100 x remap with functor & external bspl 6.700000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -348,18 +348,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 32.300000 ms
+avg 100 x prefilter:........................ 0.010000 ms
+avg 100 x remap1 from pre-split coordinates: 25.200001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 43.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 32.770000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 58.000000 ms
+avg 100 x remap with internal spline:....... 40.410000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 64.900000 ms
-avg 10 x remap with functor & external bspl 43.100000 ms
+avg 100 x remap with functor & internal bspl 42.040001 ms
+avg 100 x remap with functor & external bspl 34.400002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -367,18 +367,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 11.500000 ms
+avg 100 x prefilter:........................ 0.010000 ms
+avg 100 x remap1 from pre-split coordinates: 8.310000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 11.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 8.790000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 24.100000 ms
+avg 100 x remap with internal spline:....... 16.709999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 25.000000 ms
-avg 10 x remap with functor & external bspl 13.600000 ms
+avg 100 x remap with functor & internal bspl 18.100000 ms
+avg 100 x remap with functor & external bspl 10.240000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -386,18 +386,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 2
-avg 10 x prefilter:........................ 16.299999 ms
-avg 10 x remap1 from pre-split coordinates: 43.300000 ms
+avg 100 x prefilter:........................ 10.490000 ms
+avg 100 x remap1 from pre-split coordinates: 41.980000 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000092
-avg 10 x remap1 from unsplit coordinates:.. 49.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 49.680000 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000092
-avg 10 x remap with internal spline:....... 80.100000 ms
+avg 100 x remap with internal spline:....... 69.290001 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000092
-avg 10 x remap with functor & internal bspl 86.400000 ms
-avg 10 x remap with functor & external bspl 52.500000 ms
+avg 100 x remap with functor & internal bspl 70.000000 ms
+avg 100 x remap with functor & external bspl 50.299999 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000092
 difference original data/restored data:
@@ -405,18 +405,18 @@ warped image diff Mean: 0.000017
 warped image diff Maximum: 0.000078
 
 testing bc code REFLECT spline degree 2 using Vc
-avg 10 x prefilter:........................ 13.800000 ms
-avg 10 x remap1 from pre-split coordinates: 19.500000 ms
+avg 100 x prefilter:........................ 8.440000 ms
+avg 100 x remap1 from pre-split coordinates: 13.440000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 21.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 13.580000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 42.300000 ms
+avg 100 x remap with internal spline:....... 29.430000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 40.000000 ms
-avg 10 x remap with functor & external bspl 20.400000 ms
+avg 100 x remap with functor & internal bspl 30.590000 ms
+avg 100 x remap with functor & external bspl 14.800000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 difference original data/restored data:
@@ -424,18 +424,18 @@ warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 
 testing bc code REFLECT spline degree 3
-avg 10 x prefilter:........................ 15.600000 ms
-avg 10 x remap1 from pre-split coordinates: 64.900000 ms
+avg 100 x prefilter:........................ 10.420000 ms
+avg 100 x remap1 from pre-split coordinates: 63.160000 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000144
-avg 10 x remap1 from unsplit coordinates:.. 70.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 69.930000 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000144
-avg 10 x remap with internal spline:....... 110.400000 ms
+avg 100 x remap with internal spline:....... 89.040001 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000144
-avg 10 x remap with functor & internal bspl 109.300000 ms
-avg 10 x remap with functor & external bspl 75.200000 ms
+avg 100 x remap with functor & internal bspl 89.830002 ms
+avg 100 x remap with functor & external bspl 71.650002 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000144
 difference original data/restored data:
@@ -443,18 +443,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000135
 
 testing bc code REFLECT spline degree 3 using Vc
-avg 10 x prefilter:........................ 13.400000 ms
-avg 10 x remap1 from pre-split coordinates: 24.000000 ms
+avg 100 x prefilter:........................ 8.320000 ms
+avg 100 x remap1 from pre-split coordinates: 19.889999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 23.700000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.190001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 46.900000 ms
+avg 100 x remap with internal spline:....... 35.779999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 51.000000 ms
-avg 10 x remap with functor & external bspl 29.700000 ms
+avg 100 x remap with functor & internal bspl 36.939999 ms
+avg 100 x remap with functor & external bspl 21.400000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
 difference original data/restored data:
@@ -462,56 +462,56 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
 
 testing bc code REFLECT spline degree 4
-avg 10 x prefilter:........................ 25.700001 ms
-avg 10 x remap1 from pre-split coordinates: 93.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap1 from unsplit coordinates:.. 99.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with internal spline:....... 149.700000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with functor & internal bspl 140.900000 ms
-avg 10 x remap with functor & external bspl 99.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
+avg 100 x prefilter:........................ 19.340000 ms
+avg 100 x remap1 from pre-split coordinates: 91.209999 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000128
+avg 100 x remap1 from unsplit coordinates:.. 99.180000 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000128
+avg 100 x remap with internal spline:....... 125.239998 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000128
+avg 100 x remap with functor & internal bspl 126.440002 ms
+avg 100 x remap with functor & external bspl 99.949997 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000128
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000147
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000131
 
 testing bc code REFLECT spline degree 4 using Vc
-avg 10 x prefilter:........................ 13.500000 ms
-avg 10 x remap1 from pre-split coordinates: 36.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-avg 10 x remap1 from unsplit coordinates:.. 43.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-avg 10 x remap with internal spline:....... 62.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-avg 10 x remap with functor & internal bspl 57.600000 ms
-avg 10 x remap with functor & external bspl 33.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
+avg 100 x prefilter:........................ 9.110000 ms
+avg 100 x remap1 from pre-split coordinates: 28.059999 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000135
+avg 100 x remap1 from unsplit coordinates:.. 28.879999 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000135
+avg 100 x remap with internal spline:....... 45.110001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000135
+avg 100 x remap with functor & internal bspl 46.400002 ms
+avg 100 x remap with functor & external bspl 30.190001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000135
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000135
 
 testing bc code REFLECT spline degree 5
-avg 10 x prefilter:........................ 25.700001 ms
-avg 10 x remap1 from pre-split coordinates: 123.200000 ms
+avg 100 x prefilter:........................ 19.190001 ms
+avg 100 x remap1 from pre-split coordinates: 124.669998 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000130
-avg 10 x remap1 from unsplit coordinates:.. 133.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 131.009995 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000130
-avg 10 x remap with internal spline:....... 173.100000 ms
+avg 100 x remap with internal spline:....... 157.660004 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000130
-avg 10 x remap with functor & internal bspl 182.600000 ms
-avg 10 x remap with functor & external bspl 134.600000 ms
+avg 100 x remap with functor & internal bspl 159.509995 ms
+avg 100 x remap with functor & external bspl 132.690002 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000130
 difference original data/restored data:
@@ -519,18 +519,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000129
 
 testing bc code REFLECT spline degree 5 using Vc
-avg 10 x prefilter:........................ 14.900000 ms
-avg 10 x remap1 from pre-split coordinates: 49.300000 ms
+avg 100 x prefilter:........................ 8.730000 ms
+avg 100 x remap1 from pre-split coordinates: 38.430000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000124
-avg 10 x remap1 from unsplit coordinates:.. 62.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 39.459999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000124
-avg 10 x remap with internal spline:....... 86.300000 ms
+avg 100 x remap with internal spline:....... 54.889999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000124
-avg 10 x remap with functor & internal bspl 80.700000 ms
-avg 10 x remap with functor & external bspl 44.300000 ms
+avg 100 x remap with functor & internal bspl 56.299999 ms
+avg 100 x remap with functor & external bspl 40.340000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000124
 difference original data/restored data:
@@ -538,18 +538,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000124
 
 testing bc code REFLECT spline degree 6
-avg 10 x prefilter:........................ 41.900002 ms
-avg 10 x remap1 from pre-split coordinates: 164.800000 ms
+avg 100 x prefilter:........................ 28.240000 ms
+avg 100 x remap1 from pre-split coordinates: 162.300003 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 171.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 170.210007 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 244.800000 ms
+avg 100 x remap with internal spline:....... 205.490005 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 227.600000 ms
-avg 10 x remap with functor & external bspl 170.100000 ms
+avg 100 x remap with functor & internal bspl 207.729996 ms
+avg 100 x remap with functor & external bspl 171.300003 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000145
 difference original data/restored data:
@@ -557,18 +557,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000163
 
 testing bc code REFLECT spline degree 6 using Vc
-avg 10 x prefilter:........................ 17.100000 ms
-avg 10 x remap1 from pre-split coordinates: 60.000000 ms
+avg 100 x prefilter:........................ 9.210000 ms
+avg 100 x remap1 from pre-split coordinates: 50.720001 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000171
-avg 10 x remap1 from unsplit coordinates:.. 54.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 51.860001 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000171
-avg 10 x remap with internal spline:....... 87.600000 ms
+avg 100 x remap with internal spline:....... 68.180000 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000171
-avg 10 x remap with functor & internal bspl 90.900000 ms
-avg 10 x remap with functor & external bspl 52.800000 ms
+avg 100 x remap with functor & internal bspl 69.720001 ms
+avg 100 x remap with functor & external bspl 52.919998 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000171
 difference original data/restored data:
@@ -576,18 +576,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000171
 
 testing bc code REFLECT spline degree 7
-avg 10 x prefilter:........................ 40.299999 ms
-avg 10 x remap1 from pre-split coordinates: 208.700000 ms
+avg 100 x prefilter:........................ 29.170000 ms
+avg 100 x remap1 from pre-split coordinates: 206.690002 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000154
-avg 10 x remap1 from unsplit coordinates:.. 215.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 214.309998 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000154
-avg 10 x remap with internal spline:....... 269.300000 ms
+avg 100 x remap with internal spline:....... 250.720001 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000154
-avg 10 x remap with functor & internal bspl 280.000000 ms
-avg 10 x remap with functor & external bspl 213.700000 ms
+avg 100 x remap with functor & internal bspl 251.300003 ms
+avg 100 x remap with functor & external bspl 215.529999 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000154
 difference original data/restored data:
@@ -595,18 +595,18 @@ warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000165
 
 testing bc code REFLECT spline degree 7 using Vc
-avg 10 x prefilter:........................ 16.400000 ms
-avg 10 x remap1 from pre-split coordinates: 75.000000 ms
+avg 100 x prefilter:........................ 9.710000 ms
+avg 100 x remap1 from pre-split coordinates: 65.010002 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000138
-avg 10 x remap1 from unsplit coordinates:.. 67.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 65.470001 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000138
-avg 10 x remap with internal spline:....... 107.200000 ms
+avg 100 x remap with internal spline:....... 82.440002 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000138
-avg 10 x remap with functor & internal bspl 109.500000 ms
-avg 10 x remap with functor & external bspl 71.300000 ms
+avg 100 x remap with functor & internal bspl 83.480003 ms
+avg 100 x remap with functor & external bspl 66.879997 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000138
 difference original data/restored data:
@@ -614,18 +614,18 @@ warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000138
 
 testing bc code NATURAL spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.200000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 13.480000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 28.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 19.760000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 40.600000 ms
+avg 100 x remap with internal spline:....... 26.910000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 45.600000 ms
-avg 10 x remap with functor & external bspl 26.600000 ms
+avg 100 x remap with functor & internal bspl 28.700001 ms
+avg 100 x remap with functor & external bspl 21.660000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -633,18 +633,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code NATURAL spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 8.500000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 6.100000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 9.300000 ms
+avg 100 x remap1 from unsplit coordinates:.. 5.780000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 17.700000 ms
+avg 100 x remap with internal spline:....... 12.810000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 18.900000 ms
-avg 10 x remap with functor & external bspl 10.300000 ms
+avg 100 x remap with functor & internal bspl 13.710000 ms
+avg 100 x remap with functor & external bspl 7.200000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -652,18 +652,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code NATURAL spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 30.900000 ms
+avg 100 x prefilter:........................ 0.010000 ms
+avg 100 x remap1 from pre-split coordinates: 25.290001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 43.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 31.139999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 61.000000 ms
+avg 100 x remap with internal spline:....... 38.430000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 62.200000 ms
-avg 10 x remap with functor & external bspl 43.600000 ms
+avg 100 x remap with functor & internal bspl 40.110001 ms
+avg 100 x remap with functor & external bspl 32.900002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -671,18 +671,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code NATURAL spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 13.400000 ms
+avg 100 x prefilter:........................ 0.010000 ms
+avg 100 x remap1 from pre-split coordinates: 8.100000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 12.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 8.940000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 22.000000 ms
+avg 100 x remap with internal spline:....... 16.139999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 24.600000 ms
-avg 10 x remap with functor & external bspl 15.200000 ms
+avg 100 x remap with functor & internal bspl 17.260000 ms
+avg 100 x remap with functor & external bspl 9.970000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -690,18 +690,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code NATURAL spline degree 2
-avg 10 x prefilter:........................ 16.299999 ms
-avg 10 x remap1 from pre-split coordinates: 42.200000 ms
+avg 100 x prefilter:........................ 10.440000 ms
+avg 100 x remap1 from pre-split coordinates: 42.200001 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
-avg 10 x remap1 from unsplit coordinates:.. 53.900000 ms
+avg 100 x remap1 from unsplit coordinates:.. 47.939999 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
-avg 10 x remap with internal spline:....... 83.200000 ms
+avg 100 x remap with internal spline:....... 65.379997 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
-avg 10 x remap with functor & internal bspl 81.600000 ms
-avg 10 x remap with functor & external bspl 49.300000 ms
+avg 100 x remap with functor & internal bspl 67.160004 ms
+avg 100 x remap with functor & external bspl 49.169998 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000082
 difference original data/restored data:
@@ -709,18 +709,18 @@ warped image diff Mean: 0.000017
 warped image diff Maximum: 0.000075
 
 testing bc code NATURAL spline degree 2 using Vc
-avg 10 x prefilter:........................ 13.000000 ms
-avg 10 x remap1 from pre-split coordinates: 18.000000 ms
+avg 100 x prefilter:........................ 8.020000 ms
+avg 100 x remap1 from pre-split coordinates: 12.650000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 17.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 13.370000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 43.400000 ms
+avg 100 x remap with internal spline:....... 28.590000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 42.000000 ms
-avg 10 x remap with functor & external bspl 19.000000 ms
+avg 100 x remap with functor & internal bspl 30.070000 ms
+avg 100 x remap with functor & external bspl 14.490000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 difference original data/restored data:
@@ -728,18 +728,18 @@ warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 
 testing bc code NATURAL spline degree 3
-avg 10 x prefilter:........................ 15.700000 ms
-avg 10 x remap1 from pre-split coordinates: 63.400000 ms
+avg 100 x prefilter:........................ 11.300000 ms
+avg 100 x remap1 from pre-split coordinates: 63.049999 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000165
-avg 10 x remap1 from unsplit coordinates:.. 78.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 68.910004 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000165
-avg 10 x remap with internal spline:....... 107.000000 ms
+avg 100 x remap with internal spline:....... 86.660004 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000165
-avg 10 x remap with functor & internal bspl 111.600000 ms
-avg 10 x remap with functor & external bspl 70.800000 ms
+avg 100 x remap with functor & internal bspl 88.290001 ms
+avg 100 x remap with functor & external bspl 70.010002 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000165
 difference original data/restored data:
@@ -747,18 +747,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000144
 
 testing bc code NATURAL spline degree 3 using Vc
-avg 10 x prefilter:........................ 13.400000 ms
-avg 10 x remap1 from pre-split coordinates: 28.800000 ms
+avg 100 x prefilter:........................ 8.200000 ms
+avg 100 x remap1 from pre-split coordinates: 19.549999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 25.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.150000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 46.500000 ms
+avg 100 x remap with internal spline:....... 35.610001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 51.400000 ms
-avg 10 x remap with functor & external bspl 27.900000 ms
+avg 100 x remap with functor & internal bspl 36.650002 ms
+avg 100 x remap with functor & external bspl 21.020000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
 difference original data/restored data:
@@ -766,56 +766,56 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000145
 
 testing bc code NATURAL spline degree 4
-avg 10 x prefilter:........................ 26.200001 ms
-avg 10 x remap1 from pre-split coordinates: 92.700000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-avg 10 x remap1 from unsplit coordinates:.. 97.500000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-avg 10 x remap with internal spline:....... 144.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-avg 10 x remap with functor & internal bspl 143.400000 ms
-avg 10 x remap with functor & external bspl 98.300000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
+avg 100 x prefilter:........................ 19.559999 ms
+avg 100 x remap1 from pre-split coordinates: 92.570000 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000154
+avg 100 x remap1 from unsplit coordinates:.. 97.720001 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000154
+avg 100 x remap with internal spline:....... 125.050003 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000154
+avg 100 x remap with functor & internal bspl 124.849998 ms
+avg 100 x remap with functor & external bspl 99.000000 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000154
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000198
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000154
 
 testing bc code NATURAL spline degree 4 using Vc
-avg 10 x prefilter:........................ 15.000000 ms
-avg 10 x remap1 from pre-split coordinates: 33.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-avg 10 x remap1 from unsplit coordinates:.. 32.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-avg 10 x remap with internal spline:....... 54.300000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-avg 10 x remap with functor & internal bspl 65.000000 ms
-avg 10 x remap with functor & external bspl 46.700000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
+avg 100 x prefilter:........................ 9.090000 ms
+avg 100 x remap1 from pre-split coordinates: 28.209999 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000144
+avg 100 x remap1 from unsplit coordinates:.. 28.610001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000144
+avg 100 x remap with internal spline:....... 45.209999 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000144
+avg 100 x remap with functor & internal bspl 46.340000 ms
+avg 100 x remap with functor & external bspl 29.870001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000144
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000144
 
 testing bc code NATURAL spline degree 5
-avg 10 x prefilter:........................ 28.299999 ms
-avg 10 x remap1 from pre-split coordinates: 127.300000 ms
+avg 100 x prefilter:........................ 19.719999 ms
+avg 100 x remap1 from pre-split coordinates: 124.750000 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000194
-avg 10 x remap1 from unsplit coordinates:.. 131.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 129.800003 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000194
-avg 10 x remap with internal spline:....... 171.500000 ms
+avg 100 x remap with internal spline:....... 156.440002 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000194
-avg 10 x remap with functor & internal bspl 179.100000 ms
-avg 10 x remap with functor & external bspl 130.000000 ms
+avg 100 x remap with functor & internal bspl 158.889999 ms
+avg 100 x remap with functor & external bspl 131.589996 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000194
 difference original data/restored data:
@@ -823,18 +823,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000180
 
 testing bc code NATURAL spline degree 5 using Vc
-avg 10 x prefilter:........................ 15.400000 ms
-avg 10 x remap1 from pre-split coordinates: 40.400000 ms
+avg 100 x prefilter:........................ 8.570000 ms
+avg 100 x remap1 from pre-split coordinates: 38.380001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000171
-avg 10 x remap1 from unsplit coordinates:.. 39.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 39.130001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000171
-avg 10 x remap with internal spline:....... 74.000000 ms
+avg 100 x remap with internal spline:....... 55.230000 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000171
-avg 10 x remap with functor & internal bspl 75.800000 ms
-avg 10 x remap with functor & external bspl 41.300000 ms
+avg 100 x remap with functor & internal bspl 55.840000 ms
+avg 100 x remap with functor & external bspl 40.240002 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000171
 difference original data/restored data:
@@ -842,18 +842,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000171
 
 testing bc code NATURAL spline degree 6
-avg 10 x prefilter:........................ 45.700001 ms
-avg 10 x remap1 from pre-split coordinates: 162.200000 ms
+avg 100 x prefilter:........................ 28.990000 ms
+avg 100 x remap1 from pre-split coordinates: 162.970001 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000184
-avg 10 x remap1 from unsplit coordinates:.. 170.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 170.949997 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000184
-avg 10 x remap with internal spline:....... 235.800000 ms
+avg 100 x remap with internal spline:....... 212.169998 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000184
-avg 10 x remap with functor & internal bspl 230.500000 ms
-avg 10 x remap with functor & external bspl 172.500000 ms
+avg 100 x remap with functor & internal bspl 207.080002 ms
+avg 100 x remap with functor & external bspl 170.559998 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000184
 difference original data/restored data:
@@ -861,18 +861,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000174
 
 testing bc code NATURAL spline degree 6 using Vc
-avg 10 x prefilter:........................ 16.000000 ms
-avg 10 x remap1 from pre-split coordinates: 58.100000 ms
+avg 100 x prefilter:........................ 9.150000 ms
+avg 100 x remap1 from pre-split coordinates: 50.650002 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000179
-avg 10 x remap1 from unsplit coordinates:.. 51.700000 ms
+avg 100 x remap1 from unsplit coordinates:.. 51.439999 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000179
-avg 10 x remap with internal spline:....... 86.900000 ms
+avg 100 x remap with internal spline:....... 67.660004 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000179
-avg 10 x remap with functor & internal bspl 105.700000 ms
-avg 10 x remap with functor & external bspl 64.600000 ms
+avg 100 x remap with functor & internal bspl 69.080002 ms
+avg 100 x remap with functor & external bspl 52.500000 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000179
 difference original data/restored data:
@@ -880,18 +880,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000179
 
 testing bc code NATURAL spline degree 7
-avg 10 x prefilter:........................ 36.400002 ms
-avg 10 x remap1 from pre-split coordinates: 205.900000 ms
+avg 100 x prefilter:........................ 28.990000 ms
+avg 100 x remap1 from pre-split coordinates: 206.910004 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000214
-avg 10 x remap1 from unsplit coordinates:.. 216.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 212.570007 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000214
-avg 10 x remap with internal spline:....... 257.100000 ms
+avg 100 x remap with internal spline:....... 249.539993 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000214
-avg 10 x remap with functor & internal bspl 271.000000 ms
-avg 10 x remap with functor & external bspl 212.700000 ms
+avg 100 x remap with functor & internal bspl 249.809998 ms
+avg 100 x remap with functor & external bspl 213.600006 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000214
 difference original data/restored data:
@@ -899,18 +899,18 @@ warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000214
 
 testing bc code NATURAL spline degree 7 using Vc
-avg 10 x prefilter:........................ 17.000000 ms
-avg 10 x remap1 from pre-split coordinates: 68.300000 ms
+avg 100 x prefilter:........................ 9.490000 ms
+avg 100 x remap1 from pre-split coordinates: 65.010002 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000223
-avg 10 x remap1 from unsplit coordinates:.. 71.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 66.290001 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000223
-avg 10 x remap with internal spline:....... 100.100000 ms
+avg 100 x remap with internal spline:....... 82.559998 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000223
-avg 10 x remap with functor & internal bspl 100.300000 ms
-avg 10 x remap with functor & external bspl 67.200000 ms
+avg 100 x remap with functor & internal bspl 83.519997 ms
+avg 100 x remap with functor & external bspl 66.940002 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000223
 difference original data/restored data:
@@ -918,18 +918,18 @@ warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000223
 
 testing bc code PERIODIC spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.200000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 13.550000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 24.700000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.230000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 42.500000 ms
+avg 100 x remap with internal spline:....... 27.480000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 45.100000 ms
-avg 10 x remap with functor & external bspl 30.600000 ms
+avg 100 x remap with functor & internal bspl 28.959999 ms
+avg 100 x remap with functor & external bspl 21.850000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -937,18 +937,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code PERIODIC spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 9.100000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 6.030000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 9.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 5.700000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 18.000000 ms
+avg 100 x remap with internal spline:....... 13.200000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 19.900000 ms
-avg 10 x remap with functor & external bspl 10.300000 ms
+avg 100 x remap with functor & internal bspl 13.980000 ms
+avg 100 x remap with functor & external bspl 6.670000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -956,18 +956,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code PERIODIC spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 40.100000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 25.340000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 41.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 32.060001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 58.800000 ms
+avg 100 x remap with internal spline:....... 38.930000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 64.000000 ms
-avg 10 x remap with functor & external bspl 42.600000 ms
+avg 100 x remap with functor & internal bspl 40.939999 ms
+avg 100 x remap with functor & external bspl 33.560001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -975,18 +975,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code PERIODIC spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 11.400000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 8.250000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 10.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 8.690000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 22.500000 ms
+avg 100 x remap with internal spline:....... 16.040001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 24.300000 ms
-avg 10 x remap with functor & external bspl 13.300000 ms
+avg 100 x remap with functor & internal bspl 17.650000 ms
+avg 100 x remap with functor & external bspl 10.260000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -994,18 +994,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code PERIODIC spline degree 2
-avg 10 x prefilter:........................ 16.299999 ms
-avg 10 x remap1 from pre-split coordinates: 53.700000 ms
+avg 100 x prefilter:........................ 11.270000 ms
+avg 100 x remap1 from pre-split coordinates: 41.369999 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000084
-avg 10 x remap1 from unsplit coordinates:.. 53.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 48.049999 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000084
-avg 10 x remap with internal spline:....... 87.600000 ms
+avg 100 x remap with internal spline:....... 66.410004 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000084
-avg 10 x remap with functor & internal bspl 84.400000 ms
-avg 10 x remap with functor & external bspl 51.000000 ms
+avg 100 x remap with functor & internal bspl 68.290001 ms
+avg 100 x remap with functor & external bspl 50.180000 ms
 warped image diff Mean: 0.000018
 warped image diff Maximum: 0.000084
 difference original data/restored data:
@@ -1013,18 +1013,18 @@ warped image diff Mean: 0.000017
 warped image diff Maximum: 0.000076
 
 testing bc code PERIODIC spline degree 2 using Vc
-avg 10 x prefilter:........................ 11.300000 ms
-avg 10 x remap1 from pre-split coordinates: 16.500000 ms
+avg 100 x prefilter:........................ 8.300000 ms
+avg 100 x remap1 from pre-split coordinates: 12.810000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 19.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 13.560000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 37.100000 ms
+avg 100 x remap with internal spline:....... 28.790001 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 41.600000 ms
-avg 10 x remap with functor & external bspl 18.000000 ms
+avg 100 x remap with functor & internal bspl 30.389999 ms
+avg 100 x remap with functor & external bspl 14.670000 ms
 warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 difference original data/restored data:
@@ -1032,18 +1032,18 @@ warped image diff Mean: 0.000016
 warped image diff Maximum: 0.000078
 
 testing bc code PERIODIC spline degree 3
-avg 10 x prefilter:........................ 16.799999 ms
-avg 10 x remap1 from pre-split coordinates: 81.200000 ms
+avg 100 x prefilter:........................ 11.240000 ms
+avg 100 x remap1 from pre-split coordinates: 63.060001 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000098
-avg 10 x remap1 from unsplit coordinates:.. 80.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 69.620003 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000098
-avg 10 x remap with internal spline:....... 103.800000 ms
+avg 100 x remap with internal spline:....... 87.730003 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000098
-avg 10 x remap with functor & internal bspl 104.200000 ms
-avg 10 x remap with functor & external bspl 71.100000 ms
+avg 100 x remap with functor & internal bspl 89.419998 ms
+avg 100 x remap with functor & external bspl 70.849998 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000098
 difference original data/restored data:
@@ -1051,18 +1051,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000094
 
 testing bc code PERIODIC spline degree 3 using Vc
-avg 10 x prefilter:........................ 13.500000 ms
-avg 10 x remap1 from pre-split coordinates: 25.900000 ms
+avg 100 x prefilter:........................ 8.300000 ms
+avg 100 x remap1 from pre-split coordinates: 19.459999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000098
-avg 10 x remap1 from unsplit coordinates:.. 28.900000 ms
+avg 100 x remap1 from unsplit coordinates:.. 20.209999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000098
-avg 10 x remap with internal spline:....... 45.500000 ms
+avg 100 x remap with internal spline:....... 35.459999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000098
-avg 10 x remap with functor & internal bspl 48.400000 ms
-avg 10 x remap with functor & external bspl 32.500000 ms
+avg 100 x remap with functor & internal bspl 36.669998 ms
+avg 100 x remap with functor & external bspl 21.459999 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000098
 difference original data/restored data:
@@ -1070,56 +1070,56 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000098
 
 testing bc code PERIODIC spline degree 4
-avg 10 x prefilter:........................ 28.700001 ms
-avg 10 x remap1 from pre-split coordinates: 92.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 96.900000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 140.500000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 142.600000 ms
-avg 10 x remap with functor & external bspl 98.300000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
+avg 100 x prefilter:........................ 19.740000 ms
+avg 100 x remap1 from pre-split coordinates: 90.750000 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000111
+avg 100 x remap1 from unsplit coordinates:.. 98.180000 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000111
+avg 100 x remap with internal spline:....... 124.129997 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000111
+avg 100 x remap with functor & internal bspl 126.070000 ms
+avg 100 x remap with functor & external bspl 100.120003 ms
+warped image diff Mean: 0.000023
+warped image diff Maximum: 0.000111
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000143
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000114
 
 testing bc code PERIODIC spline degree 4 using Vc
-avg 10 x prefilter:........................ 14.900000 ms
-avg 10 x remap1 from pre-split coordinates: 31.100000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap1 from unsplit coordinates:.. 40.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with internal spline:....... 65.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with functor & internal bspl 71.300000 ms
-avg 10 x remap with functor & external bspl 45.300000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
+avg 100 x prefilter:........................ 8.640000 ms
+avg 100 x remap1 from pre-split coordinates: 28.160000 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000128
+avg 100 x remap1 from unsplit coordinates:.. 28.940001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000128
+avg 100 x remap with internal spline:....... 44.889999 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000128
+avg 100 x remap with functor & internal bspl 45.860001 ms
+avg 100 x remap with functor & external bspl 29.950001 ms
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000128
 difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
+warped image diff Mean: 0.000022
+warped image diff Maximum: 0.000128
 
 testing bc code PERIODIC spline degree 5
-avg 10 x prefilter:........................ 30.700001 ms
-avg 10 x remap1 from pre-split coordinates: 131.100000 ms
+avg 100 x prefilter:........................ 19.790001 ms
+avg 100 x remap1 from pre-split coordinates: 124.980003 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000114
-avg 10 x remap1 from unsplit coordinates:.. 129.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 130.389999 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000114
-avg 10 x remap with internal spline:....... 173.600000 ms
+avg 100 x remap with internal spline:....... 157.110001 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000114
-avg 10 x remap with functor & internal bspl 179.600000 ms
-avg 10 x remap with functor & external bspl 132.300000 ms
+avg 100 x remap with functor & internal bspl 158.880005 ms
+avg 100 x remap with functor & external bspl 132.539993 ms
 warped image diff Mean: 0.000023
 warped image diff Maximum: 0.000114
 difference original data/restored data:
@@ -1127,18 +1127,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000114
 
 testing bc code PERIODIC spline degree 5 using Vc
-avg 10 x prefilter:........................ 16.200001 ms
-avg 10 x remap1 from pre-split coordinates: 39.000000 ms
+avg 100 x prefilter:........................ 8.620000 ms
+avg 100 x remap1 from pre-split coordinates: 38.470001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000111
-avg 10 x remap1 from unsplit coordinates:.. 55.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 39.200001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000111
-avg 10 x remap with internal spline:....... 74.800000 ms
+avg 100 x remap with internal spline:....... 55.200001 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000111
-avg 10 x remap with functor & internal bspl 74.400000 ms
-avg 10 x remap with functor & external bspl 47.000000 ms
+avg 100 x remap with functor & internal bspl 56.349998 ms
+avg 100 x remap with functor & external bspl 40.330002 ms
 warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000111
 difference original data/restored data:
@@ -1146,18 +1146,18 @@ warped image diff Mean: 0.000022
 warped image diff Maximum: 0.000111
 
 testing bc code PERIODIC spline degree 6
-avg 10 x prefilter:........................ 36.500000 ms
-avg 10 x remap1 from pre-split coordinates: 162.100000 ms
+avg 100 x prefilter:........................ 29.150000 ms
+avg 100 x remap1 from pre-split coordinates: 162.910004 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000131
-avg 10 x remap1 from unsplit coordinates:.. 172.200000 ms
+avg 100 x remap1 from unsplit coordinates:.. 170.089996 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000131
-avg 10 x remap with internal spline:....... 230.200000 ms
+avg 100 x remap with internal spline:....... 205.669998 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000131
-avg 10 x remap with functor & internal bspl 223.300000 ms
-avg 10 x remap with functor & external bspl 169.300000 ms
+avg 100 x remap with functor & internal bspl 209.690002 ms
+avg 100 x remap with functor & external bspl 172.000000 ms
 warped image diff Mean: 0.000027
 warped image diff Maximum: 0.000131
 difference original data/restored data:
@@ -1165,18 +1165,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000132
 
 testing bc code PERIODIC spline degree 6 using Vc
-avg 10 x prefilter:........................ 16.100000 ms
-avg 10 x remap1 from pre-split coordinates: 55.600000 ms
+avg 100 x prefilter:........................ 9.470000 ms
+avg 100 x remap1 from pre-split coordinates: 51.150002 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000131
-avg 10 x remap1 from unsplit coordinates:.. 51.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 51.830002 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000131
-avg 10 x remap with internal spline:....... 82.600000 ms
+avg 100 x remap with internal spline:....... 68.610001 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000131
-avg 10 x remap with functor & internal bspl 87.300000 ms
-avg 10 x remap with functor & external bspl 62.500000 ms
+avg 100 x remap with functor & internal bspl 69.919998 ms
+avg 100 x remap with functor & external bspl 52.650002 ms
 warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000131
 difference original data/restored data:
@@ -1184,18 +1184,18 @@ warped image diff Mean: 0.000026
 warped image diff Maximum: 0.000131
 
 testing bc code PERIODIC spline degree 7
-avg 10 x prefilter:........................ 36.799999 ms
-avg 10 x remap1 from pre-split coordinates: 206.200000 ms
+avg 100 x prefilter:........................ 29.250000 ms
+avg 100 x remap1 from pre-split coordinates: 207.830002 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000187
-avg 10 x remap1 from unsplit coordinates:.. 212.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 213.860001 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000187
-avg 10 x remap with internal spline:....... 270.300000 ms
+avg 100 x remap with internal spline:....... 250.330002 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000187
-avg 10 x remap with functor & internal bspl 278.300000 ms
-avg 10 x remap with functor & external bspl 215.100000 ms
+avg 100 x remap with functor & internal bspl 251.850006 ms
+avg 100 x remap with functor & external bspl 214.919998 ms
 warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000187
 difference original data/restored data:
@@ -1203,18 +1203,18 @@ warped image diff Mean: 0.000025
 warped image diff Maximum: 0.000159
 
 testing bc code PERIODIC spline degree 7 using Vc
-avg 10 x prefilter:........................ 18.000000 ms
-avg 10 x remap1 from pre-split coordinates: 69.300000 ms
+avg 100 x prefilter:........................ 9.630000 ms
+avg 100 x remap1 from pre-split coordinates: 65.480003 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000151
-avg 10 x remap1 from unsplit coordinates:.. 65.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 66.750000 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000151
-avg 10 x remap with internal spline:....... 93.100000 ms
+avg 100 x remap with internal spline:....... 83.290001 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000151
-avg 10 x remap with functor & internal bspl 109.600000 ms
-avg 10 x remap with functor & external bspl 68.700000 ms
+avg 100 x remap with functor & internal bspl 84.239998 ms
+avg 100 x remap with functor & external bspl 67.029999 ms
 warped image diff Mean: 0.000024
 warped image diff Maximum: 0.000151
 difference original data/restored data:
@@ -1230,18 +1230,18 @@ Image information:
   pixel type:  UINT8
   color image: yes (number of channels: 3)
 testing bc code MIRROR spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.600000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 12.400000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 25.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 18.090000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 51.700000 ms
+avg 100 x remap with internal spline:....... 32.470001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 60.600000 ms
-avg 10 x remap with functor & external bspl 33.200000 ms
+avg 100 x remap with functor & internal bspl 37.230000 ms
+avg 100 x remap with functor & external bspl 22.940001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1249,18 +1249,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 12.000000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 11.480000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 15.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 11.430000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 37.900000 ms
+avg 100 x remap with internal spline:....... 26.070000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 39.500000 ms
-avg 10 x remap with functor & external bspl 13.700000 ms
+avg 100 x remap with functor & internal bspl 25.940001 ms
+avg 100 x remap with functor & external bspl 11.360000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1268,18 +1268,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 20.700000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 19.110001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 32.300000 ms
+avg 100 x remap1 from unsplit coordinates:.. 26.260000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 63.900000 ms
+avg 100 x remap with internal spline:....... 40.439999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 68.300000 ms
-avg 10 x remap with functor & external bspl 30.700000 ms
+avg 100 x remap with functor & internal bspl 43.080002 ms
+avg 100 x remap with functor & external bspl 28.760000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1287,18 +1287,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.700000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 13.010000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 22.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 14.040000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 46.700000 ms
+avg 100 x remap with internal spline:....... 28.840000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 49.000000 ms
-avg 10 x remap with functor & external bspl 22.700000 ms
+avg 100 x remap with functor & internal bspl 29.299999 ms
+avg 100 x remap with functor & external bspl 14.690000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1306,18 +1306,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 2
-avg 10 x prefilter:........................ 16.799999 ms
-avg 10 x remap1 from pre-split coordinates: 35.800000 ms
+avg 100 x prefilter:........................ 14.670000 ms
+avg 100 x remap1 from pre-split coordinates: 29.530001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 42.300000 ms
+avg 100 x remap1 from unsplit coordinates:.. 37.340000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 99.800000 ms
+avg 100 x remap with internal spline:....... 65.540001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 83.400000 ms
-avg 10 x remap with functor & external bspl 46.300000 ms
+avg 100 x remap with functor & internal bspl 69.550003 ms
+avg 100 x remap with functor & external bspl 40.930000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1325,18 +1325,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 2 using Vc
-avg 10 x prefilter:........................ 24.200001 ms
-avg 10 x remap1 from pre-split coordinates: 25.000000 ms
+avg 100 x prefilter:........................ 15.850000 ms
+avg 100 x remap1 from pre-split coordinates: 18.450001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 24.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 19.660000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 75.900000 ms
+avg 100 x remap with internal spline:....... 50.340000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 82.900000 ms
-avg 10 x remap with functor & external bspl 21.900000 ms
+avg 100 x remap with functor & internal bspl 50.759998 ms
+avg 100 x remap with functor & external bspl 20.860001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1344,18 +1344,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 3
-avg 10 x prefilter:........................ 18.700001 ms
-avg 10 x remap1 from pre-split coordinates: 45.000000 ms
+avg 100 x prefilter:........................ 14.590000 ms
+avg 100 x remap1 from pre-split coordinates: 44.580002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 51.750000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 101.300000 ms
+avg 100 x remap with internal spline:....... 80.589996 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 106.700000 ms
-avg 10 x remap with functor & external bspl 53.800000 ms
+avg 100 x remap with functor & internal bspl 82.639999 ms
+avg 100 x remap with functor & external bspl 53.869999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1363,18 +1363,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 3 using Vc
-avg 10 x prefilter:........................ 21.600000 ms
-avg 10 x remap1 from pre-split coordinates: 37.300000 ms
+avg 100 x prefilter:........................ 16.030001 ms
+avg 100 x remap1 from pre-split coordinates: 25.670000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 31.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 27.549999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 76.200000 ms
+avg 100 x remap with internal spline:....... 58.160000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 86.300000 ms
-avg 10 x remap with functor & external bspl 29.300000 ms
+avg 100 x remap with functor & internal bspl 59.150002 ms
+avg 100 x remap with functor & external bspl 28.639999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1382,18 +1382,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 4
-avg 10 x prefilter:........................ 22.299999 ms
-avg 10 x remap1 from pre-split coordinates: 64.900000 ms
+avg 100 x prefilter:........................ 15.630000 ms
+avg 100 x remap1 from pre-split coordinates: 64.360001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 71.900000 ms
+avg 100 x remap1 from unsplit coordinates:.. 71.459999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 129.900000 ms
+avg 100 x remap with internal spline:....... 101.940002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 128.400000 ms
-avg 10 x remap with functor & external bspl 77.300000 ms
+avg 100 x remap with functor & internal bspl 105.209999 ms
+avg 100 x remap with functor & external bspl 75.250000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1401,18 +1401,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 4 using Vc
-avg 10 x prefilter:........................ 24.600000 ms
-avg 10 x remap1 from pre-split coordinates: 53.700000 ms
+avg 100 x prefilter:........................ 15.950000 ms
+avg 100 x remap1 from pre-split coordinates: 36.400002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 54.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 38.869999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 101.300000 ms
+avg 100 x remap with internal spline:....... 68.959999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 104.800000 ms
-avg 10 x remap with functor & external bspl 43.200000 ms
+avg 100 x remap with functor & internal bspl 69.779999 ms
+avg 100 x remap with functor & external bspl 39.169998 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1420,18 +1420,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 5
-avg 10 x prefilter:........................ 20.400000 ms
-avg 10 x remap1 from pre-split coordinates: 87.500000 ms
+avg 100 x prefilter:........................ 15.340000 ms
+avg 100 x remap1 from pre-split coordinates: 88.279999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 103.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 96.110001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 155.400000 ms
+avg 100 x remap with internal spline:....... 124.980003 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 152.900000 ms
-avg 10 x remap with functor & external bspl 97.600000 ms
+avg 100 x remap with functor & internal bspl 126.180000 ms
+avg 100 x remap with functor & external bspl 97.360001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1439,18 +1439,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 5 using Vc
-avg 10 x prefilter:........................ 25.100000 ms
-avg 10 x remap1 from pre-split coordinates: 49.000000 ms
+avg 100 x prefilter:........................ 16.290001 ms
+avg 100 x remap1 from pre-split coordinates: 49.049999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 61.700000 ms
+avg 100 x remap1 from unsplit coordinates:.. 50.720001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 108.600000 ms
+avg 100 x remap with internal spline:....... 81.769997 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 119.500000 ms
-avg 10 x remap with functor & external bspl 53.300000 ms
+avg 100 x remap with functor & internal bspl 82.510002 ms
+avg 100 x remap with functor & external bspl 51.299999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1458,18 +1458,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 6
-avg 10 x prefilter:........................ 26.900000 ms
-avg 10 x remap1 from pre-split coordinates: 115.600000 ms
+avg 100 x prefilter:........................ 17.709999 ms
+avg 100 x remap1 from pre-split coordinates: 115.839996 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 127.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 123.419998 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 191.100000 ms
+avg 100 x remap with internal spline:....... 155.440002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 186.300000 ms
-avg 10 x remap with functor & external bspl 130.500000 ms
+avg 100 x remap with functor & internal bspl 158.860001 ms
+avg 100 x remap with functor & external bspl 126.690002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1477,18 +1477,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 6 using Vc
-avg 10 x prefilter:........................ 35.400002 ms
-avg 10 x remap1 from pre-split coordinates: 70.900000 ms
+avg 100 x prefilter:........................ 17.379999 ms
+avg 100 x remap1 from pre-split coordinates: 64.870003 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 66.800000 ms
+avg 100 x remap1 from unsplit coordinates:.. 66.139999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 140.800000 ms
+avg 100 x remap with internal spline:....... 98.690002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 133.800000 ms
-avg 10 x remap with functor & external bspl 67.900000 ms
+avg 100 x remap with functor & internal bspl 100.389999 ms
+avg 100 x remap with functor & external bspl 67.099998 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1496,18 +1496,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 7
-avg 10 x prefilter:........................ 23.400000 ms
-avg 10 x remap1 from pre-split coordinates: 149.800000 ms
+avg 100 x prefilter:........................ 18.000000 ms
+avg 100 x remap1 from pre-split coordinates: 148.240005 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 159.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 155.639999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 215.400000 ms
+avg 100 x remap with internal spline:....... 187.850006 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 218.300000 ms
-avg 10 x remap with functor & external bspl 160.600000 ms
+avg 100 x remap with functor & internal bspl 189.020004 ms
+avg 100 x remap with functor & external bspl 156.029999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1515,18 +1515,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code MIRROR spline degree 7 using Vc
-avg 10 x prefilter:........................ 30.500000 ms
-avg 10 x remap1 from pre-split coordinates: 81.400000 ms
+avg 100 x prefilter:........................ 17.650000 ms
+avg 100 x remap1 from pre-split coordinates: 80.959999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 82.700000 ms
+avg 100 x remap1 from unsplit coordinates:.. 82.300003 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 166.900000 ms
+avg 100 x remap with internal spline:....... 115.220001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 162.800000 ms
-avg 10 x remap with functor & external bspl 84.900000 ms
+avg 100 x remap with functor & internal bspl 115.860001 ms
+avg 100 x remap with functor & external bspl 83.300003 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1534,18 +1534,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.800000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 12.090000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 28.500000 ms
+avg 100 x remap1 from unsplit coordinates:.. 18.080000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 52.300000 ms
+avg 100 x remap with internal spline:....... 32.189999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 62.300000 ms
-avg 10 x remap with functor & external bspl 31.300000 ms
+avg 100 x remap with functor & internal bspl 36.959999 ms
+avg 100 x remap with functor & external bspl 22.459999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1553,18 +1553,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 14.600000 ms
+avg 100 x prefilter:........................ 0.000000 ms
+avg 100 x remap1 from pre-split coordinates: 11.410000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 15.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 11.570000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 39.600000 ms
+avg 100 x remap with internal spline:....... 26.049999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 40.800000 ms
-avg 10 x remap with functor & external bspl 13.900000 ms
+avg 100 x remap with functor & internal bspl 26.200001 ms
+avg 100 x remap with functor & external bspl 11.520000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1572,18 +1572,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 26.100000 ms
+avg 100 x prefilter:........................ 0.020000 ms
+avg 100 x remap1 from pre-split coordinates: 18.969999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 27.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 26.520000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 65.600000 ms
+avg 100 x remap with internal spline:....... 41.200001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 66.500000 ms
-avg 10 x remap with functor & external bspl 44.100000 ms
+avg 100 x remap with functor & internal bspl 43.680000 ms
+avg 100 x remap with functor & external bspl 29.430000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1591,18 +1591,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 19.800000 ms
+avg 100 x prefilter:........................ 0.020000 ms
+avg 100 x remap1 from pre-split coordinates: 13.040000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 18.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 14.260000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 45.800000 ms
+avg 100 x remap with internal spline:....... 28.900000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 48.900000 ms
-avg 10 x remap with functor & external bspl 23.300000 ms
+avg 100 x remap with functor & internal bspl 29.799999 ms
+avg 100 x remap with functor & external bspl 14.950000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1610,18 +1610,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 2
-avg 10 x prefilter:........................ 16.200001 ms
-avg 10 x remap1 from pre-split coordinates: 31.300000 ms
+avg 100 x prefilter:........................ 14.290000 ms
+avg 100 x remap1 from pre-split coordinates: 29.660000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 37.700000 ms
+avg 100 x remap1 from unsplit coordinates:.. 37.439999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 99.100000 ms
+avg 100 x remap with internal spline:....... 65.669998 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 106.000000 ms
-avg 10 x remap with functor & external bspl 50.800000 ms
+avg 100 x remap with functor & internal bspl 69.620003 ms
+avg 100 x remap with functor & external bspl 41.060001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1629,18 +1629,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 2 using Vc
-avg 10 x prefilter:........................ 25.299999 ms
-avg 10 x remap1 from pre-split coordinates: 29.500000 ms
+avg 100 x prefilter:........................ 15.840000 ms
+avg 100 x remap1 from pre-split coordinates: 18.030001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 29.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 19.959999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 79.100000 ms
+avg 100 x remap with internal spline:....... 50.389999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 83.200000 ms
-avg 10 x remap with functor & external bspl 31.300000 ms
+avg 100 x remap with functor & internal bspl 51.840000 ms
+avg 100 x remap with functor & external bspl 21.070000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1648,18 +1648,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 3
-avg 10 x prefilter:........................ 16.299999 ms
-avg 10 x remap1 from pre-split coordinates: 56.400000 ms
+avg 100 x prefilter:........................ 14.260000 ms
+avg 100 x remap1 from pre-split coordinates: 44.740002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.600000 ms
+avg 100 x remap1 from unsplit coordinates:.. 51.730000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 111.800000 ms
+avg 100 x remap with internal spline:....... 80.480003 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 113.400000 ms
-avg 10 x remap with functor & external bspl 58.500000 ms
+avg 100 x remap with functor & internal bspl 83.169998 ms
+avg 100 x remap with functor & external bspl 54.639999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1667,18 +1667,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 3 using Vc
-avg 10 x prefilter:........................ 23.600000 ms
-avg 10 x remap1 from pre-split coordinates: 27.000000 ms
+avg 100 x prefilter:........................ 15.560000 ms
+avg 100 x remap1 from pre-split coordinates: 25.990000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 42.000000 ms
+avg 100 x remap1 from unsplit coordinates:.. 28.860001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 95.600000 ms
+avg 100 x remap with internal spline:....... 58.119999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 88.600000 ms
-avg 10 x remap with functor & external bspl 36.800000 ms
+avg 100 x remap with functor & internal bspl 58.869999 ms
+avg 100 x remap with functor & external bspl 28.450001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1686,18 +1686,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 4
-avg 10 x prefilter:........................ 19.400000 ms
-avg 10 x remap1 from pre-split coordinates: 64.500000 ms
+avg 100 x prefilter:........................ 15.610000 ms
+avg 100 x remap1 from pre-split coordinates: 64.500000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 71.400000 ms
+avg 100 x remap1 from unsplit coordinates:.. 72.089996 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 122.400000 ms
+avg 100 x remap with internal spline:....... 101.900002 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 127.800000 ms
-avg 10 x remap with functor & external bspl 76.000000 ms
+avg 100 x remap with functor & internal bspl 105.269997 ms
+avg 100 x remap with functor & external bspl 75.680000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1705,18 +1705,18 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 4 using Vc
-avg 10 x prefilter:........................ 23.500000 ms
-avg 10 x remap1 from pre-split coordinates: 46.700000 ms
+avg 100 x prefilter:........................ 15.950000 ms
+avg 100 x remap1 from pre-split coordinates: 36.590000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 38.619999 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 101.500000 ms
+avg 100 x remap with internal spline:....... 69.599998 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 106.000000 ms
-avg 10 x remap with functor & external bspl 42.100000 ms
+avg 100 x remap with functor & internal bspl 70.730003 ms
+avg 100 x remap with functor & external bspl 40.070000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 difference original data/restored data:
@@ -1724,3171 +1724,10 @@ warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
 
 testing bc code REFLECT spline degree 5
-avg 10 x prefilter:........................ 19.400000 ms
-avg 10 x remap1 from pre-split coordinates: 101.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 99.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 152.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 166.600000 ms
-avg 10 x remap with functor & external bspl 98.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 5 using Vc
-avg 10 x prefilter:........................ 27.500000 ms
-avg 10 x remap1 from pre-split coordinates: 55.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 61.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 113.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 117.200000 ms
-avg 10 x remap with functor & external bspl 51.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 6
-avg 10 x prefilter:........................ 26.200001 ms
-avg 10 x remap1 from pre-split coordinates: 116.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 124.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 182.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 194.300000 ms
-avg 10 x remap with functor & external bspl 126.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 6 using Vc
-avg 10 x prefilter:........................ 33.200001 ms
-avg 10 x remap1 from pre-split coordinates: 65.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 66.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 139.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 139.400000 ms
-avg 10 x remap with functor & external bspl 67.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 7
-avg 10 x prefilter:........................ 25.299999 ms
-avg 10 x remap1 from pre-split coordinates: 151.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 160.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 222.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 216.700000 ms
-avg 10 x remap with functor & external bspl 156.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 7 using Vc
-avg 10 x prefilter:........................ 31.000000 ms
-avg 10 x remap1 from pre-split coordinates: 82.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 81.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 154.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 151.500000 ms
-avg 10 x remap with functor & external bspl 84.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 14.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 23.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 51.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 60.600000 ms
-avg 10 x remap with functor & external bspl 29.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 13.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 14.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 39.700000 ms
+avg 100 x prefilter:........................ 15.390000 ms
+avg 100 x remap1 from pre-split coordinates: 88.750000 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 40.800000 ms
-avg 10 x remap with functor & external bspl 15.100000 ms
+avg 100 x remap1 from unsplit coordinates:.. 96.610001 ms
 warped image diff Mean: 0.000000
 warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 26.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 37.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 65.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 71.700000 ms
-avg 10 x remap with functor & external bspl 30.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 18.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 46.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 49.200000 ms
-avg 10 x remap with functor & external bspl 21.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 2
-avg 10 x prefilter:........................ 17.100000 ms
-avg 10 x remap1 from pre-split coordinates: 44.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 36.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 92.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 94.200000 ms
-avg 10 x remap with functor & external bspl 50.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 2 using Vc
-avg 10 x prefilter:........................ 23.500000 ms
-avg 10 x remap1 from pre-split coordinates: 29.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 26.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 75.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 82.400000 ms
-avg 10 x remap with functor & external bspl 30.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 3
-avg 10 x prefilter:........................ 17.600000 ms
-avg 10 x remap1 from pre-split coordinates: 56.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 56.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 104.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 115.200000 ms
-avg 10 x remap with functor & external bspl 52.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 3 using Vc
-avg 10 x prefilter:........................ 22.000000 ms
-avg 10 x remap1 from pre-split coordinates: 25.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 40.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 87.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 86.400000 ms
-avg 10 x remap with functor & external bspl 40.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 4
-avg 10 x prefilter:........................ 22.900000 ms
-avg 10 x remap1 from pre-split coordinates: 65.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 70.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 127.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 127.200000 ms
-avg 10 x remap with functor & external bspl 79.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 4 using Vc
-avg 10 x prefilter:........................ 24.900000 ms
-avg 10 x remap1 from pre-split coordinates: 39.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 39.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 107.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 109.600000 ms
-avg 10 x remap with functor & external bspl 39.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 5
-avg 10 x prefilter:........................ 21.600000 ms
-avg 10 x remap1 from pre-split coordinates: 88.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 94.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 165.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 154.300000 ms
-avg 10 x remap with functor & external bspl 94.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 5 using Vc
-avg 10 x prefilter:........................ 29.500000 ms
-avg 10 x remap1 from pre-split coordinates: 51.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 50.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 120.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 114.700000 ms
-avg 10 x remap with functor & external bspl 51.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 6
-avg 10 x prefilter:........................ 25.400000 ms
-avg 10 x remap1 from pre-split coordinates: 115.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 122.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 175.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 191.000000 ms
-avg 10 x remap with functor & external bspl 126.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 6 using Vc
-avg 10 x prefilter:........................ 30.700001 ms
-avg 10 x remap1 from pre-split coordinates: 68.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 66.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 141.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 136.900000 ms
-avg 10 x remap with functor & external bspl 66.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 7
-avg 10 x prefilter:........................ 26.500000 ms
-avg 10 x remap1 from pre-split coordinates: 151.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 154.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 219.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 218.800000 ms
-avg 10 x remap with functor & external bspl 153.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 7 using Vc
-avg 10 x prefilter:........................ 37.700001 ms
-avg 10 x remap1 from pre-split coordinates: 86.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 86.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 155.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 156.900000 ms
-avg 10 x remap with functor & external bspl 87.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 14.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 24.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 51.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 57.600000 ms
-avg 10 x remap with functor & external bspl 31.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 14.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 38.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 41.200000 ms
-avg 10 x remap with functor & external bspl 14.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 26.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 34.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 63.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 69.500000 ms
-avg 10 x remap with functor & external bspl 36.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 19.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 19.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 46.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 48.700000 ms
-avg 10 x remap with functor & external bspl 16.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 2
-avg 10 x prefilter:........................ 18.200001 ms
-avg 10 x remap1 from pre-split coordinates: 43.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 50.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 100.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 90.000000 ms
-avg 10 x remap with functor & external bspl 42.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 2 using Vc
-avg 10 x prefilter:........................ 20.700001 ms
-avg 10 x remap1 from pre-split coordinates: 29.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 27.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 75.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 78.100000 ms
-avg 10 x remap with functor & external bspl 28.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 3
-avg 10 x prefilter:........................ 17.400000 ms
-avg 10 x remap1 from pre-split coordinates: 44.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 112.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 107.600000 ms
-avg 10 x remap with functor & external bspl 53.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 3 using Vc
-avg 10 x prefilter:........................ 21.100000 ms
-avg 10 x remap1 from pre-split coordinates: 33.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 36.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 91.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 84.100000 ms
-avg 10 x remap with functor & external bspl 31.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 4
-avg 10 x prefilter:........................ 21.299999 ms
-avg 10 x remap1 from pre-split coordinates: 67.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 71.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 132.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 130.700000 ms
-avg 10 x remap with functor & external bspl 74.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 4 using Vc
-avg 10 x prefilter:........................ 27.600000 ms
-avg 10 x remap1 from pre-split coordinates: 40.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 43.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 103.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 111.000000 ms
-avg 10 x remap with functor & external bspl 46.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 5
-avg 10 x prefilter:........................ 20.100000 ms
-avg 10 x remap1 from pre-split coordinates: 93.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 102.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 157.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 160.800000 ms
-avg 10 x remap with functor & external bspl 96.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 5 using Vc
-avg 10 x prefilter:........................ 26.500000 ms
-avg 10 x remap1 from pre-split coordinates: 50.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 113.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 120.300000 ms
-avg 10 x remap with functor & external bspl 62.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 6
-avg 10 x prefilter:........................ 24.000000 ms
-avg 10 x remap1 from pre-split coordinates: 121.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 127.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 187.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 184.300000 ms
-avg 10 x remap with functor & external bspl 124.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 6 using Vc
-avg 10 x prefilter:........................ 35.799999 ms
-avg 10 x remap1 from pre-split coordinates: 65.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 65.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 135.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 136.600000 ms
-avg 10 x remap with functor & external bspl 68.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 7
-avg 10 x prefilter:........................ 25.600000 ms
-avg 10 x remap1 from pre-split coordinates: 146.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 156.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 222.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 217.000000 ms
-avg 10 x remap with functor & external bspl 153.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 7 using Vc
-avg 10 x prefilter:........................ 36.799999 ms
-avg 10 x remap1 from pre-split coordinates: 81.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 81.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 159.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 163.900000 ms
-avg 10 x remap with functor & external bspl 84.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing float data, double coordinates
-Image information:
-  file format: JPEG
-  width:       1920
-  height:      1079
-  pixel type:  UINT8
-  color image: yes (number of channels: 3)
-testing bc code MIRROR spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 18.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 26.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 41.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 47.600000 ms
-avg 10 x remap with functor & external bspl 31.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 9.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 24.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 23.100000 ms
-avg 10 x remap with functor & external bspl 14.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 35.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 44.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 55.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 59.900000 ms
-avg 10 x remap with functor & external bspl 44.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 12.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 15.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 26.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 27.600000 ms
-avg 10 x remap with functor & external bspl 17.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 2
-avg 10 x prefilter:........................ 16.500000 ms
-avg 10 x remap1 from pre-split coordinates: 43.200000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-avg 10 x remap1 from unsplit coordinates:.. 61.800000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-avg 10 x remap with internal spline:....... 85.900000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-avg 10 x remap with functor & internal bspl 87.100000 ms
-avg 10 x remap with functor & external bspl 51.700000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-difference original data/restored data:
-warped image diff Mean: 0.000017
-warped image diff Maximum: 0.000070
-
-testing bc code MIRROR spline degree 2 using Vc
-avg 10 x prefilter:........................ 12.500000 ms
-avg 10 x remap1 from pre-split coordinates: 19.900000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 26.100000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 42.000000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 48.800000 ms
-avg 10 x remap with functor & external bspl 24.900000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-difference original data/restored data:
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-
-testing bc code MIRROR spline degree 3
-avg 10 x prefilter:........................ 15.500000 ms
-avg 10 x remap1 from pre-split coordinates: 63.400000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000137
-avg 10 x remap1 from unsplit coordinates:.. 69.000000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000137
-avg 10 x remap with internal spline:....... 107.000000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000137
-avg 10 x remap with functor & internal bspl 107.200000 ms
-avg 10 x remap with functor & external bspl 73.600000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000137
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000117
-
-testing bc code MIRROR spline degree 3 using Vc
-avg 10 x prefilter:........................ 13.100000 ms
-avg 10 x remap1 from pre-split coordinates: 29.200000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000109
-avg 10 x remap1 from unsplit coordinates:.. 33.000000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000109
-avg 10 x remap with internal spline:....... 46.500000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000109
-avg 10 x remap with functor & internal bspl 51.500000 ms
-avg 10 x remap with functor & external bspl 23.600000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000109
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000109
-
-testing bc code MIRROR spline degree 4
-avg 10 x prefilter:........................ 25.700001 ms
-avg 10 x remap1 from pre-split coordinates: 93.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 100.700000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 142.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 140.300000 ms
-avg 10 x remap with functor & external bspl 101.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-
-testing bc code MIRROR spline degree 4 using Vc
-avg 10 x prefilter:........................ 14.000000 ms
-avg 10 x remap1 from pre-split coordinates: 41.500000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-avg 10 x remap1 from unsplit coordinates:.. 34.100000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-avg 10 x remap with internal spline:....... 62.500000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-avg 10 x remap with functor & internal bspl 64.200000 ms
-avg 10 x remap with functor & external bspl 34.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000134
-
-testing bc code MIRROR spline degree 5
-avg 10 x prefilter:........................ 27.100000 ms
-avg 10 x remap1 from pre-split coordinates: 125.400000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000102
-avg 10 x remap1 from unsplit coordinates:.. 129.700000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000102
-avg 10 x remap with internal spline:....... 178.800000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000102
-avg 10 x remap with functor & internal bspl 177.500000 ms
-avg 10 x remap with functor & external bspl 133.900000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000102
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000101
-
-testing bc code MIRROR spline degree 5 using Vc
-avg 10 x prefilter:........................ 14.900000 ms
-avg 10 x remap1 from pre-split coordinates: 43.600000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000102
-avg 10 x remap1 from unsplit coordinates:.. 60.200000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000102
-avg 10 x remap with internal spline:....... 77.700000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000102
-avg 10 x remap with functor & internal bspl 80.400000 ms
-avg 10 x remap with functor & external bspl 42.500000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000102
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000102
-
-testing bc code MIRROR spline degree 6
-avg 10 x prefilter:........................ 42.700001 ms
-avg 10 x remap1 from pre-split coordinates: 166.600000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000114
-avg 10 x remap1 from unsplit coordinates:.. 170.500000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000114
-avg 10 x remap with internal spline:....... 231.600000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000114
-avg 10 x remap with functor & internal bspl 230.000000 ms
-avg 10 x remap with functor & external bspl 178.500000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000114
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000111
-
-testing bc code MIRROR spline degree 6 using Vc
-avg 10 x prefilter:........................ 16.500000 ms
-avg 10 x remap1 from pre-split coordinates: 55.200000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000123
-avg 10 x remap1 from unsplit coordinates:.. 55.500000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000123
-avg 10 x remap with internal spline:....... 91.800000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000123
-avg 10 x remap with functor & internal bspl 86.600000 ms
-avg 10 x remap with functor & external bspl 56.600000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000123
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000123
-
-testing bc code MIRROR spline degree 7
-avg 10 x prefilter:........................ 32.099998 ms
-avg 10 x remap1 from pre-split coordinates: 204.600000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000123
-avg 10 x remap1 from unsplit coordinates:.. 212.200000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000123
-avg 10 x remap with internal spline:....... 263.600000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000123
-avg 10 x remap with functor & internal bspl 267.700000 ms
-avg 10 x remap with functor & external bspl 214.100000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000123
-difference original data/restored data:
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000112
-
-testing bc code MIRROR spline degree 7 using Vc
-avg 10 x prefilter:........................ 16.900000 ms
-avg 10 x remap1 from pre-split coordinates: 85.700000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000131
-avg 10 x remap1 from unsplit coordinates:.. 71.700000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000131
-avg 10 x remap with internal spline:....... 101.500000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000131
-avg 10 x remap with functor & internal bspl 104.800000 ms
-avg 10 x remap with functor & external bspl 69.300000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000131
-difference original data/restored data:
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000131
-
-testing bc code REFLECT spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 20.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 28.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 39.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 46.500000 ms
-avg 10 x remap with functor & external bspl 28.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 10.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 11.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 21.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 21.500000 ms
-avg 10 x remap with functor & external bspl 13.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 25.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 34.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 59.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 68.800000 ms
-avg 10 x remap with functor & external bspl 50.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 13.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 25.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 27.400000 ms
-avg 10 x remap with functor & external bspl 16.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 2
-avg 10 x prefilter:........................ 16.900000 ms
-avg 10 x remap1 from pre-split coordinates: 41.000000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000092
-avg 10 x remap1 from unsplit coordinates:.. 52.400000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000092
-avg 10 x remap with internal spline:....... 88.100000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000092
-avg 10 x remap with functor & internal bspl 85.700000 ms
-avg 10 x remap with functor & external bspl 54.500000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000092
-difference original data/restored data:
-warped image diff Mean: 0.000017
-warped image diff Maximum: 0.000078
-
-testing bc code REFLECT spline degree 2 using Vc
-avg 10 x prefilter:........................ 12.400000 ms
-avg 10 x remap1 from pre-split coordinates: 18.500000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 26.200000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 45.600000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 45.400000 ms
-avg 10 x remap with functor & external bspl 23.800000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-difference original data/restored data:
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-
-testing bc code REFLECT spline degree 3
-avg 10 x prefilter:........................ 16.100000 ms
-avg 10 x remap1 from pre-split coordinates: 62.000000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000144
-avg 10 x remap1 from unsplit coordinates:.. 71.900000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000144
-avg 10 x remap with internal spline:....... 105.600000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000144
-avg 10 x remap with functor & internal bspl 111.600000 ms
-avg 10 x remap with functor & external bspl 72.500000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000144
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000135
-
-testing bc code REFLECT spline degree 3 using Vc
-avg 10 x prefilter:........................ 12.300000 ms
-avg 10 x remap1 from pre-split coordinates: 26.200000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 32.200000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 53.500000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 54.400000 ms
-avg 10 x remap with functor & external bspl 30.100000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-
-testing bc code REFLECT spline degree 4
-avg 10 x prefilter:........................ 27.700001 ms
-avg 10 x remap1 from pre-split coordinates: 92.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap1 from unsplit coordinates:.. 99.300000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with internal spline:....... 139.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with functor & internal bspl 146.700000 ms
-avg 10 x remap with functor & external bspl 101.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000147
-
-testing bc code REFLECT spline degree 4 using Vc
-avg 10 x prefilter:........................ 15.100000 ms
-avg 10 x remap1 from pre-split coordinates: 30.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-avg 10 x remap1 from unsplit coordinates:.. 36.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-avg 10 x remap with internal spline:....... 72.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-avg 10 x remap with functor & internal bspl 71.200000 ms
-avg 10 x remap with functor & external bspl 32.500000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000163
-
-testing bc code REFLECT spline degree 5
-avg 10 x prefilter:........................ 29.100000 ms
-avg 10 x remap1 from pre-split coordinates: 122.800000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000130
-avg 10 x remap1 from unsplit coordinates:.. 138.800000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000130
-avg 10 x remap with internal spline:....... 178.900000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000130
-avg 10 x remap with functor & internal bspl 168.800000 ms
-avg 10 x remap with functor & external bspl 133.400000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000130
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000129
-
-testing bc code REFLECT spline degree 5 using Vc
-avg 10 x prefilter:........................ 15.100000 ms
-avg 10 x remap1 from pre-split coordinates: 40.300000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000124
-avg 10 x remap1 from unsplit coordinates:.. 54.400000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000124
-avg 10 x remap with internal spline:....... 74.000000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000124
-avg 10 x remap with functor & internal bspl 70.900000 ms
-avg 10 x remap with functor & external bspl 43.400000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000124
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000124
-
-testing bc code REFLECT spline degree 6
-avg 10 x prefilter:........................ 40.099998 ms
-avg 10 x remap1 from pre-split coordinates: 161.200000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 171.200000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 230.800000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 228.600000 ms
-avg 10 x remap with functor & external bspl 174.500000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000145
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000163
-
-testing bc code REFLECT spline degree 6 using Vc
-avg 10 x prefilter:........................ 15.900000 ms
-avg 10 x remap1 from pre-split coordinates: 53.000000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000171
-avg 10 x remap1 from unsplit coordinates:.. 54.300000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000171
-avg 10 x remap with internal spline:....... 87.700000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000171
-avg 10 x remap with functor & internal bspl 91.000000 ms
-avg 10 x remap with functor & external bspl 55.000000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000171
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000171
-
-testing bc code REFLECT spline degree 7
-avg 10 x prefilter:........................ 34.000000 ms
-avg 10 x remap1 from pre-split coordinates: 206.900000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000154
-avg 10 x remap1 from unsplit coordinates:.. 216.200000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000154
-avg 10 x remap with internal spline:....... 273.800000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000154
-avg 10 x remap with functor & internal bspl 266.500000 ms
-avg 10 x remap with functor & external bspl 215.600000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000154
-difference original data/restored data:
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000165
-
-testing bc code REFLECT spline degree 7 using Vc
-avg 10 x prefilter:........................ 15.900000 ms
-avg 10 x remap1 from pre-split coordinates: 66.500000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000138
-avg 10 x remap1 from unsplit coordinates:.. 71.000000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000138
-avg 10 x remap with internal spline:....... 100.100000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000138
-avg 10 x remap with functor & internal bspl 102.300000 ms
-avg 10 x remap with functor & external bspl 72.900000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000138
-difference original data/restored data:
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000138
-
-testing bc code NATURAL spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 18.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 25.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 37.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 45.900000 ms
-avg 10 x remap with functor & external bspl 34.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 9.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 23.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 24.900000 ms
-avg 10 x remap with functor & external bspl 14.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 32.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 32.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 53.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 60.500000 ms
-avg 10 x remap with functor & external bspl 49.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 13.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 16.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 25.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 30.200000 ms
-avg 10 x remap with functor & external bspl 17.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 2
-avg 10 x prefilter:........................ 15.700000 ms
-avg 10 x remap1 from pre-split coordinates: 50.800000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-avg 10 x remap1 from unsplit coordinates:.. 46.900000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-avg 10 x remap with internal spline:....... 79.300000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-avg 10 x remap with functor & internal bspl 87.600000 ms
-avg 10 x remap with functor & external bspl 51.700000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000082
-difference original data/restored data:
-warped image diff Mean: 0.000017
-warped image diff Maximum: 0.000075
-
-testing bc code NATURAL spline degree 2 using Vc
-avg 10 x prefilter:........................ 12.600000 ms
-avg 10 x remap1 from pre-split coordinates: 20.000000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 25.800000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 44.900000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 49.500000 ms
-avg 10 x remap with functor & external bspl 25.400000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-difference original data/restored data:
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-
-testing bc code NATURAL spline degree 3
-avg 10 x prefilter:........................ 17.700001 ms
-avg 10 x remap1 from pre-split coordinates: 66.200000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000165
-avg 10 x remap1 from unsplit coordinates:.. 73.200000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000165
-avg 10 x remap with internal spline:....... 103.100000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000165
-avg 10 x remap with functor & internal bspl 99.100000 ms
-avg 10 x remap with functor & external bspl 71.100000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000165
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000144
-
-testing bc code NATURAL spline degree 3 using Vc
-avg 10 x prefilter:........................ 12.200000 ms
-avg 10 x remap1 from pre-split coordinates: 33.600000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 34.600000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 55.000000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 51.400000 ms
-avg 10 x remap with functor & external bspl 33.600000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000145
-
-testing bc code NATURAL spline degree 4
-avg 10 x prefilter:........................ 25.799999 ms
-avg 10 x remap1 from pre-split coordinates: 92.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-avg 10 x remap1 from unsplit coordinates:.. 99.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-avg 10 x remap with internal spline:....... 142.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-avg 10 x remap with functor & internal bspl 149.900000 ms
-avg 10 x remap with functor & external bspl 101.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000171
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000198
-
-testing bc code NATURAL spline degree 4 using Vc
-avg 10 x prefilter:........................ 13.600000 ms
-avg 10 x remap1 from pre-split coordinates: 32.600000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-avg 10 x remap1 from unsplit coordinates:.. 32.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-avg 10 x remap with internal spline:....... 66.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-avg 10 x remap with functor & internal bspl 64.200000 ms
-avg 10 x remap with functor & external bspl 37.000000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000159
-
-testing bc code NATURAL spline degree 5
-avg 10 x prefilter:........................ 27.500000 ms
-avg 10 x remap1 from pre-split coordinates: 123.700000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000194
-avg 10 x remap1 from unsplit coordinates:.. 129.300000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000194
-avg 10 x remap with internal spline:....... 168.000000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000194
-avg 10 x remap with functor & internal bspl 175.000000 ms
-avg 10 x remap with functor & external bspl 131.000000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000194
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000180
-
-testing bc code NATURAL spline degree 5 using Vc
-avg 10 x prefilter:........................ 16.100000 ms
-avg 10 x remap1 from pre-split coordinates: 48.200000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000171
-avg 10 x remap1 from unsplit coordinates:.. 58.300000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000171
-avg 10 x remap with internal spline:....... 79.100000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000171
-avg 10 x remap with functor & internal bspl 79.200000 ms
-avg 10 x remap with functor & external bspl 43.800000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000171
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000171
-
-testing bc code NATURAL spline degree 6
-avg 10 x prefilter:........................ 42.500000 ms
-avg 10 x remap1 from pre-split coordinates: 165.100000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000184
-avg 10 x remap1 from unsplit coordinates:.. 168.700000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000184
-avg 10 x remap with internal spline:....... 225.200000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000184
-avg 10 x remap with functor & internal bspl 226.300000 ms
-avg 10 x remap with functor & external bspl 170.900000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000184
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000174
-
-testing bc code NATURAL spline degree 6 using Vc
-avg 10 x prefilter:........................ 17.500000 ms
-avg 10 x remap1 from pre-split coordinates: 67.400000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000179
-avg 10 x remap1 from unsplit coordinates:.. 56.900000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000179
-avg 10 x remap with internal spline:....... 96.200000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000179
-avg 10 x remap with functor & internal bspl 91.800000 ms
-avg 10 x remap with functor & external bspl 69.200000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000179
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000179
-
-testing bc code NATURAL spline degree 7
-avg 10 x prefilter:........................ 41.900002 ms
-avg 10 x remap1 from pre-split coordinates: 205.500000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000214
-avg 10 x remap1 from unsplit coordinates:.. 210.200000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000214
-avg 10 x remap with internal spline:....... 283.100000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000214
-avg 10 x remap with functor & internal bspl 264.600000 ms
-avg 10 x remap with functor & external bspl 216.700000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000214
-difference original data/restored data:
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000214
-
-testing bc code NATURAL spline degree 7 using Vc
-avg 10 x prefilter:........................ 18.600000 ms
-avg 10 x remap1 from pre-split coordinates: 78.400000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000223
-avg 10 x remap1 from unsplit coordinates:.. 68.700000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000223
-avg 10 x remap with internal spline:....... 109.000000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000223
-avg 10 x remap with functor & internal bspl 110.900000 ms
-avg 10 x remap with functor & external bspl 69.400000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000223
-difference original data/restored data:
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000223
-
-testing bc code PERIODIC spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 20.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 29.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 42.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 52.200000 ms
-avg 10 x remap with functor & external bspl 35.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 9.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 23.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 23.700000 ms
-avg 10 x remap with functor & external bspl 14.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 34.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 42.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 56.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 60.000000 ms
-avg 10 x remap with functor & external bspl 49.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 12.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 16.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 25.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 27.400000 ms
-avg 10 x remap with functor & external bspl 15.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 2
-avg 10 x prefilter:........................ 19.000000 ms
-avg 10 x remap1 from pre-split coordinates: 41.100000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000084
-avg 10 x remap1 from unsplit coordinates:.. 48.200000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000084
-avg 10 x remap with internal spline:....... 81.600000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000084
-avg 10 x remap with functor & internal bspl 92.800000 ms
-avg 10 x remap with functor & external bspl 51.500000 ms
-warped image diff Mean: 0.000018
-warped image diff Maximum: 0.000084
-difference original data/restored data:
-warped image diff Mean: 0.000017
-warped image diff Maximum: 0.000076
-
-testing bc code PERIODIC spline degree 2 using Vc
-avg 10 x prefilter:........................ 13.100000 ms
-avg 10 x remap1 from pre-split coordinates: 20.100000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap1 from unsplit coordinates:.. 27.400000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with internal spline:....... 44.400000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-avg 10 x remap with functor & internal bspl 47.500000 ms
-avg 10 x remap with functor & external bspl 23.300000 ms
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-difference original data/restored data:
-warped image diff Mean: 0.000016
-warped image diff Maximum: 0.000078
-
-testing bc code PERIODIC spline degree 3
-avg 10 x prefilter:........................ 16.600000 ms
-avg 10 x remap1 from pre-split coordinates: 66.600000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000098
-avg 10 x remap1 from unsplit coordinates:.. 76.700000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000098
-avg 10 x remap with internal spline:....... 110.100000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000098
-avg 10 x remap with functor & internal bspl 108.000000 ms
-avg 10 x remap with functor & external bspl 70.700000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000098
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000094
-
-testing bc code PERIODIC spline degree 3 using Vc
-avg 10 x prefilter:........................ 10.200000 ms
-avg 10 x remap1 from pre-split coordinates: 30.100000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000098
-avg 10 x remap1 from unsplit coordinates:.. 31.500000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000098
-avg 10 x remap with internal spline:....... 51.000000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000098
-avg 10 x remap with functor & internal bspl 55.000000 ms
-avg 10 x remap with functor & external bspl 27.800000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000098
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000098
-
-testing bc code PERIODIC spline degree 4
-avg 10 x prefilter:........................ 27.600000 ms
-avg 10 x remap1 from pre-split coordinates: 90.100000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap1 from unsplit coordinates:.. 99.700000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with internal spline:....... 147.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-avg 10 x remap with functor & internal bspl 143.600000 ms
-avg 10 x remap with functor & external bspl 100.800000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000145
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000143
-
-testing bc code PERIODIC spline degree 4 using Vc
-avg 10 x prefilter:........................ 14.300000 ms
-avg 10 x remap1 from pre-split coordinates: 29.700000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap1 from unsplit coordinates:.. 46.200000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with internal spline:....... 64.300000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-avg 10 x remap with functor & internal bspl 65.100000 ms
-avg 10 x remap with functor & external bspl 35.400000 ms
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-difference original data/restored data:
-warped image diff Mean: 0.000045
-warped image diff Maximum: 0.000154
-
-testing bc code PERIODIC spline degree 5
-avg 10 x prefilter:........................ 28.500000 ms
-avg 10 x remap1 from pre-split coordinates: 123.900000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000114
-avg 10 x remap1 from unsplit coordinates:.. 138.200000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000114
-avg 10 x remap with internal spline:....... 178.100000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000114
-avg 10 x remap with functor & internal bspl 176.000000 ms
-avg 10 x remap with functor & external bspl 131.100000 ms
-warped image diff Mean: 0.000023
-warped image diff Maximum: 0.000114
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000114
-
-testing bc code PERIODIC spline degree 5 using Vc
-avg 10 x prefilter:........................ 14.200000 ms
-avg 10 x remap1 from pre-split coordinates: 40.400000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000111
-avg 10 x remap1 from unsplit coordinates:.. 44.300000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000111
-avg 10 x remap with internal spline:....... 87.500000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000111
-avg 10 x remap with functor & internal bspl 74.800000 ms
-avg 10 x remap with functor & external bspl 47.300000 ms
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000111
-difference original data/restored data:
-warped image diff Mean: 0.000022
-warped image diff Maximum: 0.000111
-
-testing bc code PERIODIC spline degree 6
-avg 10 x prefilter:........................ 39.599998 ms
-avg 10 x remap1 from pre-split coordinates: 168.900000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000131
-avg 10 x remap1 from unsplit coordinates:.. 169.800000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000131
-avg 10 x remap with internal spline:....... 231.800000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000131
-avg 10 x remap with functor & internal bspl 235.600000 ms
-avg 10 x remap with functor & external bspl 172.800000 ms
-warped image diff Mean: 0.000027
-warped image diff Maximum: 0.000131
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000132
-
-testing bc code PERIODIC spline degree 6 using Vc
-avg 10 x prefilter:........................ 16.900000 ms
-avg 10 x remap1 from pre-split coordinates: 53.700000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000131
-avg 10 x remap1 from unsplit coordinates:.. 55.800000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000131
-avg 10 x remap with internal spline:....... 84.100000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000131
-avg 10 x remap with functor & internal bspl 98.300000 ms
-avg 10 x remap with functor & external bspl 58.700000 ms
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000131
-difference original data/restored data:
-warped image diff Mean: 0.000026
-warped image diff Maximum: 0.000131
-
-testing bc code PERIODIC spline degree 7
-avg 10 x prefilter:........................ 44.200001 ms
-avg 10 x remap1 from pre-split coordinates: 210.400000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000187
-avg 10 x remap1 from unsplit coordinates:.. 215.200000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000187
-avg 10 x remap with internal spline:....... 272.600000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000187
-avg 10 x remap with functor & internal bspl 277.700000 ms
-avg 10 x remap with functor & external bspl 212.600000 ms
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000187
-difference original data/restored data:
-warped image diff Mean: 0.000025
-warped image diff Maximum: 0.000159
-
-testing bc code PERIODIC spline degree 7 using Vc
-avg 10 x prefilter:........................ 18.500000 ms
-avg 10 x remap1 from pre-split coordinates: 70.500000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000151
-avg 10 x remap1 from unsplit coordinates:.. 68.300000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000151
-avg 10 x remap with internal spline:....... 102.000000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000151
-avg 10 x remap with functor & internal bspl 106.500000 ms
-avg 10 x remap with functor & external bspl 68.800000 ms
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000151
-difference original data/restored data:
-warped image diff Mean: 0.000024
-warped image diff Maximum: 0.000151
-
-
-testing double data, float coordinates
-Image information:
-  file format: JPEG
-  width:       1920
-  height:      1079
-  pixel type:  UINT8
-  color image: yes (number of channels: 3)
-testing bc code MIRROR spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 26.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 52.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 54.900000 ms
-avg 10 x remap with functor & external bspl 20.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 14.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 37.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 39.800000 ms
-avg 10 x remap with functor & external bspl 13.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 29.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 36.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 63.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 67.300000 ms
-avg 10 x remap with functor & external bspl 33.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 18.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 44.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 48.000000 ms
-avg 10 x remap with functor & external bspl 19.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 2
-avg 10 x prefilter:........................ 16.400000 ms
-avg 10 x remap1 from pre-split coordinates: 39.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 48.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 89.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 96.900000 ms
-avg 10 x remap with functor & external bspl 41.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 2 using Vc
-avg 10 x prefilter:........................ 28.200001 ms
-avg 10 x remap1 from pre-split coordinates: 27.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 23.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 77.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 83.900000 ms
-avg 10 x remap with functor & external bspl 31.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 3
-avg 10 x prefilter:........................ 16.900000 ms
-avg 10 x remap1 from pre-split coordinates: 44.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 106.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 113.000000 ms
-avg 10 x remap with functor & external bspl 53.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 3 using Vc
-avg 10 x prefilter:........................ 24.200001 ms
-avg 10 x remap1 from pre-split coordinates: 37.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 33.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 81.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 96.700000 ms
-avg 10 x remap with functor & external bspl 39.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 4
-avg 10 x prefilter:........................ 19.900000 ms
-avg 10 x remap1 from pre-split coordinates: 63.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 70.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 130.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 123.300000 ms
-avg 10 x remap with functor & external bspl 72.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 4 using Vc
-avg 10 x prefilter:........................ 25.900000 ms
-avg 10 x remap1 from pre-split coordinates: 42.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 41.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 112.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 104.300000 ms
-avg 10 x remap with functor & external bspl 41.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 5
-avg 10 x prefilter:........................ 19.900000 ms
-avg 10 x remap1 from pre-split coordinates: 88.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 94.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 150.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 153.600000 ms
-avg 10 x remap with functor & external bspl 96.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 5 using Vc
-avg 10 x prefilter:........................ 24.600000 ms
-avg 10 x remap1 from pre-split coordinates: 66.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 50.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 112.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 113.700000 ms
-avg 10 x remap with functor & external bspl 51.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 6
-avg 10 x prefilter:........................ 23.799999 ms
-avg 10 x remap1 from pre-split coordinates: 119.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 126.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 190.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 182.000000 ms
-avg 10 x remap with functor & external bspl 122.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 6 using Vc
-avg 10 x prefilter:........................ 33.099998 ms
-avg 10 x remap1 from pre-split coordinates: 72.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 66.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 139.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 141.200000 ms
-avg 10 x remap with functor & external bspl 66.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 7
-avg 10 x prefilter:........................ 24.500000 ms
-avg 10 x remap1 from pre-split coordinates: 154.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 156.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 216.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 219.500000 ms
-avg 10 x remap with functor & external bspl 157.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code MIRROR spline degree 7 using Vc
-avg 10 x prefilter:........................ 32.200001 ms
-avg 10 x remap1 from pre-split coordinates: 85.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 83.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 151.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 150.500000 ms
-avg 10 x remap with functor & external bspl 85.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 22.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 49.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 55.700000 ms
-avg 10 x remap with functor & external bspl 28.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 13.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 15.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 38.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 39.400000 ms
-avg 10 x remap with functor & external bspl 13.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 26.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 34.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 67.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 67.600000 ms
-avg 10 x remap with functor & external bspl 33.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 20.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 44.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 47.000000 ms
-avg 10 x remap with functor & external bspl 21.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 2
-avg 10 x prefilter:........................ 17.200001 ms
-avg 10 x remap1 from pre-split coordinates: 39.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 37.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 98.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 95.500000 ms
-avg 10 x remap with functor & external bspl 48.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 2 using Vc
-avg 10 x prefilter:........................ 24.600000 ms
-avg 10 x remap1 from pre-split coordinates: 25.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 29.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 74.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 80.200000 ms
-avg 10 x remap with functor & external bspl 32.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 3
-avg 10 x prefilter:........................ 17.200001 ms
-avg 10 x remap1 from pre-split coordinates: 55.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 72.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 118.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 101.100000 ms
-avg 10 x remap with functor & external bspl 72.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 3 using Vc
-avg 10 x prefilter:........................ 23.200001 ms
-avg 10 x remap1 from pre-split coordinates: 35.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 35.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 91.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 83.200000 ms
-avg 10 x remap with functor & external bspl 35.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 4
-avg 10 x prefilter:........................ 20.700001 ms
-avg 10 x remap1 from pre-split coordinates: 63.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 70.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 127.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 137.000000 ms
-avg 10 x remap with functor & external bspl 72.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 4 using Vc
-avg 10 x prefilter:........................ 24.900000 ms
-avg 10 x remap1 from pre-split coordinates: 36.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 52.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 110.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 108.600000 ms
-avg 10 x remap with functor & external bspl 42.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 5
-avg 10 x prefilter:........................ 18.900000 ms
-avg 10 x remap1 from pre-split coordinates: 86.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 93.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 144.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 158.800000 ms
-avg 10 x remap with functor & external bspl 95.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 5 using Vc
-avg 10 x prefilter:........................ 28.500000 ms
-avg 10 x remap1 from pre-split coordinates: 52.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 123.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 122.400000 ms
-avg 10 x remap with functor & external bspl 58.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 6
-avg 10 x prefilter:........................ 26.000000 ms
-avg 10 x remap1 from pre-split coordinates: 117.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 128.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 176.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 190.100000 ms
-avg 10 x remap with functor & external bspl 122.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 6 using Vc
-avg 10 x prefilter:........................ 33.099998 ms
-avg 10 x remap1 from pre-split coordinates: 73.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 66.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 136.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 146.900000 ms
-avg 10 x remap with functor & external bspl 75.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 7
-avg 10 x prefilter:........................ 26.700001 ms
-avg 10 x remap1 from pre-split coordinates: 145.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 153.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 215.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 212.900000 ms
-avg 10 x remap with functor & external bspl 154.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code REFLECT spline degree 7 using Vc
-avg 10 x prefilter:........................ 36.200001 ms
-avg 10 x remap1 from pre-split coordinates: 86.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 84.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 156.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 161.000000 ms
-avg 10 x remap with functor & external bspl 86.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 25.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 50.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 53.800000 ms
-avg 10 x remap with functor & external bspl 30.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 14.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 14.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 36.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 38.300000 ms
-avg 10 x remap with functor & external bspl 14.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 24.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 33.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 60.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 67.300000 ms
-avg 10 x remap with functor & external bspl 31.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 18.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 46.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 48.200000 ms
-avg 10 x remap with functor & external bspl 18.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 2
-avg 10 x prefilter:........................ 16.600000 ms
-avg 10 x remap1 from pre-split coordinates: 35.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 36.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 89.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 96.900000 ms
-avg 10 x remap with functor & external bspl 41.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 2 using Vc
-avg 10 x prefilter:........................ 26.299999 ms
-avg 10 x remap1 from pre-split coordinates: 26.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 29.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 78.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 83.400000 ms
-avg 10 x remap with functor & external bspl 30.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 3
-avg 10 x prefilter:........................ 16.500000 ms
-avg 10 x remap1 from pre-split coordinates: 59.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 65.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 110.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 104.500000 ms
-avg 10 x remap with functor & external bspl 52.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 3 using Vc
-avg 10 x prefilter:........................ 23.000000 ms
-avg 10 x remap1 from pre-split coordinates: 31.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 37.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 89.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 90.900000 ms
-avg 10 x remap with functor & external bspl 34.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 4
-avg 10 x prefilter:........................ 21.100000 ms
-avg 10 x remap1 from pre-split coordinates: 69.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 76.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 136.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 127.900000 ms
-avg 10 x remap with functor & external bspl 71.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 4 using Vc
-avg 10 x prefilter:........................ 25.600000 ms
-avg 10 x remap1 from pre-split coordinates: 49.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 38.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 106.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 97.100000 ms
-avg 10 x remap with functor & external bspl 53.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 5
-avg 10 x prefilter:........................ 19.200001 ms
-avg 10 x remap1 from pre-split coordinates: 87.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 96.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 159.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 151.100000 ms
-avg 10 x remap with functor & external bspl 93.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 5 using Vc
-avg 10 x prefilter:........................ 26.200001 ms
-avg 10 x remap1 from pre-split coordinates: 51.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 115.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 116.100000 ms
-avg 10 x remap with functor & external bspl 56.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 6
-avg 10 x prefilter:........................ 25.400000 ms
-avg 10 x remap1 from pre-split coordinates: 114.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 121.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 185.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 183.200000 ms
-avg 10 x remap with functor & external bspl 122.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 6 using Vc
-avg 10 x prefilter:........................ 36.200001 ms
-avg 10 x remap1 from pre-split coordinates: 65.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 65.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 142.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 137.900000 ms
-avg 10 x remap with functor & external bspl 66.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 7
-avg 10 x prefilter:........................ 24.400000 ms
-avg 10 x remap1 from pre-split coordinates: 149.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 151.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 205.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 215.800000 ms
-avg 10 x remap with functor & external bspl 153.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code NATURAL spline degree 7 using Vc
-avg 10 x prefilter:........................ 30.799999 ms
-avg 10 x remap1 from pre-split coordinates: 83.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 84.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 172.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 160.400000 ms
-avg 10 x remap with functor & external bspl 93.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 0
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 16.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 26.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 52.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 55.400000 ms
-avg 10 x remap with functor & external bspl 25.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 0 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 13.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 13.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 36.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 40.500000 ms
-avg 10 x remap with functor & external bspl 13.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 1
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 27.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 35.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 62.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 66.300000 ms
-avg 10 x remap with functor & external bspl 32.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 1 using Vc
-avg 10 x prefilter:........................ 0.000000 ms
-avg 10 x remap1 from pre-split coordinates: 17.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 17.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 45.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 46.800000 ms
-avg 10 x remap with functor & external bspl 22.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 2
-avg 10 x prefilter:........................ 15.200000 ms
-avg 10 x remap1 from pre-split coordinates: 31.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 35.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 92.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 89.200000 ms
-avg 10 x remap with functor & external bspl 38.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 2 using Vc
-avg 10 x prefilter:........................ 22.299999 ms
-avg 10 x remap1 from pre-split coordinates: 26.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 31.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 79.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 83.700000 ms
-avg 10 x remap with functor & external bspl 28.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 3
-avg 10 x prefilter:........................ 15.900000 ms
-avg 10 x remap1 from pre-split coordinates: 57.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 51.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 109.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 111.600000 ms
-avg 10 x remap with functor & external bspl 60.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 3 using Vc
-avg 10 x prefilter:........................ 19.799999 ms
-avg 10 x remap1 from pre-split coordinates: 33.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 39.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 85.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 92.200000 ms
-avg 10 x remap with functor & external bspl 34.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 4
-avg 10 x prefilter:........................ 19.799999 ms
-avg 10 x remap1 from pre-split coordinates: 62.700000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 79.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 128.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 135.900000 ms
-avg 10 x remap with functor & external bspl 76.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 4 using Vc
-avg 10 x prefilter:........................ 26.000000 ms
-avg 10 x remap1 from pre-split coordinates: 48.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 45.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 92.200000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 111.100000 ms
-avg 10 x remap with functor & external bspl 42.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 5
-avg 10 x prefilter:........................ 21.000000 ms
-avg 10 x remap1 from pre-split coordinates: 86.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 92.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 152.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 160.100000 ms
-avg 10 x remap with functor & external bspl 98.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 5 using Vc
-avg 10 x prefilter:........................ 26.900000 ms
-avg 10 x remap1 from pre-split coordinates: 65.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 56.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 111.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 124.500000 ms
-avg 10 x remap with functor & external bspl 52.300000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 6
-avg 10 x prefilter:........................ 24.000000 ms
-avg 10 x remap1 from pre-split coordinates: 114.800000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 121.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 188.900000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 183.700000 ms
-avg 10 x remap with functor & external bspl 123.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 6 using Vc
-avg 10 x prefilter:........................ 36.599998 ms
-avg 10 x remap1 from pre-split coordinates: 73.600000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 66.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 130.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 143.300000 ms
-avg 10 x remap with functor & external bspl 68.100000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 7
-avg 10 x prefilter:........................ 24.299999 ms
-avg 10 x remap1 from pre-split coordinates: 147.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 161.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 216.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 215.800000 ms
-avg 10 x remap with functor & external bspl 154.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
-testing bc code PERIODIC spline degree 7 using Vc
-avg 10 x prefilter:........................ 33.200001 ms
-avg 10 x remap1 from pre-split coordinates: 86.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap1 from unsplit coordinates:.. 82.400000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with internal spline:....... 158.500000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-avg 10 x remap with functor & internal bspl 156.900000 ms
-avg 10 x remap with functor & external bspl 84.000000 ms
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-difference original data/restored data:
-warped image diff Mean: 0.000000
-warped image diff Maximum: 0.000000
-
diff --git a/prefilter.h b/filter.h
similarity index 54%
copy from prefilter.h
copy to filter.h
index ffc64fb..453f622 100644
--- a/prefilter.h
+++ b/filter.h
@@ -29,146 +29,66 @@
 /*                                                                      */
 /************************************************************************/
 
-/*! \file prefilter.h
+/*! \file filter.h
 
-    \brief Code to create the coefficient array for a b-spline.
+    \brief generic implementation of an n-pole forward-backward IIR filter for nD arrays
     
-    The coefficients can be generated in two ways (that I know of): the first
-    is by solving a set of equations which encode the constraints of the spline.
-    A good example of how this is done can be found in libeinspline. I term it
-    the 'linear algebra approach'. In this implementation, I have chosen what I
-    call the 'DSP approach'. In a nutshell, the DSP approach looks at the b-spline's
-    reconstruction by convolving the coefficients with a specific kernel. This
-    kernel acts as a low-pass filter. To counteract the effect of this filter and
-    obtain the input signal from the convolution of the coefficients, a high-pass
-    filter with the inverse transfer function to the low-pass is used. This high-pass
-    has infinite support, but can still be calculated precisely within the bounds of
-    the arithmetic precision the CPU offers, due to the properties it has.
+    This code was initially part of vspline's prefilter.h, but I factored it out
+    and disentangled it from the remainder of the code, since it's more general and
+    not specific to B-splines.
     
-    I recommend [CIT2000] for a formal explanation. At the core of my prefiltering
-    routines there is code from Philippe Thevenaz' accompanying code to this paper,
-    with slight modifications translating it to C++ and making it generic.
-    The greater part of this file deals with 'generifying' the process and to
-    employing multithreading and the CPU's vector units to gain speed.
+    The code in this file provides efficient filtering of nD arrays with an n-pole
+    forward-backward recursive filter, accepting a variety of boundary conditions and
+    optionally using multithreading and/or vectorization to speed things up.
     
-    This code makes heavy use of vigra, which provides handling of multidimensional
-    arrays and efficient handling of aggreagte types - to only mention two of it's
-    many qualities. The vectorization is done with Vc, which allowed me to code
-    the horizontal vectorization I use in a generic fashion.
+    The data have to be presented as vigra MultiArrayViews of elementary floating point
+    types or their 'aggregates' (TinyVectors, pixels, etc.), the code is dimension-agnostic
+    but templated to the array types used, so the dimensionality is not a run time parameter.
     
-    For now, this file offers two implementations in one: the unvectorized version,
-    available as solve_vigra(), and the vectorized version, solve_vc(). Note that
-    the vectorized code is more constrained in what numeric types it can process
-    (namely, only float, double and their aggregates).
-    Unit testing code for these two versions is in prefilter_test...
-    
-    In another version of this code I used vigra's BSPlineBase class to obtain prefilter
-    poles. This required passing the spline degree/order as a template parameter. Doing it
-    like this allows to make the Poles static members of the solver, but at the cost of
-    type proliferation. Here I chose not to follow this path and pass the spline order as a
-    parameter to the spline's constructor, thus reducing the number of solver specializations
-    and allowing automated testing with loops over the degree. This variant is slightly slower.
-
-    In addition to the code following the 'implicit scheme' proposed by Thevenaz, I provide
-    code to use an 'explicit scheme' to obtain the b-spline coefficients. The implicit scheme
-    makes assumptions about the continuation of the signal outside of the window of data which
-    is acceessible: that the data continue mirrored, reflected, etc. - but it proceeds to
-    capture these assumptions in formulae deriving suitable initial causal/anticausal coefficients
-    from them. Usually this is done with a certain 'horizon' which takes into account the limited
-    arithmetic precision of the calculations and abbreviates the initial coefficient calculation
-    to a certain chosen degree of precision. The same effect can be achieved by simply embedding
-    the knot point data into a frame containing extrapolated knot point data. If the frame is
-    chosen so wide that margin effects don't 'disturb' the core data, we end up with an equally
-    (im)precise result with an explicit scheme. The width of the frame now takes the roll of the
-    horizon used in the implicit scheme and has the same effect. While the explicit scheme needs
-    more memory, it has several advantages:
-
-    - there is no need to code specific routines for initial coefficient generation
-    - nor any need to explicitly run this code
-    - the iteration over the input becomes more straightforward
-    - any extrapolation scheme can be used easily
-
-    A disadvantage, apart from the higher memory consumption, is that one cannot give a
-    'precise' solution, which the implicit scheme can do for the cases it can handle. But what
-    is 'precise'? Certainly there is no precision beyond the arithmetic precision offered by
-    the underlying system. So if the horizon is chosen wide enough, the resulting coefficients
-    become the same with all schemes. They are interchangeable.
-
-    In an image-processing context, the extra memory needed would typically be a small
-    single-digit percentage - not really a bother. In my trials, I found the runtime differences
-    between the two approaches negligible and the simplification of the code so attractive that
-    I was tempted to choose the explicit scheme over the implicit. Yet since the code for the
-    implicit scheme is there already and some of it is even used in the explicit scheme I keep
-    both methods in the code base for now.
+    Note the code organization is bottom-up, so the highest-level code comes last.
+    Most code using filter.h will only call the final routine, filter_nd.
 */
 
-#ifndef VSPLINE_PREFILTER_H
-#define VSPLINE_PREFILTER_H
-
-#include <thread>
-#include <math.h>
-#include <complex>
-#include <cmath>
-#include <iostream>
-#include <array>
-#include <assert.h>
-
-#include <vigra/multi_array.hxx>
-#include <vigra/multi_iterator.hxx>
-#include <vigra/navigator.hxx>
-#include <vigra/bordertreatment.hxx>
-#include <vigra/multi_convolution.hxx>
+// include common.h for the border condition codes
+// TODO pull these out?
 
+#include <vector>
 #include "common.h"
 
+#ifndef VSPLINE_FILTER_H
+#define VSPLINE_FILTER_H
+
 namespace vspline {
 
-using namespace std ;
-using namespace vigra ;
-
-/// class solver performs the conversion of a 1D string of data to spline coefficients with
-/// the 'DSP aproach', which performs coefficient generation by means of an IIR filter.
-/// The DSP approach is extremely versatile and the code is elegant, so I abandoned even my
-/// optimized cubic spline code, which used linear algebra methods, in it's favour.
-/// The 1D solving is, later on, used repeatedly along the axes of multidimensional
-/// data, but the formulation of the solving process is unaware of the dimensionality
-/// of the data, it follows the 1D iterators it receives, no matter what strides these
-/// iterators use to pick out data along an axis.
+/// for each pole passed in, this filter will perform a forward-backward
+/// first order IIR filter, initially on the data passed in via in_iter, subsequently
+/// on the result of the application of the previous pole, using these recursions:
+/// 
+/// forward filter:
+///   
+/// x[n]' = x[n] + p * x[n-1]
+/// 
+/// backward filter:
+/// 
+/// x[n]'' = p * ( x[n+1]' - x[n]' )
+/// 
+/// the result will be deposited via out_iter, which may be an iterator over
+/// the same data in_iter iterates over, in which case operation is in-place.
+/// in_iter should be a const iterator, it's never used for writing data.
 ///
-/// With large data sets, and with higher dimensionality, processing separately along each
-/// axis consumes a lot of memory bandwidth. There are ways out of this dilemma by interleaving
-/// the code. Disregarding the calculation of initial causal and anticausal coefficients, the code
-/// to do this would perform the forward filtering step for all axes at the same time and then, later,
-/// the backward filtering step for all axes at the same time. This is possible, since the order
-/// of the filter steps is irrelevant, and the traversal of the data can be arranged so that
-/// values needed for context of the filter are always present (the filters are recursive and only
-/// 'look' one way). I have investigated these variants, but especially the need to calculate
-/// initial causal/anticausal coefficients, and the additional complications arising from
-/// vectorization, have kept me from choosing this path for the current body of code. With the
-/// inclusion of the explicit scheme for prefiltering, dimension-interleaved prefiltering becomes
-/// more feasible, and I anticipate revisiting it.
-///
-/// Here I am using a scheme where I make access to 1D subsets of the data very efficient (if necessary
-/// by buffering lines/stripes of data) and rely on the fact that such simple, fast access plays
-/// well with the compiler's optimizer and pipelining in the CPU. From the trials on my own system
-/// I conclude that this approach does not perform significantly worse than interleaving schemes
-/// and is much easier to formulate and understand. And with fast access to 1D subsets, higher order
-/// splines become less of an issue; the extra arithemtic to prefilter for, say, quintic splines is
-/// done very quickly, since no additional memory access is needed beyond a buffer's worth of data
-/// already present in core memory.
-///
-/// class solver needs two template arguments, one for the type of iterator over the incoming
-/// data, and one for the type of iterator to the resultant coefficients. These will usually be
-/// the same, but formulating the code with two separate types makes it more versatile.
-/// Optionally there's a third template argument, specifying 'mattype', the elementary type
+/// class filter needs three template arguments, one for the type of iterator over the incoming
+/// data, one for the type of iterator to the resultant coefficients, and one for the real type
+/// used in arithmetic operations. The iterators' types will usually be the same, but formulating
+/// the code with two separate types makes it more versatile.
+/// The third (optional) template argument, will usually be the elementary type
 /// of the iterator's value_type. When the value_types are vigra aggregates (TinyVectors etc.)
 /// vigra's ExpandElementResult mechanism will provide, but at times we may wish to be explicit
 /// here, e.g. when iterating over simdized types.
-
+  
 template < typename in_iter ,   // iterator over the knot point values
            typename out_iter ,  // iterator over the coefficient array
-           typename mattype = typename ExpandElementResult < typename in_iter::value_type > :: type >
-class solver
+           typename real_type > // type for single real value for calculations
+class filter
 {
   // both iterators must define value_type and have the same value_type
 
@@ -188,27 +108,24 @@ class solver
 //                   "prefilter output iterator must be random access iterator" ) ;
                   
   
-  /// typedef the fully qualified type for brevity
-  typedef solver<in_iter,out_iter,mattype> solver_type ;
+  /// typedef the fully qualified type for brevity, to make the typedefs below
+  /// a bit more legible
 
-public:
-  
-  const double* Pole ;               ///< Poles of the IIR filter
-//   ArrayVector<mattype> Pole ;        ///< Poles of the IIR filter
-  ArrayVector<int> Horizon ;         ///< as many 'Horizons' as Poles
-  mattype  Lambda ;                  ///< (potentiated) overall gain.  
-  const int NbPoles ;                ///< Number of filter poles
+  typedef filter < in_iter , out_iter , real_type > filter_type ;
+
+  const double* pole ;               ///< poles of the IIR filter
+  std::vector<int> horizon ;         ///< corresponding horizon values
+  real_type lambda ;                 ///< (potentiated) overall gain.  
+  const int npoles ;                 ///< Number of filter poles
   const int M ;                      ///< length of the data
-  const int SplineDegree ;           ///< degree of the spline
-  const int SplineOrder ;            ///< order of the spline (== degree + 1)
 
   /// the solving routine and initial coefficient finding routines are called via method pointers.
   /// these pointers are typedefed for better legibility:
   
-  typedef int       ( solver_type::*p_solve )  ( in_iter  input , out_iter output ) ;
-  typedef value_type ( solver_type::*p_icc1 )  ( in_iter  input , int k ) ;
-  typedef value_type ( solver_type::*p_icc2 )  ( out_iter input , int k ) ;
-  typedef value_type ( solver_type::*p_iacc )  ( out_iter input , int k ) ;
+  typedef int       ( filter_type::*p_solve )  ( in_iter  input , out_iter output ) ;
+  typedef value_type ( filter_type::*p_icc1 )  ( in_iter  input , int k ) ;
+  typedef value_type ( filter_type::*p_icc2 )  ( out_iter input , int k ) ;
+  typedef value_type ( filter_type::*p_iacc )  ( out_iter input , int k ) ;
 
   
   // these are the method pointers used:
@@ -218,15 +135,17 @@ public:
   p_icc2  _p_icc2 ;  ///< and equal data types of input and output
   p_iacc  _p_iacc ;  ///< pointer to calculation of initial anticausal coefficient
   
+public:
+  
  /// solve() takes two iterators, one to the input data and one to the output space.
  /// The containers must have the same size. It's safe to use solve() in-place.
 
- int solve ( in_iter  input , out_iter output )
+ int solve ( in_iter input , out_iter output )
  {
    (this->*_p_solve) ( input , output ) ;
  }
  
- /// for in-place operation we use the same solver routine.
+ /// for in-place operation we use the same filter routine.
  /// I checked: a handcoded in-place routine using only a single
  /// iterator is not noticeably faster than using one with two separate iterators.
  
@@ -235,18 +154,12 @@ public:
    (this->*_p_solve) ( data , data ) ;
  }
  
-// I now use code for te 'DSP approach' to calculating the spline coefficients, or,
-// to use DSP terminology, to perform the 'prefiltering'. I use adapted versions of
-// Thevenaz' code to calculate the initial causal and anticausal coefficients. The
-// code is changed just a little to work with an iterator instead of a C vector.
+// I use adapted versions of P. Thevenaz' code to calculate the initial causal and
+// anticausal coefficients for the filter. The code is changed just a little to work
+// with an iterator instead of a C vector.
 
 private:
 
-/// the next section holds routines to calculate the initial causal/anticausal coefficient
-/// for the solver routine. Since I now use the DSP approach to coefficient generation, this
-/// is where the boundary conditions manifest in code, while the solve routines are the same
-/// for all cases.
-///
 /// The code for mirrored BCs is adapted from P. Thevenaz' code, the other routines are my
 /// own doing, with aid from a digest of spline formulae I received from P. Thevenaz and which
 /// were helpful to verify the code against a trusted source. Anyway, it's all unit tested now
@@ -262,7 +175,6 @@ private:
 ///         sum a * q ^ k =  ---
 /// n->inf  k=0              1-q
 ///
-///
 /// first are mirror BCs. This is mirroring 'on bounds',
 /// f(-x) == f(x) and f(n-1 +x) == f(n-1 + x)
 ///
@@ -276,16 +188,17 @@ private:
 template < class IT >
 value_type icc_mirror ( IT c , int k )
 {
-  mattype z = Pole[k] ;
-  mattype zn, z2n, iz;
+  real_type z = pole[k] ;
+  real_type zn, z2n, iz;
   value_type Sum ;
   int  n ;
 
-  if (Horizon[k] < M) {
+  if (horizon[k] < M) {
     /* accelerated loop */
     zn = z;
     Sum = c[0];
-    for (n = 1; n < Horizon[k]; n++) {
+    for (n = 1; n < horizon[k]; n++)
+    {
       Sum += zn * c[n];
       zn *= z;
     }
@@ -297,12 +210,13 @@ value_type icc_mirror ( IT c , int k )
     z2n = pow(z, (double)(M - 1));
     Sum = c[0] + z2n * c[M - 1];
     z2n *= z2n * iz;
-    for (n = 1; n <= M - 2; n++) {
+    for (n = 1; n <= M - 2; n++)
+    {
       Sum += (zn + z2n) * c[n];
       zn *= z;
       z2n *= iz;
     }
-    Sum /= mattype(1.0 - zn * zn);
+    Sum /= real_type(1.0 - zn * zn);
   } 
 //  cout << "icc_mirror: " << Sum << endl ;
  return(Sum);
@@ -317,9 +231,9 @@ value_type icc_mirror ( IT c , int k )
 
 value_type iacc_mirror ( out_iter c , int k )
 {
-  mattype z = Pole[k] ;
+  real_type z = pole[k] ;
 
-  return( mattype( z / ( z * z - 1.0 ) ) * ( c [ M - 1 ] + z * c [ M - 2 ] ) );
+  return( real_type( z / ( z * z - 1.0 ) ) * ( c [ M - 1 ] + z * c [ M - 2 ] ) );
 }
 
 /// next are 'antimirrored' BCs. This is the same as 'natural' BCs: the signal is
@@ -332,19 +246,21 @@ value_type iacc_mirror ( out_iter c , int k )
 template < class IT >
 value_type icc_natural ( IT c , int k )
 {
-  mattype z = Pole[k] ;
-  mattype zn, z2n, iz;
+  real_type z = pole[k] ;
+  real_type zn, z2n, iz;
   value_type Sum , c02 ;
   int  n ;
 
   // f(x) - f(0) == f(0) - f(-x)
   // f(-x) == 2 * f(0) - f(x)
   
-  if (Horizon[k] < M) {
+  if (horizon[k] < M)
+  {
     c02 = c[0] + c[0] ;
     zn = z;
     Sum = c[0];
-    for (n = 1; n < Horizon[k]; n++) {
+    for (n = 1; n < horizon[k]; n++)
+    {
       Sum += zn * ( c02 - c[n] ) ;
       zn *= z;
     }
@@ -354,14 +270,15 @@ value_type icc_natural ( IT c , int k )
     zn = z;
     iz = 1.0 / z;
     z2n = pow(z, (double)(M - 1));                                     // z2n == z^M-1
-    Sum = mattype( ( 1.0 + z ) / ( 1.0 - z ) ) * ( c[0] - z2n * c[M - 1] );
+    Sum = real_type( ( 1.0 + z ) / ( 1.0 - z ) ) * ( c[0] - z2n * c[M - 1] );
     z2n *= z2n * iz;                                                   // z2n == z^2M-3
-    for (n = 1; n <= M - 2; n++) {
+    for (n = 1; n <= M - 2; n++)
+    {
       Sum -= (zn - z2n) * c[n];
       zn *= z;
       z2n *= iz;
     }
-    return(Sum / mattype(1.0 - zn * zn));
+    return(Sum / real_type(1.0 - zn * zn));
   } 
 }
 
@@ -371,9 +288,9 @@ value_type icc_natural ( IT c , int k )
 
 value_type iacc_natural ( out_iter c , int k )
 {
-  mattype z = Pole[k] ;
+  real_type z = pole[k] ;
 
-  return - mattype( z / ( ( 1.0 - z ) * ( 1.0 - z ) ) ) * ( c [ M - 1 ] - z * c [ M - 2 ] ) ;
+  return - real_type( z / ( ( 1.0 - z ) * ( 1.0 - z ) ) ) * ( c [ M - 1 ] - z * c [ M - 2 ] ) ;
 }
 
 /// next are reflective BCs. This is mirroring 'between bounds':
@@ -390,15 +307,17 @@ value_type iacc_natural ( out_iter c , int k )
 template < class IT >
 value_type icc_reflect ( IT c , int k )
 {
-  mattype z = Pole[k] ;
-  mattype zn, z2n, iz;
+  real_type z = pole[k] ;
+  real_type zn, z2n, iz;
   value_type Sum ;
   int  n ;
 
-  if (Horizon[k] < M) {
+  if (horizon[k] < M)
+  {
     zn = z;
     Sum = c[0];
-    for (n = 0; n < Horizon[k]; n++) {
+    for (n = 0; n < horizon[k]; n++)
+    {
       Sum += zn * c[n];
       zn *= z;
     }
@@ -409,13 +328,14 @@ value_type icc_reflect ( IT c , int k )
     iz = 1.0 / z;
     z2n = pow(z, (double)(2 * M));
     Sum = 0 ;
-    for (n = 0; n < M - 1 ; n++) {
+    for (n = 0; n < M - 1 ; n++)
+    {
       Sum += (zn + z2n) * c[n];
       zn *= z;
       z2n *= iz;
     }
     Sum += (zn + z2n) * c[n];
-    return c[0] + Sum / mattype(1.0 - zn * zn) ;
+    return c[0] + Sum / real_type(1.0 - zn * zn) ;
   } 
 }
 
@@ -425,9 +345,9 @@ value_type icc_reflect ( IT c , int k )
 
 value_type iacc_reflect ( out_iter c , int k )
 {
-  mattype z = Pole[k] ;
+  real_type z = pole[k] ;
 
-  return c[M - 1] / mattype( 1.0 - 1.0 / z ) ;
+  return c[M - 1] / real_type( 1.0 - 1.0 / z ) ;
 }
 
 /// next is periodic BCs. so, f(x) = f(x+N)
@@ -441,16 +361,16 @@ value_type iacc_reflect ( out_iter c , int k )
 template < class IT >
 value_type icc_periodic ( IT c , int k )
 {
-  mattype z = Pole[k] ;
-  mattype zn ;
+  real_type z = pole[k] ;
+  real_type zn ;
   value_type Sum ;
   int  n ;
 
-  if (Horizon[k] < M)
+  if (horizon[k] < M)
   {
     zn = z ;
     Sum = c[0] ;
-    for ( n = M - 1 ; n > ( M - Horizon[k] ) ; n-- )
+    for ( n = M - 1 ; n > ( M - horizon[k] ) ; n-- )
     {
       Sum += zn * c[n];
       zn *= z;
@@ -465,22 +385,22 @@ value_type icc_periodic ( IT c , int k )
       Sum += zn * c[n];
       zn *= z;
     }
-    Sum /= mattype( 1.0 - zn ) ;
+    Sum /= real_type( 1.0 - zn ) ;
   }
  return Sum ;
 }
 
 value_type iacc_periodic ( out_iter c , int k )
 {
-  mattype z = Pole[k] ;
-  mattype zn ;
+  real_type z = pole[k] ;
+  real_type zn ;
   value_type Sum ;
 
-  if (Horizon[k] < M)
+  if (horizon[k] < M)
   {
     zn = z ;
     Sum = c[M-1] * z ;
-    for ( int n = 0 ; n < Horizon[k] ; n++ )
+    for ( int n = 0 ; n < horizon[k] ; n++ )
     {
       zn *= z;
       Sum += zn * c[n];
@@ -496,11 +416,31 @@ value_type iacc_periodic ( out_iter c , int k )
       Sum += zn * c[n];
       zn *= z;
     }
-    Sum = z * Sum / mattype( zn - 1.0 );
+    Sum = z * Sum / real_type( zn - 1.0 );
   }
   return Sum ;
 }
 
+// icc_constant and iacc_constant calculate the initial coefficients by assuming
+// that all values of the input outside the defined range are equal to the value
+// at the nearest defined location. This produces a very straightforward calculation
+// which doesn't need any 'looking into' the data and can be executed quickly. But
+// even though it's simple, it's a step up from zero-padding (which is what using
+// c[0] and c[m-1] as the initial coefficients is equivalent to) because it introduces
+// less of a discontinuity and therefore makes the recursion approach it's 'real' value
+// more quickly, since there is less of an initial disturbance to 'ierate away'.
+
+template < class IT >
+value_type icc_constant ( IT c , int k )
+{
+  return c[0] * ( 1.0 / ( 1.0 - pole[k] ) ) ;
+}
+
+value_type iacc_constant ( out_iter c , int k )
+{
+  return c [ M - 1 ] * ( pole[k] / ( pole[k] - 1.0 ) ) ;
+}
+
 template < class IT >
 value_type icc_identity ( IT c , int k )
 {
@@ -519,23 +459,25 @@ value_type iacc_identity ( out_iter c , int k )
 /// The code itself is adapted from P. Thevenaz' code.
 ///
 /// the first solve routine is to be used for the first dimension.
-/// here Lambda, the overall gain, is applied to the elements of the input as they
-/// are processed, saving the separate loop to preapply the gain. Subsequent poles
+/// here lambda, the overall gain, is applied to the elements of the input as they
+/// are processed, saving a separate loop to preapply the gain. Subsequent poles
 /// and further dimensions then use the next routine. The gain which is applied here
 /// may be a power of the 'orthodox' gain, to avoid having to reapply the 'orthodox'
-/// Lambda with every dimension which is processed. See the constructor.
+/// lambda with every dimension which is processed. See the constructor.
 
 int solve_gain_inlined ( in_iter c , out_iter x )
 {
   assert ( M > 1 ) ;
   
+  // use a buffer of one value_type for the recursion (see below)
+
   value_type X ;
   
   // process first pole, applying overall gain in the process
   // of consuming the input. This gain may be a power of the 'orthodox'
-  // Lambda from Thevenaz' code. This is done when the input is multidimensional,
-  // in which case it's wasteful to apply Lambda in each dimension. In this situation
-  // it makes more sense to apply pow(Lambda,dimensions) when solving along the
+  // lambda from Thevenaz' code. This is done when the input is multidimensional,
+  // in which case it's wasteful to apply lambda in each dimension. In this situation
+  // it makes more sense to apply pow(lambda,dimensions) when solving along the
   // first axis and apply no gain when solving along the other axes.
   // Also note that the application of the gain is performed during the processing
   // of the first (maybe the only) pole of the filter, instead of running a separate
@@ -550,14 +492,14 @@ int solve_gain_inlined ( in_iter c , out_iter x )
   // next iteration instead of fetching it again from memory. In my trials, this
   // performed better, especially on SIMD data.
   
-  x[0] = X = Lambda * (this->*_p_icc1) (c, 0);
+  x[0] = X = lambda * (this->*_p_icc1) (c, 0);
 
   /* causal recursion */
   // the gain is applied to each input value as it is consumed
   
   for (int n = 1; n < M; n++)
   {
-    x[n] = X = Lambda * c[n] + mattype ( Pole[0] ) * X ;
+    x[n] = X = lambda * c[n] + real_type ( pole[0] ) * X ;
   }
   
   // now the input is used up and won't be looked at any more; all subsequent
@@ -570,13 +512,13 @@ int solve_gain_inlined ( in_iter c , out_iter x )
   /* anticausal recursion */
   for (int n = M - 2; 0 <= n; n--)
   {
-    x[n] = X = mattype ( Pole[0] ) * ( X - x[n]);
+    x[n] = X = real_type ( pole[0] ) * ( X - x[n]);
   }
   
   // for the remaining poles, if any, don't apply the gain
   // and process the result from applying the first pole
   
-  for (int k = 1; k < NbPoles; k++)
+  for (int k = 1; k < npoles; k++)
   {
     /* causal initialization */
     x[0] = X = (this->*_p_icc2)(x, k);
@@ -584,7 +526,7 @@ int solve_gain_inlined ( in_iter c , out_iter x )
     /* causal recursion */
     for (int n = 1; n < M; n++)
     {
-      x[n] = X = x[n] + mattype ( Pole[k] ) * X ;
+      x[n] = X = x[n] + real_type ( pole[k] ) * X ;
     }
     
     /* anticausal initialization */
@@ -593,7 +535,7 @@ int solve_gain_inlined ( in_iter c , out_iter x )
     /* anticausal recursion */
     for (int n = M - 2; 0 <= n; n--)
     {
-      x[n] = X = mattype ( Pole[k] ) * ( X - x[n] );
+      x[n] = X = real_type ( pole[k] ) * ( X - x[n] );
     }
   }
 }
@@ -615,7 +557,7 @@ int solve_no_gain ( in_iter c , out_iter x )
   /* causal recursion */
   for ( int n = 1; n < M; n++)
   {
-    x[n] = X = c[n] + mattype ( Pole[0] ) * X ;
+    x[n] = X = c[n] + real_type ( pole[0] ) * X ;
   }
   
   /* anticausal initialization */
@@ -624,13 +566,13 @@ int solve_no_gain ( in_iter c , out_iter x )
   /* anticausal recursion */
   for ( int n = M - 2; 0 <= n; n--)
   {
-    x[n] = X = mattype ( Pole[0] ) * ( X - x[n]);
+    x[n] = X = real_type ( pole[0] ) * ( X - x[n]);
   }
   
   // for the remaining poles, if any, work on the result
   // of processing the first pole
   
-  for ( int k = 1 ; k < NbPoles; k++)
+  for ( int k = 1 ; k < npoles; k++)
   {
     /* causal initialization */
     x[0] = X = (this->*_p_icc2)(x, k);
@@ -638,7 +580,7 @@ int solve_no_gain ( in_iter c , out_iter x )
     /* causal recursion */
     for (int n = 1; n < M; n++)
     {
-      x[n] = X = x[n] + mattype ( Pole[k] ) * X ;
+      x[n] = X = x[n] + real_type ( pole[k] ) * X ;
     }
     
     /* anticausal initialization */
@@ -647,7 +589,7 @@ int solve_no_gain ( in_iter c , out_iter x )
     /* anticausal recursion */
     for (int n = M - 2; 0 <= n; n--)
     {
-      x[n] = X = mattype ( Pole[k] ) * ( X - x[n] );
+      x[n] = X = real_type ( pole[k] ) * ( X - x[n] );
     }
   }
 }
@@ -658,345 +600,325 @@ int solve_no_gain ( in_iter c , out_iter x )
 
 int solve_identity ( in_iter c , out_iter x )
 {
-  if ( x == c )
+  if ( x == c ) // if operation is in-place we needn't do anything
     return 0 ;
-  for ( int n = 0 ; n < M ; n++ )
+  for ( int n = 0 ; n < M ; n++ ) // otherwise, copy input to output
     x[n] = c[n] ;
 }
 
-/// The last bit of work left in the solver is the constructor.
+/// The last bit of work left in class filter is the constructor.
 /// The number of input/output values is passed into the constructur, limiting the
-/// solver to operate on data precisely of this length. apply_gain isn't immediately
+/// filter to operate on data precisely of this length. apply_gain isn't immediately
 /// obvious: it's not a mere flag, but contains the exponent which should be applied
 /// to the gain. If, for example, a 2D spline is built, one might pass in 2 here for
 /// the first dimension, and 0 for the second. This way, one set of multiplications is
 /// saved, at the cost of slightly reduced accuracy for large spline degrees. For high
 /// spline degrees and higher dimensions, it's advisable to not use this mechanism and
-/// pass in apply_gain = 1 for all dimensions.
-///
-/// Next is the boundary condition to use for the current axis. This is one of
-/// MIRROR, REFLECT, NATURAL, and PERIODIC. Note that different axes can use
-/// different boundary conditions.
-///
-/// The last parameter determines the spline order, which is one larger than the
-/// spline degree TODO: change code to always use degree
+/// pass in apply_gain = 1 for all dimensions; the calling code in filter.h decides this
+/// by using a heuristic method.
+/// The number of poles and a pointer to the poles themselves are passed in with the
+/// parameters _nbpoles and _pole, respectively.
+/// Finally, the last parameter, tolerance, gives a measure of the acceptable error.
 
 public:
   
-solver ( int _M ,           ///< number of input/output elements (DataLength)
-         int apply_gain ,   ///< power of Lambda to apply while processing the first pole of the filter
-         bc_code bc ,       ///< boundary conditions for this solver
-         int spline_order ) ///< desired spline order (4 for cubic)
+filter ( int _M ,               ///< number of input/output elements (DataLength)
+         int apply_gain ,       ///< power of lambda to apply while processing the first pole
+         bc_code bc ,           ///< boundary conditions for this filter
+         int _npoles ,          ///< number of poles
+         const double * _pole , ///< pointer to _npoles doubles holding the filter poles
+         double tolerance )     ///< acceptable loss of precision, absolute value
 : M ( _M ) ,
-  SplineOrder ( spline_order ) ,
-  SplineDegree ( spline_order - 1 ) ,
-  NbPoles ( ( spline_order - 1 ) / 2 ) ,
-  Pole ( precomputed_poles [ spline_order - 1 ] )
+  npoles ( _npoles ) ,
+  pole ( _pole )
 {
-  // TODO: make tolerance a parameter
-
-  double Tolerance = 0.0 ; // any type - no tolerance
-
-  if ( std::is_same < mattype , float > :: value == true )
-    Tolerance = .000000001 ;
-
-  else if ( std::is_same < mattype , double > :: value == true )
-    Tolerance = .000000000000001 ;
-
-  // fetch the precomputed filter poles:
-
-  assert ( SplineDegree >= 0 && SplineDegree < 25 ) ;
-  
-  if ( SplineDegree < 2 )
+  if ( npoles < 1 )
   {
-    // this is the easy way to deal with low degree splines:
-    // copy the input to the output.
-    _p_solve = & solver_type::solve_identity ;
+    // zero poles means there's nothing to do but possibly
+    // copying the input to the output, which solve_identity
+    // will do if the operation isn't in-place
+    _p_solve = & filter_type::solve_identity ;
     return ;
   }
   
-  for ( int i = 0 ; i < NbPoles ; i++ )
+  // calculate the horizon for each pole, this is the number of iterations
+  // the filter must perform on a unit impulse (TODO doublecheck) for it to
+  // decay below 'tolerance'
+
+  for ( int i = 0 ; i < npoles ; i++ )
   {
-//     double pole = precomputed_poles [ SplineDegree ] [ i ] ;
-//     Pole.push_back ( pole );
-    if ( Tolerance )
-      Horizon.push_back ( ceil ( log ( Tolerance ) / log ( fabs ( Pole[i] ) ) ) ) ;
+    if ( tolerance )
+      horizon.push_back ( ceil ( log ( tolerance ) / log ( fabs ( pole[i] ) ) ) ) ;
     else
-      Horizon.push_back ( M ) ;
+      horizon.push_back ( M ) ;
   }
 
-//   for ( int i = 0 ; i < NbPoles ; i++ )
-//     cout << "Pole " << i << ": " << Pole[i] << " Hor " << Horizon[i] << endl ;
-
-  /* compute the overall gain */
+  // compute the overall gain of the filter. Simply executing the filtering
+  // code by itself will attenuate the signal. Here we calculate the amount of
+  // this attenuation so that we can cancel this effect.
 
-  Lambda = 1.0 ; // if apply_gain is 0, Lambda won't be applied at all
+  lambda = 1.0 ; // if apply_gain is 0, lambda won't be applied at all
 
-  if ( apply_gain ) // if apply_gain is set, it will be used as an *exponent* on Lambda
-                    // as to apply a power of Lambda when processing the first dimension
+  if ( apply_gain ) // if apply_gain is set, it will be used as an *exponent* on lambda
+                    // as to apply a power of lambda when processing the first dimension
   {
-    for (int k = 0; k < NbPoles; k++)
-      Lambda = Lambda * (1.0 - Pole[k]) * (1.0 - 1.0 / Pole[k]);
+    for (int k = 0; k < npoles; k++)
+      lambda = lambda * (1.0 - pole[k]) * (1.0 - 1.0 / pole[k]);
     
-    Lambda = pow ( Lambda , apply_gain ) ;
+    lambda = pow ( lambda , apply_gain ) ;
 
-    _p_solve = & solver_type::solve_gain_inlined ; // multiply input with pow(Lambda,apply_gain)
+    _p_solve = & filter_type::solve_gain_inlined ; // multiply input with pow(lambda,apply_gain)
   }
   else
   {
-    _p_solve = & solver_type::solve_no_gain ;      // the gain has already been applied
+    _p_solve = & filter_type::solve_no_gain ;      // no gain will be applied
   }
 
-//   cout << "Lambda: " << Lambda << endl ;
-
   // while the forward/backward IIR filter in the solve_... routines is the same for all
   // boundary conditions, the calculation of the initial causal and anticausal coefficients
   // depends on the boundary conditions and is handled by a call through a method pointer
-  // in the solve_... routines.
+  // in the solve_... routines. Here we fix these method pointers:
   
-  if ( bc == MIRROR )
+  if ( bc == CONSTANT )
+  {
+    _p_icc1 = & filter_type::icc_constant<in_iter> ;
+    _p_icc2 = & filter_type::icc_constant<out_iter> ;
+    _p_iacc = & filter_type::iacc_constant ;
+  }
+  else if ( bc == MIRROR )
   {     
-    _p_icc1 = & solver_type::icc_mirror<in_iter> ;
-    _p_icc2 = & solver_type::icc_mirror<out_iter> ;
-    _p_iacc = & solver_type::iacc_mirror ;
+    _p_icc1 = & filter_type::icc_mirror<in_iter> ;
+    _p_icc2 = & filter_type::icc_mirror<out_iter> ;
+    _p_iacc = & filter_type::iacc_mirror ;
   }
   else if ( bc == NATURAL )
   {     
-    _p_icc1 = & solver_type::icc_natural<in_iter> ;
-    _p_icc2 = & solver_type::icc_natural<out_iter> ;
-    _p_iacc = & solver_type::iacc_natural ;
+    _p_icc1 = & filter_type::icc_natural<in_iter> ;
+    _p_icc2 = & filter_type::icc_natural<out_iter> ;
+    _p_iacc = & filter_type::iacc_natural ;
   }
   else if ( bc == PERIODIC )
   {
-    _p_icc1 = & solver_type::icc_periodic<in_iter> ;
-    _p_icc2 = & solver_type::icc_periodic<out_iter> ;
-    _p_iacc = & solver_type::iacc_periodic ;
+    _p_icc1 = & filter_type::icc_periodic<in_iter> ;
+    _p_icc2 = & filter_type::icc_periodic<out_iter> ;
+    _p_iacc = & filter_type::iacc_periodic ;
   }
   else if ( bc == REFLECT )
   {
-    _p_icc1 = & solver_type::icc_reflect<in_iter> ;
-    _p_icc2 = & solver_type::icc_reflect<out_iter> ;
-    _p_iacc = & solver_type::iacc_reflect ;
+    _p_icc1 = & filter_type::icc_reflect<in_iter> ;
+    _p_icc2 = & filter_type::icc_reflect<out_iter> ;
+    _p_iacc = & filter_type::iacc_reflect ;
   }
   else if ( bc == ZEROPAD || bc == IGNORE )
   {
-    _p_icc1 = & solver_type::icc_identity<in_iter> ;
-    _p_icc2 = & solver_type::icc_identity<out_iter> ;
-    _p_iacc = & solver_type::iacc_identity ;
+    _p_icc1 = & filter_type::icc_identity<in_iter> ;
+    _p_icc2 = & filter_type::icc_identity<out_iter> ;
+    _p_iacc = & filter_type::iacc_identity ;
   }
   else if ( bc == IDENTITY )
   {
-    _p_solve = & solver_type::solve_identity ;
+    _p_solve = & filter_type::solve_identity ;
   }
   else
-    cerr << "bc code " << bc << " not supported" << endl ;
+    throw not_supported ( "boundary condition not supported by vspline::filter" ) ;
 }
 
-} ; // end of class solver
-
-/// process() prefilters a chunk of data along one axis. The solver is repeatedly
-/// called for 1D subarrays collinear to the processing axis.
-
-template < typename input_array_type ,      ///< type of array with knot point data
-           typename output_array_type ,     ///< type of array for coefficients (may be the same)
-           typename solver_type >           ///< type of solver to use
-int process ( input_array_type &input ,     ///< knot point data. the routine can also operate in-place
-              output_array_type &output ,   ///< where input == output.)
-              solver_type &solver ,         ///< solver to use
-              int axis                      ///< axis to process
-            )
+} ; // end of class filter
+
+// Now that we have generic code for 1D filtering, we want to apply this code to
+// n-dimensional arrays. We use the following strategy:
+// - perform the prefiltering collinear to each axis separately
+// - when processing a specific axis, split the array(s) into chunks and use one thread per chunk
+// - perform a traverse on each chunk, copying out 1D subsets collinear to the processing axis
+//   to a buffer
+// - perform the filter on the buffer
+// - copy the filtered data to the target
+// The code is organized bottom-up, with the highest-level routines furthest down, saving
+// on forward declarations. The section of code immediately following doesn't use vectorization,
+// the vector code follows.
+
+/// 'monadic' gather and scatter. gather picks up count T which are stride apart,
+/// starting at source and deposting compactly at target. scatter performs the reverse
+/// operation
+
+template < typename T > void
+gather ( const T* source ,
+         T* target ,
+         const int & stride ,
+         int count
+       )
 {
-  const int dim = input_array_type::actual_dimension ;
+  while ( count-- )
+  {
+    *target = *source ;
+    source += stride ;
+    ++target ;
+  }
+}
 
-  typedef vigra::MultiArrayNavigator<typename input_array_type::traverser, dim> input_Navigator;
-  typedef vigra::MultiArrayNavigator<typename output_array_type::traverser, dim> output_Navigator;
-  
-  input_Navigator  nav_in  ( input.traverser_begin() ,  input.shape() ,  axis ) ;
-  output_Navigator nav_out ( output.traverser_begin() , output.shape() , axis ) ;
-  
-  while ( nav_in.hasMore() )
+template < typename T > void
+scatter ( const T* source ,
+          T* target ,
+          const int & stride ,
+          int count
+        )
+{
+  while ( count-- )
   {
-    solver.solve ( nav_in.begin() , nav_out.begin() ) ;
-    ++nav_in ;
-    ++nav_out ;
+    *target = *source ;
+    ++source ;
+    target += stride ;
   }
 }
 
-/// solve_vigra() prefilters an array along a specific axis. This routine splits the
-/// input and output array into equal-sized chunks and processes each chunk in a separate
-/// thread. This is done by using 'divide_and_conquer'.
+/// nonaggregating_filter subsequently copies all 1D subarrays of source collinear to axis
+/// into a 1D buffer, performs the filter 'solver' on the buffer, then writes the filtered
+/// data to the corresponding 1D subarray of target (which may be the same as source).
+/// While the buffering consumes some time, it saves time on the actual filter calculation,
+/// especially with higher-order filters. On my system, I found I broke even even with only
+/// one pole, so there is no special treatment here for low-order filtering (TODO confirm)
+/// TODO: what if dim == 1? should it have special treatment or is source.bindAt ( axis , 0 )
+/// safe in this case?
 
-template < typename input_array_type ,      ///< type of array with knot point data
-           typename output_array_type >     ///< type of array for coefficients (may be the same)
-void solve_vigra ( input_array_type &input ,    ///< knot point data. the routine can also operate in-place
-                   output_array_type &output ,  ///< where input == output.
-                   bc_code bc ,                 ///< boundary treatment for this solver
-                   int degree ,                 ///< degree of the spline
-                   int d ,                      ///< axis to process
-                   int nslices = ncores )  ///< number of threads to use
+template < class source_type ,
+           class target_type >
+int nonaggregating_filter ( source_type &source ,
+                            target_type &target ,
+                            int axis ,
+                            bc_code bc ,
+                            int nbpoles ,
+                            const double * pole ,
+                            double tolerance
+                          )
 {
-  const int dim = input_array_type::actual_dimension ;
+  const int dim = source_type::actual_dimension ;
+  typedef typename source_type::value_type value_type ;
+  typedef typename ExpandElementResult < value_type > :: type ele_type ;
 
-  typedef vigra::MultiArrayNavigator<typename input_array_type::traverser, dim> input_Navigator;
-  typedef vigra::MultiArrayNavigator<typename output_array_type::traverser, dim> output_Navigator;
-  typedef typename input_Navigator::iterator input_nav_iter ;
-  typedef typename output_Navigator::iterator output_nav_iter ;
-  typedef solver < input_nav_iter , output_nav_iter > solver_type ;
+  int count = source.shape ( axis ) ; 
+
+  /// we use a buffer of count value_types
+
+  MultiArray < 1 , value_type > buffer ( count ) ;
 
   int lambda_exponent = 1 ;
 
 // deactivating the code below may produce slightly more precise results
 
-  if ( pow ( degree , dim ) < 64 ) // heuristic. for high degrees, below optimization reduces precision too much
+  if ( pow ( nbpoles , dim ) < 32 ) // heuristic. for high degrees, below optimization reduces precision too much
   {
     lambda_exponent = 0 ;
-    if ( d == 0 )
+    if ( axis == 0 )
       lambda_exponent = dim ;
   }
 
-  solver_type s ( input.shape(d) , lambda_exponent , bc , degree + 1 ) ;
+  // avoiding being specific about the iterator's type allows us to slot in
+  // any old iterator we can get by calling begin() on buffer 
+  
+  typedef decltype ( buffer.begin() ) iter_type ;
+  typedef filter < iter_type , iter_type , value_type > filter_type ;
+  filter_type solver ( source.shape(axis) , lambda_exponent , bc , nbpoles , pole , tolerance ) ;
 
-  using namespace std::placeholders ;
+  // offset into the source slice which will be used for gather/scatter
 
-  // we use bind to create a functor which we can pass to divide_and_conquer_2.
-  // divide_and_conquer_2 will split input and output into chunks and then apply
-  // the functor to pairs of chunks in separate threads.
+  int source_index ;
+  
+  // next slice is this far away:
 
-  auto chunk_func_2
-  = std::bind ( process < input_array_type , output_array_type , solver_type > ,
-                _1 ,          // placeholders to accept data chunks
-                _2 ,          // from divide_and_conquer
-                std::ref(s) , // solver to apply
-                d ) ;         // axis to process
+  int source_stride = source.stride ( axis ) ;
 
-  // divide_and_conquer_2 performs the array splitting and multithreading
+  value_type * source_base_adress = source.data() ;
+  value_type * buffer_base_adress = buffer.data() ;
+  value_type * target_base_adress = target.data() ;
 
-  divide_and_conquer_2 < input_array_type , output_array_type >
-  :: run ( input ,         // knot point data
-           output ,        // space for coefficients
-           chunk_func_2 ,  // functor from above to apply the solver
-           d ,             // forbid splitting along axis d
-           nslices ) ;     // use nslices threads
-}
+  if ( source.stride() == target.stride() )
+  {
+    // we already know that both arrays have the same shape. If the strides are also the same,
+    // both arrays have the same structure in memory.
+    // If both arrays have the same structure, we can save ourselves the index calculations
+    // for the second array, since the indexes would come out the same. target_base_adress
+    // may be the same as source_base_adress, in which case the operation is in-place, but
+    // we can't derive any performance benefit from the fact.
 
-/// This routine calls the 1D prefiltering routine for all axes in turn.
+    // pick the first slice of source along the processing axis
 
-template < typename input_array_type ,      // type of array with knot point data
-           typename output_array_type >     // type of array for coefficients (may be the same)
-void solve_vigra ( input_array_type & input ,
-                   output_array_type & output ,
-                   TinyVector<bc_code,input_array_type::actual_dimension> bc ,
-                   int degree ,
-                   int nslices = ncores )
-{
-  // check if operation is in-place. I assume that the test performed here
-  // is sufficient to determine if the operation is in-place.
-  
-  bool in_place = false ;
-  
-  if ( (void*)(input.data()) == (void*)(output.data()) )
-    in_place = true ;
+    auto source_slice = source.bindAt ( axis , 0 ) ;
 
-  // if input == output, with degree <= 1 we needn't do anything at all.
-  
-  if ( in_place && degree <= 1 )
-    return ;
+    // we permute the slice's strides to ascending order to make the memory access
+    // as efficient as possible.
 
-  // do a bit of compatibility checking
-  
-  const int dim = input_array_type::actual_dimension ;
-  
-  if ( output_array_type::actual_dimension != dim )
-  {
-    throw dimension_mismatch ( "input and output array must have the same dimension" ) ;
-  }
-  
-  typedef typename input_array_type::difference_type diff_t ;
-  diff_t shape = input.shape() ;
-  if ( output.shape() != shape )
-  {
-    throw shape_mismatch ( "input and output array must have the same shape" ) ;
-  }
+    auto permuted_slice = source_slice.permuteStridesAscending() ;
+    
+    // we iterate over the elements in this slice - not to access them, but to
+    // calculate their offset from the first one. This may not be the most efficient
+    // way but it's simple and foolproof and will only be needed once per count values.
 
-  typedef typename input_array_type::value_type compound_type ;
-  typedef typename ExpandElementResult<compound_type>::type mattype ;
-  
-  // even if degree <= 1, we'll only arrive here if input != output.
-  // So we still have to copy the input data to the output (solve_identity)
-  
-  solve_vigra<input_array_type,output_array_type>
-             ( input , output , bc[0] , degree , 0 , nslices ) ;
+    auto source_sliter = permuted_slice.begin() ;
+    auto source_sliter_end = permuted_slice.end() ;
 
-  // but if degree <= 1 we're done already, since copying the data again
-  // in dimensions 1... is futile
+    while ( source_sliter < source_sliter_end )
+    {
+      // copy from the array to the buffer
+      
+      source_index = &(*source_sliter) - source_base_adress ;
+      
+      gather<value_type> ( source_base_adress + source_index , buffer_base_adress ,
+                           source_stride , count ) ;
+                              
+      // finally (puh): apply the prefilter, using the solver in-place, iterating over
+      // the vectors in buffer with maximum efficiency.
+                              
+      solver.solve ( buffer.begin() ) ;
+      
+      // and perform extended scatter with extrusion parameters to write the filtered data
+      // to the destination
 
-  if ( degree > 1 )
-  {
-    for ( int d = 1 ; d < dim ; d++ )
-      solve_vigra<output_array_type,output_array_type>
-                ( output , output , bc[d] , degree , d , nslices ) ;
+      scatter<value_type> ( buffer_base_adress , target_base_adress + source_index  ,
+                            source_stride , count ) ;
+      ++source_sliter ;
+    }
   }
-}
+  else
+  {
+    // pretty much the same as the previouse operation, with the distinction that
+    // copying the filtered data from the buffer to the target now needs it's own
+    // index etc., since all these may be different.
+    // TODO we might permute source_slice's strides to ascending and apply the same
+    // permutation to target_slice.
+    
+    auto source_slice = source.bindAt ( axis , 0 ) ;
+    auto source_sliter = source_slice.begin() ;
+    auto source_sliter_end = source_slice.end() ;
 
-/// An interlude: restoration of the original knot point data from the spline coefficients.
-/// This is easily done by a simple convolution with the values of the basis function
-/// taken at discrete points inside the defined range.
-/// The function can take arbitrary spline degrees as template argument.
-/// there are two functions to restore the original data from a spline: the first one takes a
-/// braced spline and convolves it with BORDER_TREATMENT_AVOID. This way the explicit
-/// border treatment manifest in the brace is used, and splines with arbitrary border conditions
-/// can be verified.
-/// TODO: bit rough and ready - restoration from braced should really only produce the inner
-/// part, not the area covered by the brace.
-
-template < class array >
-void restore_from_braced ( array &spline , array& target , int SplineDegree )
-{  
-  typedef typename array::value_type value_type ;
-  const int half_ext = SplineDegree / 2 ;
-  vigra::Kernel1D<value_type> spline_kernel ;
-  spline_kernel.initExplicitly(-half_ext, half_ext) ;
-  for ( int i = -half_ext ; i <= half_ext ; i++ )
-    spline_kernel[i] = bspline_basis<double> ( i , SplineDegree ) ;
-//   cout << "using kernel" ;
-//   for ( int i = -half_ext ; i <= half_ext ; i++ )
-//     cout << " " << spline_kernel[i] ;
-//   cout << endl ;
-  spline_kernel.setBorderTreatment ( BORDER_TREATMENT_AVOID ) ;
-  separableConvolveMultiArray(spline, target, spline_kernel);
-}
+    auto target_slice = target.bindAt ( axis , 0 ) ;
+    int target_stride = target.stride ( axis ) ;
+    auto target_sliter = target_slice.begin() ;
+    int target_index ;
 
-/// the second function takes a border treatment mode from vigra's collection and works
-/// on an unbraced spline. Some border treatment modes implemented here aren't available
-/// from vigra or aren't applicable
-/// - vigra                     vspline
-/// - BORDER_TREATMENT_AVOID    used with braced splines
-/// - BORDER_TREATMENT_CLIP     not sure
-/// - BORDER_TREATMENT_REPEAT   nearest is flat or REFLECT, same effect in cubic splines
-/// - BORDER_TREATMENT_REFLECT  MIRROR
-/// - BORDER_TREATMENT_WRAP     PERIODIC
-/// - BORDER_TREATMENT_ZEROPAD  -
-
-template < class array >
-void restore_from_unbraced ( array &spline , array& target , BorderTreatmentMode btm , int SplineDegree )
-{ 
-  typedef typename array::value_type value_type ;
-  const int half_ext = SplineDegree / 2 ;
-  vigra::Kernel1D<value_type> spline_kernel ;
-  spline_kernel.initExplicitly(-half_ext, half_ext) ;
-  for ( int i = -half_ext ; i <= half_ext ; i++ )
-    spline_kernel[i] = bspline_basis<double> ( i , SplineDegree ) ;
-  spline_kernel.setBorderTreatment ( btm ) ;
-  separableConvolveMultiArray(spline, target, spline_kernel);
+    while ( source_sliter < source_sliter_end )
+    {
+      source_index = &(*source_sliter) - source_base_adress ;
+      target_index = &(*target_sliter) - target_base_adress ;
+      
+      gather<value_type> ( source_base_adress + source_index , buffer_base_adress ,
+                           source_stride , count ) ;
+      solver.solve ( buffer.begin() ) ;
+      scatter<value_type> ( buffer_base_adress , target_base_adress + target_index  ,
+                            target_stride , count ) ;
+      ++source_sliter ;
+      ++target_sliter ;
+    }
+  }
+  return 0 ;
 }
 
 // the use of Vc has to be switched on with the flag USE_VC.
-// The ramainder of the code in this file provides vectorized prefiltering
-// using Vc.
+// before we can code the vectorized analogon of nonaggregating_filter, we need
+// some more infrastructure code:
 
 #ifdef USE_VC
 
-// test if an idex vector contains sequential indices
+// test if an index vector contains sequential indices
 
 template < typename IT >
 bool sequential ( const IT & indexes )
@@ -1004,23 +926,23 @@ bool sequential ( const IT & indexes )
   return Vc::all_of ( indexes - indexes[0] == IT::IndexesFromZero() ) ;
 }
 
-// extended gather and scatter routines taking 'extrusion parameters'
-// which handle how many times and with which stride the gather/scatter
-// operation is repeated. With these routines, strided memory can be
-// copied to a compact chunk of properly aligned memory and back.
-// The gather routine gathers from source, which points to strided memory,
-// and deposits in target, which is compact.
-// The scatter routine scatters from source, which points to compact memory,
-// and deposits in target, which points to strided memory.
-// The routine is templated by the vector type used for the single gather/scatter
-// operations, it can be a Vc::Vector or a Vc::SimdArray.
-// Initially I coded using load/store operations to access the 'non-compact'
-// memory as well, if the indexes were contiguous, but surprisingly, this was
-// slower. I like the concise expression with this code - instead of having
-// variants for load/store vs. gather/scatter and masked/unmasked operation,
-// the modus operandi is determined by the indexes and mask passed, which is
-// relatively cheap as it occurs only once, while the inner loop can just
-// rip away.
+/// extended gather and scatter routines taking 'extrusion parameters'
+/// which handle how many times and with which stride the gather/scatter
+/// operation is repeated. With these routines, strided memory can be
+/// copied to a compact chunk of properly aligned memory and back.
+/// The gather routine gathers from source, which points to strided memory,
+/// and deposits in target, which is compact.
+/// The scatter routine scatters from source, which points to compact memory,
+/// and deposits in target, which points to strided memory.
+/// The routine is templated by the vector type used for the single gather/scatter
+/// operations, it can be a Vc::Vector or a Vc::SimdArray.
+/// Initially I coded using load/store operations to access the 'non-compact'
+/// memory as well, if the indexes were contiguous, but surprisingly, this was
+/// slower. I like the concise expression with this code - instead of having
+/// variants for load/store vs. gather/scatter and masked/unmasked operation,
+/// the modus operandi is determined by the indexes and mask passed, which is
+/// relatively cheap as it occurs only once, while the inner loop can just
+/// rip away.
 
 template < typename VT > void
 gather ( const typename VT::value_type * source ,
@@ -1142,10 +1064,12 @@ template < class source_type ,
            class target_type >
 int ele_aggregating_filter ( source_type &source ,
                              target_type &target ,
-                             bc_code bc ,
-                             int degree ,
                              int axis ,
-                             int lambda_exponent
+                             bc_code bc ,
+                             int lambda_exponent ,
+                             int nbpoles ,
+                             const double * pole ,
+                             double tolerance
                            )
 {
   typedef typename source_type::value_type ele_type ;    ///< elementary type in source
@@ -1209,8 +1133,8 @@ int ele_aggregating_filter ( source_type &source ,
   // template argument (the elementary type used inside the solver) we pass it here, as we
   // don't define an element-expansion via vigra::ExpandElementResult for simdized_type.
 
-  solver < viter_type , viter_type , ele_type >
-    slv ( count , lambda_exponent , bc , degree + 1 ) ;
+  typedef filter < viter_type , viter_type , ele_type > filter_type ;
+  filter_type solver ( source.shape(axis) , lambda_exponent , bc , nbpoles , pole , tolerance ) ;
 
   if ( source.stride() == target.stride() )
   {
@@ -1261,7 +1185,7 @@ int ele_aggregating_filter ( source_type &source ,
       // finally (puh): apply the prefilter, using the solver in-place, iterating over
       // the vectors in buffer with maximum efficiency.
                               
-      slv.solve ( buffer.begin() ) ;
+      solver.solve ( buffer.begin() ) ;
       
       // and perform extended scatter with extrusion parameters to write the filtered data
       // to the destination
@@ -1285,7 +1209,7 @@ int ele_aggregating_filter ( source_type &source ,
     auto target_slice = target.bindAt ( axis , 0 ) ;
     int target_stride = target.stride ( axis ) ;
     auto target_sliter = target_slice.begin() ;
-    auto target_sliter_end = target_slice.end() ;
+//     auto target_sliter_end = target_slice.end() ;
     index_type target_indexes ;
 
     while ( source_sliter < source_sliter_end )
@@ -1300,7 +1224,7 @@ int ele_aggregating_filter ( source_type &source ,
         mask = ( simdized_type::IndexesFromZero() < e ) ;
       gather<simdized_type> ( source_base_adress , buffer_base_adress ,
                               source_indexes , mask , source_stride , count ) ;
-      slv.solve ( buffer.begin() ) ;
+      solver.solve ( buffer.begin() ) ;
       scatter<simdized_type> ( buffer_base_adress , target_base_adress ,
                                target_indexes , mask , target_stride , count ) ;
     }
@@ -1312,10 +1236,14 @@ template < class source_type ,
            class target_type >
 int aggregating_filter ( source_type &source ,
                          target_type &target ,
+                         int axis ,
                          bc_code bc ,
-                         int degree ,
-                         int axis )
+                         int nbpoles ,
+                         const double * pole ,
+                         double tolerance
+                        )
 {
+  const int dim = source_type::actual_dimension ;
   typedef typename source_type::value_type value_type ;
   static_assert ( std::is_same < value_type , typename target_type::value_type > :: value ,
     "aggregating_filter: both arrays must have the same value_type" ) ;
@@ -1323,12 +1251,13 @@ int aggregating_filter ( source_type &source ,
 
   int lambda_exponent = 1 ;
   
-  // heuristic. for high degrees, below optimization would reduce precision too much
-  if ( pow ( degree , int(target.actual_dimension) ) < 64 ) //  was: if ( degree < 7 ) 
+// deactivating the code below may produce slightly more precise results
+
+  if ( pow ( nbpoles , dim ) < 32 ) // heuristic. for high degrees, below optimization reduces precision too much
   {
     lambda_exponent = 0 ;
     if ( axis == 0 )
-      lambda_exponent = source_type::actual_dimension ;
+      lambda_exponent = dim ;
   }
   
   if ( ExpandElementResult < value_type > :: size != 1 )
@@ -1339,7 +1268,8 @@ int aggregating_filter ( source_type &source ,
     auto expanded_source = source.expandElements ( 0 ) ;
     auto expanded_target = target.expandElements ( 0 ) ;
     return ele_aggregating_filter ( expanded_source , expanded_target ,
-                                    bc , degree , axis + 1 , lambda_exponent ) ;
+                                    axis + 1 , bc , lambda_exponent ,
+                                    nbpoles , pole , tolerance ) ;
   }
   else
   {
@@ -1353,61 +1283,106 @@ int aggregating_filter ( source_type &source ,
     MultiArrayView < target.actual_dimension , ele_type >
       et ( target.shape() , target.stride() , (ele_type*)(target.data()) ) ;
     return ele_aggregating_filter ( es , et ,
-                                    bc , degree , axis , lambda_exponent ) ;
+                                    axis , bc , lambda_exponent ,
+                                    nbpoles , pole , tolerance ) ;
   }
 }
 
-/// solve_vc is the routine to prefilter using vectorization with Vc.
-/// This is the single-axis version.
+#endif
 
-// TODO The strategy is really the same as used by solve_vigra - i.e. build the
-// suitable filter into chunk_func_2 and apply it to chunks of data, which is done in
-// sequence for all axes. So the only difference is the filter, and we might factor the
-// application machinery out.
+/// Now we have the routines which perform the buffering and filtering for a chunk of data,
+/// We add code for multithreading. This is done by using utility code from common.h, namely
+/// the routine 'divide_and_conquer_2', which splits two arrays in the same way and applies
+/// a functor to each chunk in a separate thread:
 
-template < typename input_array_type , 
-           typename output_array_type >     // type of array for coefficients (may be the same)
-void solve_vc ( input_array_type &input ,
-                output_array_type &output ,
-                bc_code bc ,                 // boundary treatment for this solver
-                int degree ,
-                int d ,                      // axis to process
-                int nslices = ncores )  // number of threads to use
+template < typename input_array_type ,      ///< type of array with knot point data
+           typename output_array_type >     ///< type of array for coefficients (may be the same)
+void filter_1d ( input_array_type &input ,   ///< source data. the routine can also operate in-place
+                   output_array_type &output ,  ///< where input == output.
+                   int axis ,
+                   bc_code bc ,                 ///< boundary treatment for this solver
+                   int nbpoles ,
+                   const double * pole ,
+                   double tolerance ,
+                   bool use_vc = true ,
+                   int nslices = ncores )  ///< number of threads to use
 {
+  const int dim = input_array_type::actual_dimension ;
+  typedef typename input_array_type::value_type value_type ;
+  typedef typename MultiArray < 1 , value_type > ::iterator iter_type ;
+
   using namespace std::placeholders ;
 
-  // use bind to create a functor which can be passed to divide_and_conquer_2
+  // we use bind to create a functor which we can pass to divide_and_conquer_2.
+  // divide_and_conquer_2 will split input and output into chunks and then apply
+  // the functor to pairs of chunks in separate threads.
+
+  typedef decltype ( & nonaggregating_filter < input_array_type , output_array_type > )
+    filter_functor_type ;
+
+  filter_functor_type filter_functor ;
+  
+#ifdef USE_VC
+
+  if ( use_vc )
+    filter_functor = aggregating_filter < input_array_type , output_array_type > ;
+  else
+    filter_functor = nonaggregating_filter < input_array_type , output_array_type > ;
+
+#else
+  
+  filter_functor = nonaggregating_filter < input_array_type , output_array_type > ;
+  
+#endif
 
   auto chunk_func_2
-  = std::bind ( aggregating_filter < input_array_type , output_array_type > ,
-                _1 ,
-                _2 ,
+  = std::bind ( filter_functor ,
+                _1 ,          // placeholders to accept data chunks
+                _2 ,          // from divide_and_conquer
+                axis ,        // axis to process
                 bc ,
-                degree ,
-                d ) ;
+                nbpoles ,
+                pole ,
+                tolerance ) ;
 
-  // use divide_and_conquer_2 to split input and output into chunks and apply
-  // the functor above to each corresponding pair of chunks in a separate thread
+
+  // divide_and_conquer_2 performs the array splitting and multithreading
 
   divide_and_conquer_2 < input_array_type , output_array_type >
-  :: run ( input ,
-           output ,
-           chunk_func_2 ,
-           d ,
-           nslices ) ;
+  :: run ( input ,         // knot point data
+           output ,        // space for coefficients
+           chunk_func_2 ,  // functor from above to apply the solver
+           axis ,          // forbid splitting along processing axis
+           nslices ) ;     // use nslices threads
 }
 
-/// multi-axis version of solve_vc. This is what I use now per default, it performs
-/// the prefiltering with multiple threads and vectorization, which is the fastest
-/// way I could come up with.
+/// This routine calls the 1D filtering routine for all axes in turn. This is the
+/// highest-level routine in filter.h, and the only routine used by other code in
+/// vspline. It has no code specific to b-splines, any set of poles will be processed.
+/// To use this routine for b-splines, the correct poles have to be passed in, which
+/// is done in prefilter.h, where the code for prefiltering the knot point data
+/// calls filter_nd with the poles needed for a b-spline.
+///
+/// This routine takes the following parameters:
+///
+/// - input, output: MultiArrayViews of the source and target array
+/// - bc: TinyVector of boundary condition codes, allowing separate values for each axis
+/// - nbpoles: number of filter poles
+/// - pole: pointer to nbpoles doubles containing the filter poles
+/// - tolerance: acceptable error
+/// - use_vc: flag whether to use vector code or not (if present)
+/// - nslices: number of threads to use (per default as many as physical cores)
 
-template < typename input_array_type ,      ///< type of array with knot point data
-           typename output_array_type >     ///< type of array for coefficients (may be the same)
-void solve_vc ( input_array_type& input ,
-                output_array_type& output ,
-                TinyVector<bc_code,input_array_type::actual_dimension> bc ,
-                int degree ,
-                int nslices = ncores )
+template < typename input_array_type ,      // type of array with knot point data
+           typename output_array_type >     // type of array for coefficients (may be the same)
+void filter_nd ( input_array_type & input ,
+                 output_array_type & output ,
+                 TinyVector<bc_code,input_array_type::actual_dimension> bc ,
+                 int nbpoles ,
+                 const double * pole ,
+                 double tolerance ,
+                 bool use_vc = true ,
+                 int nslices = ncores )
 {
   // check if operation is in-place. I assume that the test performed here
   // is sufficient to determine if the operation is in-place.
@@ -1419,17 +1394,15 @@ void solve_vc ( input_array_type& input ,
 
   // if input == output, with degree <= 1 we needn't do anything at all.
   
-  if ( in_place && degree <= 1 )
+  if ( in_place && nbpoles < 1 )
     return ;
 
-  
   // do a bit of compatibility checking
- 
+  
   const int dim = input_array_type::actual_dimension ;
   
   if ( output_array_type::actual_dimension != dim )
   {
-    cerr << "solve_vigra: dimensions don't match" << endl ;
     throw dimension_mismatch ( "input and output array must have the same dimension" ) ;
   }
   
@@ -1437,29 +1410,26 @@ void solve_vc ( input_array_type& input ,
   diff_t shape = input.shape() ;
   if ( output.shape() != shape )
   {
-    cerr << "solve_vigra: shapes don't match" << endl ;
-    throw dimension_mismatch ( "input and output array must have the same shape" ) ;
+    throw shape_mismatch ( "input and output array must have the same shape" ) ;
   }
 
   // even if degree <= 1, we'll only arrive here if input != output.
   // So we still have to copy the input data to the output (solve_identity)
   
-  solve_vc<input_array_type,output_array_type>
-             ( input , output , bc[0] , degree , 0 , nslices ) ;
-             
+  filter_1d<input_array_type,output_array_type>
+             ( input , output , 0 , bc[0] , nbpoles , pole , tolerance , use_vc , nslices ) ;
+
   // but if degree <= 1 we're done already, since copying the data again
   // in dimensions 1... is futile
 
-  if ( degree > 1 )
+  if ( nbpoles > 0 )
   {
     for ( int d = 1 ; d < dim ; d++ )
-      solve_vc<output_array_type,output_array_type>
-                ( output , output , bc[d] , degree , d , nslices ) ;
+      filter_1d<output_array_type,output_array_type>
+                ( output , output , d , bc[d] , nbpoles , pole , tolerance , use_vc , nslices ) ;
   }
 }
 
-#endif // USE_VC
-
 } ; // namespace vspline
 
-#endif // VSPLINE_PREFILTER_H
+#endif // VSPLINE_FILTER_H
diff --git a/prefilter.h b/prefilter.h
index ffc64fb..1f8dff3 100644
--- a/prefilter.h
+++ b/prefilter.h
@@ -120,21 +120,13 @@
 #include <vigra/multi_convolution.hxx>
 
 #include "common.h"
+#include "filter.h"
 
 namespace vspline {
 
 using namespace std ;
 using namespace vigra ;
 
-/// class solver performs the conversion of a 1D string of data to spline coefficients with
-/// the 'DSP aproach', which performs coefficient generation by means of an IIR filter.
-/// The DSP approach is extremely versatile and the code is elegant, so I abandoned even my
-/// optimized cubic spline code, which used linear algebra methods, in it's favour.
-/// The 1D solving is, later on, used repeatedly along the axes of multidimensional
-/// data, but the formulation of the solving process is unaware of the dimensionality
-/// of the data, it follows the 1D iterators it receives, no matter what strides these
-/// iterators use to pick out data along an axis.
-///
 /// With large data sets, and with higher dimensionality, processing separately along each
 /// axis consumes a lot of memory bandwidth. There are ways out of this dilemma by interleaving
 /// the code. Disregarding the calculation of initial causal and anticausal coefficients, the code
@@ -156,788 +148,51 @@ using namespace vigra ;
 /// splines become less of an issue; the extra arithemtic to prefilter for, say, quintic splines is
 /// done very quickly, since no additional memory access is needed beyond a buffer's worth of data
 /// already present in core memory.
-///
-/// class solver needs two template arguments, one for the type of iterator over the incoming
-/// data, and one for the type of iterator to the resultant coefficients. These will usually be
-/// the same, but formulating the code with two separate types makes it more versatile.
-/// Optionally there's a third template argument, specifying 'mattype', the elementary type
-/// of the iterator's value_type. When the value_types are vigra aggregates (TinyVectors etc.)
-/// vigra's ExpandElementResult mechanism will provide, but at times we may wish to be explicit
-/// here, e.g. when iterating over simdized types.
-
-template < typename in_iter ,   // iterator over the knot point values
-           typename out_iter ,  // iterator over the coefficient array
-           typename mattype = typename ExpandElementResult < typename in_iter::value_type > :: type >
-class solver
-{
-  // both iterators must define value_type and have the same value_type
-
-  typedef typename in_iter::value_type value_type ;
-  
-  static_assert ( std::is_same < typename out_iter::value_type , value_type > :: value ,
-                  "prefilter input and output iterator must have the same value_type" ) ;
-  
-//   // both iterators should be random access iterators.
-//   // currently not enforced, too lazy to code the traits for vector stripe iterators...
-//   typedef typename std::iterator_traits < in_iter > :: iterator_category in_cat ;
-//   static_assert ( std::is_same < in_cat , std::random_access_iterator_tag > :: value ,
-//                   "prefilter input iterator must be random access iterator"  ) ;
-//                   
-//   typedef typename std::iterator_traits < out_iter > :: iterator_category out_cat ;
-//   static_assert ( std::is_same < out_cat , std::random_access_iterator_tag > :: value ,
-//                   "prefilter output iterator must be random access iterator" ) ;
-                  
-  
-  /// typedef the fully qualified type for brevity
-  typedef solver<in_iter,out_iter,mattype> solver_type ;
-
-public:
-  
-  const double* Pole ;               ///< Poles of the IIR filter
-//   ArrayVector<mattype> Pole ;        ///< Poles of the IIR filter
-  ArrayVector<int> Horizon ;         ///< as many 'Horizons' as Poles
-  mattype  Lambda ;                  ///< (potentiated) overall gain.  
-  const int NbPoles ;                ///< Number of filter poles
-  const int M ;                      ///< length of the data
-  const int SplineDegree ;           ///< degree of the spline
-  const int SplineOrder ;            ///< order of the spline (== degree + 1)
-
-  /// the solving routine and initial coefficient finding routines are called via method pointers.
-  /// these pointers are typedefed for better legibility:
-  
-  typedef int       ( solver_type::*p_solve )  ( in_iter  input , out_iter output ) ;
-  typedef value_type ( solver_type::*p_icc1 )  ( in_iter  input , int k ) ;
-  typedef value_type ( solver_type::*p_icc2 )  ( out_iter input , int k ) ;
-  typedef value_type ( solver_type::*p_iacc )  ( out_iter input , int k ) ;
-
-  
-  // these are the method pointers used:
-  
-  p_solve _p_solve ; ///< pointer to the solve method
-  p_icc1  _p_icc1 ;  ///< pointer to calculation of initial causal coefficient with different
-  p_icc2  _p_icc2 ;  ///< and equal data types of input and output
-  p_iacc  _p_iacc ;  ///< pointer to calculation of initial anticausal coefficient
-  
- /// solve() takes two iterators, one to the input data and one to the output space.
- /// The containers must have the same size. It's safe to use solve() in-place.
-
- int solve ( in_iter  input , out_iter output )
- {
-   (this->*_p_solve) ( input , output ) ;
- }
- 
- /// for in-place operation we use the same solver routine.
- /// I checked: a handcoded in-place routine using only a single
- /// iterator is not noticeably faster than using one with two separate iterators.
- 
- int solve ( out_iter data )
- {
-   (this->*_p_solve) ( data , data ) ;
- }
- 
-// I now use code for te 'DSP approach' to calculating the spline coefficients, or,
-// to use DSP terminology, to perform the 'prefiltering'. I use adapted versions of
-// Thevenaz' code to calculate the initial causal and anticausal coefficients. The
-// code is changed just a little to work with an iterator instead of a C vector.
-
-private:
-
-/// the next section holds routines to calculate the initial causal/anticausal coefficient
-/// for the solver routine. Since I now use the DSP approach to coefficient generation, this
-/// is where the boundary conditions manifest in code, while the solve routines are the same
-/// for all cases.
-///
-/// The code for mirrored BCs is adapted from P. Thevenaz' code, the other routines are my
-/// own doing, with aid from a digest of spline formulae I received from P. Thevenaz and which
-/// were helpful to verify the code against a trusted source. Anyway, it's all unit tested now
-/// and runs just fine.
-///
-/// note how, in the routines to find the initial causal coefficient, there are two different
-/// cases: first the 'accelerated loop', which is used when the theoretically infinite sum of
-/// terms has reached sufficient precision, and the 'full loop', which implements the mathematically
-/// precise representation of the limes of the infinite sum towards an infinite number of terms,
-/// which happens to be calculable due to the fact that the absolute value of all poles is < 1 and
-///
-///  lim     n                a
-///         sum a * q ^ k =  ---
-/// n->inf  k=0              1-q
-///
-///
-/// first are mirror BCs. This is mirroring 'on bounds',
-/// f(-x) == f(x) and f(n-1 +x) == f(n-1 + x)
-///
-/// note how mirror BCs are equivalent to requiring the first derivative to be zero in the
-/// linear algebra approach. Obviously with mirrored data this has to be the case; the location
-/// where mirroring occurs is always an extremum. So this case covers 'FLAT' BCs as well
-///
-/// the initial causal coefficient routines are templated by iterator type, because depending
-/// on the circumstances, they may be used either on the input or the output iterator.
-  
-template < class IT >
-value_type icc_mirror ( IT c , int k )
-{
-  mattype z = Pole[k] ;
-  mattype zn, z2n, iz;
-  value_type Sum ;
-  int  n ;
-
-  if (Horizon[k] < M) {
-    /* accelerated loop */
-    zn = z;
-    Sum = c[0];
-    for (n = 1; n < Horizon[k]; n++) {
-      Sum += zn * c[n];
-      zn *= z;
-    }
-  }
-  else {
-    /* full loop */
-    zn = z;
-    iz = 1.0 / z;
-    z2n = pow(z, (double)(M - 1));
-    Sum = c[0] + z2n * c[M - 1];
-    z2n *= z2n * iz;
-    for (n = 1; n <= M - 2; n++) {
-      Sum += (zn + z2n) * c[n];
-      zn *= z;
-      z2n *= iz;
-    }
-    Sum /= mattype(1.0 - zn * zn);
-  } 
-//  cout << "icc_mirror: " << Sum << endl ;
- return(Sum);
-}
-
-/// the initial anticausal coefficient routines are always called with the output iterator,
-/// so they needn't be templated like the icc routines.
-///
-/// I still haven't understood the 'magic' which allows to calculate the initial anticausal
-/// coefficient from just two results of the causal filter, but I assume it's some exploitation
-/// of the symmetry of the data. This code is adapted from P. Thevenaz'.
-
-value_type iacc_mirror ( out_iter c , int k )
-{
-  mattype z = Pole[k] ;
-
-  return( mattype( z / ( z * z - 1.0 ) ) * ( c [ M - 1 ] + z * c [ M - 2 ] ) );
-}
-
-/// next are 'antimirrored' BCs. This is the same as 'natural' BCs: the signal is
-/// extrapolated via point mirroring at the ends, resulting in point-symmetry at the ends,
-/// which is equivalent to the second derivative being zero, the constraint used in
-/// the linear algebra approach to calculate 'natural' BCs:
-///
-/// f(x) - f(0) == f(0) - f(-x); f(x+n-1) - f(n-1) == f(n-1) - f (n-1-x)
-
-template < class IT >
-value_type icc_natural ( IT c , int k )
-{
-  mattype z = Pole[k] ;
-  mattype zn, z2n, iz;
-  value_type Sum , c02 ;
-  int  n ;
-
-  // f(x) - f(0) == f(0) - f(-x)
-  // f(-x) == 2 * f(0) - f(x)
-  
-  if (Horizon[k] < M) {
-    c02 = c[0] + c[0] ;
-    zn = z;
-    Sum = c[0];
-    for (n = 1; n < Horizon[k]; n++) {
-      Sum += zn * ( c02 - c[n] ) ;
-      zn *= z;
-    }
-    return(Sum);
-  }
-  else {
-    zn = z;
-    iz = 1.0 / z;
-    z2n = pow(z, (double)(M - 1));                                     // z2n == z^M-1
-    Sum = mattype( ( 1.0 + z ) / ( 1.0 - z ) ) * ( c[0] - z2n * c[M - 1] );
-    z2n *= z2n * iz;                                                   // z2n == z^2M-3
-    for (n = 1; n <= M - 2; n++) {
-      Sum -= (zn - z2n) * c[n];
-      zn *= z;
-      z2n *= iz;
-    }
-    return(Sum / mattype(1.0 - zn * zn));
-  } 
-}
-
-/// I still haven't understood the 'magic' which allows to calculate the initial anticausal
-/// coefficient from just two results of the causal filter, but I assume it's some exploitation
-/// of the symmetry of the data. This code is adapted from P. Thevenaz' formula.
-
-value_type iacc_natural ( out_iter c , int k )
-{
-  mattype z = Pole[k] ;
-
-  return - mattype( z / ( ( 1.0 - z ) * ( 1.0 - z ) ) ) * ( c [ M - 1 ] - z * c [ M - 2 ] ) ;
-}
-
-/// next are reflective BCs. This is mirroring 'between bounds':
-///
-/// f ( -1 - x ) == f ( x ) and f ( n + x ) == f ( n-1 - x )
-///
-/// I took Thevenaz' routine for mirrored data as a template and adapted it.
-/// 'reflective' BCs have some nice properties which make them more suited than mirror BCs in
-/// some situations:
-/// - the artificial discontinuity is 'pushed out' half a unit spacing
-/// - the extrapolated data are just as long as the source data
-/// - they play well with even splines
-
-template < class IT >
-value_type icc_reflect ( IT c , int k )
-{
-  mattype z = Pole[k] ;
-  mattype zn, z2n, iz;
-  value_type Sum ;
-  int  n ;
-
-  if (Horizon[k] < M) {
-    zn = z;
-    Sum = c[0];
-    for (n = 0; n < Horizon[k]; n++) {
-      Sum += zn * c[n];
-      zn *= z;
-    }
-    return(Sum);
-  }
-  else {
-    zn = z;
-    iz = 1.0 / z;
-    z2n = pow(z, (double)(2 * M));
-    Sum = 0 ;
-    for (n = 0; n < M - 1 ; n++) {
-      Sum += (zn + z2n) * c[n];
-      zn *= z;
-      z2n *= iz;
-    }
-    Sum += (zn + z2n) * c[n];
-    return c[0] + Sum / mattype(1.0 - zn * zn) ;
-  } 
-}
-
-/// I still haven't understood the 'magic' which allows to calculate the initial anticausal
-/// coefficient from just one result of the causal filter, but I assume it's some exploitation
-/// of the symmetry of the data. I have to thank P. Thevenaz for his formula which let me code:
-
-value_type iacc_reflect ( out_iter c , int k )
-{
-  mattype z = Pole[k] ;
-
-  return c[M - 1] / mattype( 1.0 - 1.0 / z ) ;
-}
-
-/// next is periodic BCs. so, f(x) = f(x+N)
-///
-/// Implementing this is more straightforward than implementing the various mirrored types.
-/// The mirrored types are, in fact, also periodic, but with a period twice as large, since they
-/// repeat only after the first reflection. So especially the code for the full loop is more complex
-/// for mirrored types. The down side here is the lack of symmetry to exploit, which made me code
-/// a loop for the initial anticausal coefficient as well.
 
-template < class IT >
-value_type icc_periodic ( IT c , int k )
-{
-  mattype z = Pole[k] ;
-  mattype zn ;
-  value_type Sum ;
-  int  n ;
-
-  if (Horizon[k] < M)
-  {
-    zn = z ;
-    Sum = c[0] ;
-    for ( n = M - 1 ; n > ( M - Horizon[k] ) ; n-- )
-    {
-      Sum += zn * c[n];
-      zn *= z;
-    }
-   }
-  else
-  {
-    zn = z;
-    Sum = c[0];
-    for ( n = M - 1 ; n > 0 ; n-- )
-    {
-      Sum += zn * c[n];
-      zn *= z;
-    }
-    Sum /= mattype( 1.0 - zn ) ;
-  }
- return Sum ;
-}
-
-value_type iacc_periodic ( out_iter c , int k )
-{
-  mattype z = Pole[k] ;
-  mattype zn ;
-  value_type Sum ;
-
-  if (Horizon[k] < M)
-  {
-    zn = z ;
-    Sum = c[M-1] * z ;
-    for ( int n = 0 ; n < Horizon[k] ; n++ )
-    {
-      zn *= z;
-      Sum += zn * c[n];
-    }
-    Sum = -Sum ;
-  }
-  else
-  {
-    zn = z;
-    Sum = c[M-1];
-    for ( int n = 0 ; n < M - 1 ; n++ )
-    {
-      Sum += zn * c[n];
-      zn *= z;
-    }
-    Sum = z * Sum / mattype( zn - 1.0 );
-  }
-  return Sum ;
-}
-
-template < class IT >
-value_type icc_identity ( IT c , int k )
-{
-  return c[0] ;
-}
-
-value_type iacc_identity ( out_iter c , int k )
-{
-  return c[M-1] ;
-}
-
-/// now we come to the solving, or prefiltering code itself.
-/// there are some variants - a bit of code bloat due to the explicit handling of a few
-/// distinct cases; since this is core code I have opted to suffer some code duplication
-/// in exchange for maximum efficiency.
-/// The code itself is adapted from P. Thevenaz' code.
-///
-/// the first solve routine is to be used for the first dimension.
-/// here Lambda, the overall gain, is applied to the elements of the input as they
-/// are processed, saving the separate loop to preapply the gain. Subsequent poles
-/// and further dimensions then use the next routine. The gain which is applied here
-/// may be a power of the 'orthodox' gain, to avoid having to reapply the 'orthodox'
-/// Lambda with every dimension which is processed. See the constructor.
-
-int solve_gain_inlined ( in_iter c , out_iter x )
-{
-  assert ( M > 1 ) ;
-  
-  value_type X ;
-  
-  // process first pole, applying overall gain in the process
-  // of consuming the input. This gain may be a power of the 'orthodox'
-  // Lambda from Thevenaz' code. This is done when the input is multidimensional,
-  // in which case it's wasteful to apply Lambda in each dimension. In this situation
-  // it makes more sense to apply pow(Lambda,dimensions) when solving along the
-  // first axis and apply no gain when solving along the other axes.
-  // Also note that the application of the gain is performed during the processing
-  // of the first (maybe the only) pole of the filter, instead of running a separate
-  // loop over the input to apply it before processing starts.
-  
-  // note how the gain is applied to the initial causal coefficient. This is
-  // equivalent to first applying the gain to the input and then calculating
-  // the initial causal coefficient from the amplified input.
-  
-  // note the seemingly strange = X clause in the asignment. By performing this
-  // assignment, we buffer the result of the current filter step to be used in the
-  // next iteration instead of fetching it again from memory. In my trials, this
-  // performed better, especially on SIMD data.
-  
-  x[0] = X = Lambda * (this->*_p_icc1) (c, 0);
-
-  /* causal recursion */
-  // the gain is applied to each input value as it is consumed
-  
-  for (int n = 1; n < M; n++)
-  {
-    x[n] = X = Lambda * c[n] + mattype ( Pole[0] ) * X ;
-  }
-  
-  // now the input is used up and won't be looked at any more; all subsequent
-  // processing operates on the output.
-  
-  /* anticausal initialization */
-  
-  x[M - 1] = X = (this->*_p_iacc)(x, 0);
-
-  /* anticausal recursion */
-  for (int n = M - 2; 0 <= n; n--)
-  {
-    x[n] = X = mattype ( Pole[0] ) * ( X - x[n]);
-  }
-  
-  // for the remaining poles, if any, don't apply the gain
-  // and process the result from applying the first pole
-  
-  for (int k = 1; k < NbPoles; k++)
-  {
-    /* causal initialization */
-    x[0] = X = (this->*_p_icc2)(x, k);
-    
-    /* causal recursion */
-    for (int n = 1; n < M; n++)
-    {
-      x[n] = X = x[n] + mattype ( Pole[k] ) * X ;
-    }
-    
-    /* anticausal initialization */
-    x[M - 1] = X = (this->*_p_iacc)(x, k);
-    
-    /* anticausal recursion */
-    for (int n = M - 2; 0 <= n; n--)
-    {
-      x[n] = X = mattype ( Pole[k] ) * ( X - x[n] );
-    }
-  }
-}
-
-/// solve routine without application of any gain, it is assumed that this has been
-/// done already during an initial run with the routine above, or in some other way.
-
-int solve_no_gain ( in_iter c , out_iter x )
-{
-  assert ( M > 1 ) ;
-
-  value_type X ;
-  
-  // process first pole, consuming the input
-  
-  /* causal initialization */
-  x[0] = X = (this->*_p_icc1)(c, 0);
-  
-  /* causal recursion */
-  for ( int n = 1; n < M; n++)
-  {
-    x[n] = X = c[n] + mattype ( Pole[0] ) * X ;
-  }
-  
-  /* anticausal initialization */
-  x[M - 1] = X = (this->*_p_iacc)(x, 0);
-  
-  /* anticausal recursion */
-  for ( int n = M - 2; 0 <= n; n--)
-  {
-    x[n] = X = mattype ( Pole[0] ) * ( X - x[n]);
-  }
-  
-  // for the remaining poles, if any, work on the result
-  // of processing the first pole
-  
-  for ( int k = 1 ; k < NbPoles; k++)
-  {
-    /* causal initialization */
-    x[0] = X = (this->*_p_icc2)(x, k);
-    
-    /* causal recursion */
-    for (int n = 1; n < M; n++)
-    {
-      x[n] = X = x[n] + mattype ( Pole[k] ) * X ;
-    }
-    
-    /* anticausal initialization */
-    x[M - 1] = X = (this->*_p_iacc)(x, k);
-    
-    /* anticausal recursion */
-    for (int n = M - 2; 0 <= n; n--)
-    {
-      x[n] = X = mattype ( Pole[k] ) * ( X - x[n] );
-    }
-  }
-}
-
-/// shortcircuit routine, copies input to output
-///
-/// this routine can also be used for splines of degree 0 and 1, for simplicity's sake
-
-int solve_identity ( in_iter c , out_iter x )
-{
-  if ( x == c )
-    return 0 ;
-  for ( int n = 0 ; n < M ; n++ )
-    x[n] = c[n] ;
-}
-
-/// The last bit of work left in the solver is the constructor.
-/// The number of input/output values is passed into the constructur, limiting the
-/// solver to operate on data precisely of this length. apply_gain isn't immediately
-/// obvious: it's not a mere flag, but contains the exponent which should be applied
-/// to the gain. If, for example, a 2D spline is built, one might pass in 2 here for
-/// the first dimension, and 0 for the second. This way, one set of multiplications is
-/// saved, at the cost of slightly reduced accuracy for large spline degrees. For high
-/// spline degrees and higher dimensions, it's advisable to not use this mechanism and
-/// pass in apply_gain = 1 for all dimensions.
-///
-/// Next is the boundary condition to use for the current axis. This is one of
-/// MIRROR, REFLECT, NATURAL, and PERIODIC. Note that different axes can use
-/// different boundary conditions.
-///
-/// The last parameter determines the spline order, which is one larger than the
-/// spline degree TODO: change code to always use degree
-
-public:
-  
-solver ( int _M ,           ///< number of input/output elements (DataLength)
-         int apply_gain ,   ///< power of Lambda to apply while processing the first pole of the filter
-         bc_code bc ,       ///< boundary conditions for this solver
-         int spline_order ) ///< desired spline order (4 for cubic)
-: M ( _M ) ,
-  SplineOrder ( spline_order ) ,
-  SplineDegree ( spline_order - 1 ) ,
-  NbPoles ( ( spline_order - 1 ) / 2 ) ,
-  Pole ( precomputed_poles [ spline_order - 1 ] )
-{
-  // TODO: make tolerance a parameter
-
-  double Tolerance = 0.0 ; // any type - no tolerance
-
-  if ( std::is_same < mattype , float > :: value == true )
-    Tolerance = .000000001 ;
-
-  else if ( std::is_same < mattype , double > :: value == true )
-    Tolerance = .000000000000001 ;
-
-  // fetch the precomputed filter poles:
-
-  assert ( SplineDegree >= 0 && SplineDegree < 25 ) ;
-  
-  if ( SplineDegree < 2 )
-  {
-    // this is the easy way to deal with low degree splines:
-    // copy the input to the output.
-    _p_solve = & solver_type::solve_identity ;
-    return ;
-  }
-  
-  for ( int i = 0 ; i < NbPoles ; i++ )
-  {
-//     double pole = precomputed_poles [ SplineDegree ] [ i ] ;
-//     Pole.push_back ( pole );
-    if ( Tolerance )
-      Horizon.push_back ( ceil ( log ( Tolerance ) / log ( fabs ( Pole[i] ) ) ) ) ;
-    else
-      Horizon.push_back ( M ) ;
-  }
-
-//   for ( int i = 0 ; i < NbPoles ; i++ )
-//     cout << "Pole " << i << ": " << Pole[i] << " Hor " << Horizon[i] << endl ;
-
-  /* compute the overall gain */
-
-  Lambda = 1.0 ; // if apply_gain is 0, Lambda won't be applied at all
-
-  if ( apply_gain ) // if apply_gain is set, it will be used as an *exponent* on Lambda
-                    // as to apply a power of Lambda when processing the first dimension
-  {
-    for (int k = 0; k < NbPoles; k++)
-      Lambda = Lambda * (1.0 - Pole[k]) * (1.0 - 1.0 / Pole[k]);
-    
-    Lambda = pow ( Lambda , apply_gain ) ;
+/// solve_vigra and solve_vc are just thin wrappers around filter_nd in filter.h,
+/// injecting the actual number of poles, the poles themselves and a flag wether to
+/// use vector code or not.
 
-    _p_solve = & solver_type::solve_gain_inlined ; // multiply input with pow(Lambda,apply_gain)
-  }
-  else
-  {
-    _p_solve = & solver_type::solve_no_gain ;      // the gain has already been applied
-  }
-
-//   cout << "Lambda: " << Lambda << endl ;
-
-  // while the forward/backward IIR filter in the solve_... routines is the same for all
-  // boundary conditions, the calculation of the initial causal and anticausal coefficients
-  // depends on the boundary conditions and is handled by a call through a method pointer
-  // in the solve_... routines.
-  
-  if ( bc == MIRROR )
-  {     
-    _p_icc1 = & solver_type::icc_mirror<in_iter> ;
-    _p_icc2 = & solver_type::icc_mirror<out_iter> ;
-    _p_iacc = & solver_type::iacc_mirror ;
-  }
-  else if ( bc == NATURAL )
-  {     
-    _p_icc1 = & solver_type::icc_natural<in_iter> ;
-    _p_icc2 = & solver_type::icc_natural<out_iter> ;
-    _p_iacc = & solver_type::iacc_natural ;
-  }
-  else if ( bc == PERIODIC )
-  {
-    _p_icc1 = & solver_type::icc_periodic<in_iter> ;
-    _p_icc2 = & solver_type::icc_periodic<out_iter> ;
-    _p_iacc = & solver_type::iacc_periodic ;
-  }
-  else if ( bc == REFLECT )
-  {
-    _p_icc1 = & solver_type::icc_reflect<in_iter> ;
-    _p_icc2 = & solver_type::icc_reflect<out_iter> ;
-    _p_iacc = & solver_type::iacc_reflect ;
-  }
-  else if ( bc == ZEROPAD || bc == IGNORE )
-  {
-    _p_icc1 = & solver_type::icc_identity<in_iter> ;
-    _p_icc2 = & solver_type::icc_identity<out_iter> ;
-    _p_iacc = & solver_type::iacc_identity ;
-  }
-  else if ( bc == IDENTITY )
-  {
-    _p_solve = & solver_type::solve_identity ;
-  }
-  else
-    cerr << "bc code " << bc << " not supported" << endl ;
-}
-
-} ; // end of class solver
-
-/// process() prefilters a chunk of data along one axis. The solver is repeatedly
-/// called for 1D subarrays collinear to the processing axis.
-
-template < typename input_array_type ,      ///< type of array with knot point data
-           typename output_array_type ,     ///< type of array for coefficients (may be the same)
-           typename solver_type >           ///< type of solver to use
-int process ( input_array_type &input ,     ///< knot point data. the routine can also operate in-place
-              output_array_type &output ,   ///< where input == output.)
-              solver_type &solver ,         ///< solver to use
-              int axis                      ///< axis to process
-            )
+template < typename input_array_type ,      // type of array with knot point data
+           typename output_array_type >     // type of array for coefficients (may be the same)
+void solve_vigra ( input_array_type & input ,
+                   output_array_type & output ,
+                   TinyVector<bc_code,input_array_type::actual_dimension> bcv ,
+                   int degree ,
+                   int nslices = ncores )
 {
-  const int dim = input_array_type::actual_dimension ;
-
-  typedef vigra::MultiArrayNavigator<typename input_array_type::traverser, dim> input_Navigator;
-  typedef vigra::MultiArrayNavigator<typename output_array_type::traverser, dim> output_Navigator;
-  
-  input_Navigator  nav_in  ( input.traverser_begin() ,  input.shape() ,  axis ) ;
-  output_Navigator nav_out ( output.traverser_begin() , output.shape() , axis ) ;
-  
-  while ( nav_in.hasMore() )
-  {
-    solver.solve ( nav_in.begin() , nav_out.begin() ) ;
-    ++nav_in ;
-    ++nav_out ;
-  }
+  filter_nd ( input ,
+             output ,
+             bcv ,
+             degree / 2 ,
+             precomputed_poles [ degree ] ,
+             0.0000001 ,
+             false ,
+             nslices ) ;
 }
 
-/// solve_vigra() prefilters an array along a specific axis. This routine splits the
-/// input and output array into equal-sized chunks and processes each chunk in a separate
-/// thread. This is done by using 'divide_and_conquer'.
-
-template < typename input_array_type ,      ///< type of array with knot point data
-           typename output_array_type >     ///< type of array for coefficients (may be the same)
-void solve_vigra ( input_array_type &input ,    ///< knot point data. the routine can also operate in-place
-                   output_array_type &output ,  ///< where input == output.
-                   bc_code bc ,                 ///< boundary treatment for this solver
-                   int degree ,                 ///< degree of the spline
-                   int d ,                      ///< axis to process
-                   int nslices = ncores )  ///< number of threads to use
-{
-  const int dim = input_array_type::actual_dimension ;
-
-  typedef vigra::MultiArrayNavigator<typename input_array_type::traverser, dim> input_Navigator;
-  typedef vigra::MultiArrayNavigator<typename output_array_type::traverser, dim> output_Navigator;
-  typedef typename input_Navigator::iterator input_nav_iter ;
-  typedef typename output_Navigator::iterator output_nav_iter ;
-  typedef solver < input_nav_iter , output_nav_iter > solver_type ;
-
-  int lambda_exponent = 1 ;
-
-// deactivating the code below may produce slightly more precise results
-
-  if ( pow ( degree , dim ) < 64 ) // heuristic. for high degrees, below optimization reduces precision too much
-  {
-    lambda_exponent = 0 ;
-    if ( d == 0 )
-      lambda_exponent = dim ;
-  }
-
-  solver_type s ( input.shape(d) , lambda_exponent , bc , degree + 1 ) ;
-
-  using namespace std::placeholders ;
-
-  // we use bind to create a functor which we can pass to divide_and_conquer_2.
-  // divide_and_conquer_2 will split input and output into chunks and then apply
-  // the functor to pairs of chunks in separate threads.
-
-  auto chunk_func_2
-  = std::bind ( process < input_array_type , output_array_type , solver_type > ,
-                _1 ,          // placeholders to accept data chunks
-                _2 ,          // from divide_and_conquer
-                std::ref(s) , // solver to apply
-                d ) ;         // axis to process
-
-  // divide_and_conquer_2 performs the array splitting and multithreading
-
-  divide_and_conquer_2 < input_array_type , output_array_type >
-  :: run ( input ,         // knot point data
-           output ,        // space for coefficients
-           chunk_func_2 ,  // functor from above to apply the solver
-           d ,             // forbid splitting along axis d
-           nslices ) ;     // use nslices threads
-}
-
-/// This routine calls the 1D prefiltering routine for all axes in turn.
+#ifdef USE_VC
 
 template < typename input_array_type ,      // type of array with knot point data
            typename output_array_type >     // type of array for coefficients (may be the same)
-void solve_vigra ( input_array_type & input ,
+void solve_vc ( input_array_type & input ,
                    output_array_type & output ,
-                   TinyVector<bc_code,input_array_type::actual_dimension> bc ,
+                   TinyVector<bc_code,input_array_type::actual_dimension> bcv ,
                    int degree ,
                    int nslices = ncores )
 {
-  // check if operation is in-place. I assume that the test performed here
-  // is sufficient to determine if the operation is in-place.
-  
-  bool in_place = false ;
-  
-  if ( (void*)(input.data()) == (void*)(output.data()) )
-    in_place = true ;
-
-  // if input == output, with degree <= 1 we needn't do anything at all.
-  
-  if ( in_place && degree <= 1 )
-    return ;
-
-  // do a bit of compatibility checking
-  
-  const int dim = input_array_type::actual_dimension ;
-  
-  if ( output_array_type::actual_dimension != dim )
-  {
-    throw dimension_mismatch ( "input and output array must have the same dimension" ) ;
-  }
-  
-  typedef typename input_array_type::difference_type diff_t ;
-  diff_t shape = input.shape() ;
-  if ( output.shape() != shape )
-  {
-    throw shape_mismatch ( "input and output array must have the same shape" ) ;
-  }
-
-  typedef typename input_array_type::value_type compound_type ;
-  typedef typename ExpandElementResult<compound_type>::type mattype ;
-  
-  // even if degree <= 1, we'll only arrive here if input != output.
-  // So we still have to copy the input data to the output (solve_identity)
-  
-  solve_vigra<input_array_type,output_array_type>
-             ( input , output , bc[0] , degree , 0 , nslices ) ;
-
-  // but if degree <= 1 we're done already, since copying the data again
-  // in dimensions 1... is futile
-
-  if ( degree > 1 )
-  {
-    for ( int d = 1 ; d < dim ; d++ )
-      solve_vigra<output_array_type,output_array_type>
-                ( output , output , bc[d] , degree , d , nslices ) ;
-  }
+  filter_nd ( input ,
+             output ,
+             bcv ,
+             degree / 2 ,
+             precomputed_poles [ degree ] ,
+             0.0000001 ,
+             true ,
+             nslices ) ;
 }
 
+#endif
+
 /// An interlude: restoration of the original knot point data from the spline coefficients.
 /// This is easily done by a simple convolution with the values of the basis function
 /// taken at discrete points inside the defined range.
@@ -990,476 +245,6 @@ void restore_from_unbraced ( array &spline , array& target , BorderTreatmentMode
   separableConvolveMultiArray(spline, target, spline_kernel);
 }
 
-// the use of Vc has to be switched on with the flag USE_VC.
-// The ramainder of the code in this file provides vectorized prefiltering
-// using Vc.
-
-#ifdef USE_VC
-
-// test if an idex vector contains sequential indices
-
-template < typename IT >
-bool sequential ( const IT & indexes )
-{
-  return Vc::all_of ( indexes - indexes[0] == IT::IndexesFromZero() ) ;
-}
-
-// extended gather and scatter routines taking 'extrusion parameters'
-// which handle how many times and with which stride the gather/scatter
-// operation is repeated. With these routines, strided memory can be
-// copied to a compact chunk of properly aligned memory and back.
-// The gather routine gathers from source, which points to strided memory,
-// and deposits in target, which is compact.
-// The scatter routine scatters from source, which points to compact memory,
-// and deposits in target, which points to strided memory.
-// The routine is templated by the vector type used for the single gather/scatter
-// operations, it can be a Vc::Vector or a Vc::SimdArray.
-// Initially I coded using load/store operations to access the 'non-compact'
-// memory as well, if the indexes were contiguous, but surprisingly, this was
-// slower. I like the concise expression with this code - instead of having
-// variants for load/store vs. gather/scatter and masked/unmasked operation,
-// the modus operandi is determined by the indexes and mask passed, which is
-// relatively cheap as it occurs only once, while the inner loop can just
-// rip away.
-
-template < typename VT > void
-gather ( const typename VT::value_type * source ,
-         typename VT::value_type * target ,
-         const typename VT::IndexType & indexes ,
-         const typename VT::Mask & mask ,
-         const int & stride ,
-         int count
-       )
-{
-  register VT x ;
-  if ( mask.isFull() )
-  {
-// this is strange: using this code is actually slower on my system:
-//
-//     if ( sequential ( indexes ) )
-//     {
-//       // set 'source' to proper starting point
-//       source += int ( indexes[0] ) ;
-//       while ( count-- )
-//       {
-//         x.load ( source ) ;
-//         x.store ( target , Vc::Aligned ) ;
-//         source += stride ;
-//         target += VT::Size ;
-//       }
-//     }
-//     else
-    {
-      while ( count-- )
-      {
-        x.gather ( source , indexes ) ;
-        x.store ( target , Vc::Aligned ) ;
-        source += stride ;
-        target += VT::Size ;
-      }
-    }
-  }
-  else
-  {
-    // for both sequential and non-sequential indexes,
-    // if there is a mask, perform a gather operation
-    while ( count-- )
-    {
-      x.gather ( source , indexes , mask ) ;
-      source += stride ;
-      x.store ( target , Vc::Aligned ) ;
-      target += VT::Size ;
-    }
-  }
-}
-
-template < typename VT > void
-scatter ( const typename VT::value_type * source ,
-          typename VT::value_type * target ,
-          const typename VT::IndexType & indexes ,
-          const typename VT::Mask & mask ,
-          const int & stride ,
-          int count
-        )
-{
-  register VT x ;
-  if ( mask.isFull() )
-  {
-// this is strange: using this code is actually slower on my system:
-//
-//     if ( sequential ( indexes ) )
-//     {
-//       // set 'target' to proper starting point
-//       target += int ( indexes[0] ) ;
-//       while ( count-- )
-//       {
-//         x.load ( source , Vc::Aligned ) ;
-//         x.store ( target ) ;
-//         source += VT::Size ;
-//         target += stride ;
-//       }
-//     }
-//     else
-    {
-      while ( count-- )
-      {
-        x.load ( source , Vc::Aligned ) ;
-        x.scatter ( target , indexes ) ;
-        source += VT::Size ;
-        target += stride ;
-      }
-    }
-  }
-  else
-  {
-    // for both sequential and non-sequential indexes,
-    // if there is a mask, perform a scatter operation
-    while ( count-- )
-    {
-      x.load ( source , Vc::Aligned ) ;
-      source += VT::Size ;
-      x.scatter ( target , indexes , mask ) ;
-      target += stride ;
-    }
-  }
-}
-
-/// aggregating_filter (below) keeps a buffer of vector-aligned memory, which it fills
-/// with 1D subarrays of the source array which are collinear to the processing
-/// axis, The buffer is then submitted to vectorized forward-backward recursive filtering
-/// and finally stored back to the corresponding memory area in target, which may
-/// be the same as source, in which case the operation is seemingly performed
-/// in-place (while in fact the buffer is still used). Buffering takes the bulk
-/// of the processing time (on my system), the vectorized maths are fast by
-/// comparison. Depending on array size and spline degree, sometimes the
-/// nonvectorized code is faster. But as both grow, bufering soon comes out
-/// the winner.
-/// ele_aggregating_filter is a subroutine processing arrays of elementary value_type.
-/// It's used by aggregating_filter, either directly if the arrays' value_type is already
-/// an elementary type, or after element-expanding the array(s).
-
-template < class source_type ,
-           class target_type >
-int ele_aggregating_filter ( source_type &source ,
-                             target_type &target ,
-                             bc_code bc ,
-                             int degree ,
-                             int axis ,
-                             int lambda_exponent
-                           )
-{
-  typedef typename source_type::value_type ele_type ;    ///< elementary type in source
-
-  // Initially I used a plain Vc::Vector as the simdized type, but I found that using a SimdArray
-  // of twice that size performed slightly better. Her's the one place where this type can be fixed,
-  // it's choice 'trickles down' to the remainder of the code, so experimentation is cheap. vsize has
-  // to be a multiple of the genuine vector's size, though, because in gather/scatter above we explicitly
-  // use aligned load/stores to the buffer. If we use plain load/stores to the buffer there, other
-  // vsizes can be used, but performance suffers - we want to use the fastest ops possible after all.
-  // TODO: This should be tested with different systems
-  
-//   typedef Vc::Vector < ele_type > simdized_type ;        ///< vectorized type, use plain vector
-
-  typedef Vc::SimdArray < ele_type ,
-                          2 * Vc::Vector<ele_type>::Size > simdized_type ; ///< vectorized type
-
-  const int vsize ( simdized_type::Size ) ;              ///< number of ele_type in a simdized_type
-  typedef typename simdized_type::IndexType index_type ; ///< indexes for gather/scatter
-  typedef typename simdized_type::MaskType mask_type ;   ///< and mask for masked operation
-  
-  int count = source.shape ( axis ) ;                    ///< number of vectors we'll process
-
-  // I initially tried to use Vc::Memory, but the semanics of the iterator obtained
-  // by buffer.begin() didn't work for me.
-  // anyway, a MultiArray with the proper allocator works just fine, and the dereferencing
-  // of the iterator needed in the solver works without further ado. 
-  
-  // Vc::Memory < simdized_type > buffer ( count * vsize ) ; // doesn't work for me
-
-  MultiArray < 1 , simdized_type , Vc::Allocator<simdized_type> > buffer ( count ) ;
-
-  // avoiding being specific about the iterator's type allows us to slot in
-  // any old iterator we can get by calling begin() on buffer 
-  
-  typedef decltype ( buffer.begin() ) viter_type ;
-
-  // set of offsets into the source slice which will be used for gather/scatter
-
-  index_type source_indexes ;
-  
-  // while we don't hit the last odd few 1D subarrays the mask is all-true
-
-  mask_type mask ( true ) ;
-  
-  // next slice is this far away:
-
-  int source_stride = source.stride ( axis ) ;
-
-  // we want to use the extended gather/scatter (with 'extrusion'), so we need the
-  // source and target pointers. Casting buffer's data pointer to element_type is safe,
-  // Since the simdized_type objects stored there are merely raw elemnt_type data
-  // in disguise.
-
-  ele_type * source_base_adress = source.data() ;
-  ele_type * buffer_base_adress = (ele_type*) (buffer.data()) ;
-  ele_type * target_base_adress = target.data() ;
-
-  // we create a solver object capable of handling the iterator producing the successive
-  // simdized_types from the buffer. While the unvectorized code can omit passing the third
-  // template argument (the elementary type used inside the solver) we pass it here, as we
-  // don't define an element-expansion via vigra::ExpandElementResult for simdized_type.
-
-  solver < viter_type , viter_type , ele_type >
-    slv ( count , lambda_exponent , bc , degree + 1 ) ;
-
-  if ( source.stride() == target.stride() )
-  {
-    // we already know that both arrays have the same shape. If the strides are also the same,
-    // both arrays have the same structure in memory.
-    // If both arrays have the same structure, we can save ourselves the index calculations
-    // for the second array, since the indexes would come out the same. target_base_adress
-    // may be the same as source_base_adress, in which case the operation is in-place, but
-    // we can't derive any performance benefit from the fact.
-
-    // pick the first slice of source along the processing axis
-
-    auto source_slice = source.bindAt ( axis , 0 ) ;
-
-    // we permute the slice's strides to ascending order to make the memory access
-    // as efficient as possible.
-
-    auto permuted_slice = source_slice.permuteStridesAscending() ;
-    
-    // we iterate over the elements in this slice - not to access them, but to
-    // calculate their offset from the first one. This may not be the most efficient
-    // way but it's simple and foolproof and will only be needed once per count values.
-
-    auto source_sliter = permuted_slice.begin() ;
-    auto source_sliter_end = permuted_slice.end() ;
-
-    while ( source_sliter < source_sliter_end )
-    {
-      // try loading vsize successive offsets into an index_type
-      
-      int e ;
-      
-      for ( e = 0 ; e < vsize && source_sliter < source_sliter_end ; ++e , ++source_sliter )
-        
-        source_indexes[e] = &(*source_sliter) - source_base_adress ;
-      
-      if ( e < vsize )
-        
-        // have got less than vsize only? mask the operation
-        
-        mask = ( simdized_type::IndexesFromZero() < e ) ;
-      
-      // perform extended gather with extrusion parameters
-      
-      gather<simdized_type> ( source_base_adress , buffer_base_adress ,
-                              source_indexes , mask , source_stride , count ) ;
-                              
-      // finally (puh): apply the prefilter, using the solver in-place, iterating over
-      // the vectors in buffer with maximum efficiency.
-                              
-      slv.solve ( buffer.begin() ) ;
-      
-      // and perform extended scatter with extrusion parameters to write the filtered data
-      // to the destination
-
-      scatter<simdized_type> ( buffer_base_adress , target_base_adress ,
-                               source_indexes , mask , source_stride , count ) ;
-    }
-  }
-  else
-  {
-    // pretty much the same as the previouse operation, with the distinction that
-    // copying the filtered data from the buffer to the target now needs it's own set of
-    // indexes etc., since all these may be different.
-    // TODO we might permute source_slice's strides to ascending and apply the same
-    // permutation to target_slice.
-    
-    auto source_slice = source.bindAt ( axis , 0 ) ;
-    auto source_sliter = source_slice.begin() ;
-    auto source_sliter_end = source_slice.end() ;
-
-    auto target_slice = target.bindAt ( axis , 0 ) ;
-    int target_stride = target.stride ( axis ) ;
-    auto target_sliter = target_slice.begin() ;
-    auto target_sliter_end = target_slice.end() ;
-    index_type target_indexes ;
-
-    while ( source_sliter < source_sliter_end )
-    {
-      int e ;
-      for ( e = 0 ; e < vsize && source_sliter < source_sliter_end ; ++e , ++source_sliter , ++target_sliter )
-      {
-        source_indexes[e] = &(*source_sliter) - source_base_adress ;
-        target_indexes[e] = &(*target_sliter) - target_base_adress ;
-      }
-      if ( e < vsize )
-        mask = ( simdized_type::IndexesFromZero() < e ) ;
-      gather<simdized_type> ( source_base_adress , buffer_base_adress ,
-                              source_indexes , mask , source_stride , count ) ;
-      slv.solve ( buffer.begin() ) ;
-      scatter<simdized_type> ( buffer_base_adress , target_base_adress ,
-                               target_indexes , mask , target_stride , count ) ;
-    }
-  }
-  return 0 ;
-}
-
-template < class source_type ,
-           class target_type >
-int aggregating_filter ( source_type &source ,
-                         target_type &target ,
-                         bc_code bc ,
-                         int degree ,
-                         int axis )
-{
-  typedef typename source_type::value_type value_type ;
-  static_assert ( std::is_same < value_type , typename target_type::value_type > :: value ,
-    "aggregating_filter: both arrays must have the same value_type" ) ;
-  typedef typename ExpandElementResult < value_type > :: type ele_type ;
-
-  int lambda_exponent = 1 ;
-  
-  // heuristic. for high degrees, below optimization would reduce precision too much
-  if ( pow ( degree , int(target.actual_dimension) ) < 64 ) //  was: if ( degree < 7 ) 
-  {
-    lambda_exponent = 0 ;
-    if ( axis == 0 )
-      lambda_exponent = source_type::actual_dimension ;
-  }
-  
-  if ( ExpandElementResult < value_type > :: size != 1 )
-  {
-    // value_type is an aggregate type, but we want to operate on elementary types
-    // so we element-expand the array and call ele_aggregating_filter, which works on
-    // arrays with elementary types.
-    auto expanded_source = source.expandElements ( 0 ) ;
-    auto expanded_target = target.expandElements ( 0 ) ;
-    return ele_aggregating_filter ( expanded_source , expanded_target ,
-                                    bc , degree , axis + 1 , lambda_exponent ) ;
-  }
-  else
-  {
-    // this looks odd - why do we create new views here when the input
-    // contains ele_type data already? Because if the input contains aggregates,
-    // a direct call to ele_filter here wouldn't go away, but won't compile, since
-    // in ele_aggregating_filter we try and typedef a vector of the contained
-    // (aggregate) data type. Hence the acrobatics...
-    MultiArrayView < source.actual_dimension , ele_type >
-      es ( source.shape() , source.stride() , (ele_type*)(source.data()) ) ;
-    MultiArrayView < target.actual_dimension , ele_type >
-      et ( target.shape() , target.stride() , (ele_type*)(target.data()) ) ;
-    return ele_aggregating_filter ( es , et ,
-                                    bc , degree , axis , lambda_exponent ) ;
-  }
-}
-
-/// solve_vc is the routine to prefilter using vectorization with Vc.
-/// This is the single-axis version.
-
-// TODO The strategy is really the same as used by solve_vigra - i.e. build the
-// suitable filter into chunk_func_2 and apply it to chunks of data, which is done in
-// sequence for all axes. So the only difference is the filter, and we might factor the
-// application machinery out.
-
-template < typename input_array_type , 
-           typename output_array_type >     // type of array for coefficients (may be the same)
-void solve_vc ( input_array_type &input ,
-                output_array_type &output ,
-                bc_code bc ,                 // boundary treatment for this solver
-                int degree ,
-                int d ,                      // axis to process
-                int nslices = ncores )  // number of threads to use
-{
-  using namespace std::placeholders ;
-
-  // use bind to create a functor which can be passed to divide_and_conquer_2
-
-  auto chunk_func_2
-  = std::bind ( aggregating_filter < input_array_type , output_array_type > ,
-                _1 ,
-                _2 ,
-                bc ,
-                degree ,
-                d ) ;
-
-  // use divide_and_conquer_2 to split input and output into chunks and apply
-  // the functor above to each corresponding pair of chunks in a separate thread
-
-  divide_and_conquer_2 < input_array_type , output_array_type >
-  :: run ( input ,
-           output ,
-           chunk_func_2 ,
-           d ,
-           nslices ) ;
-}
-
-/// multi-axis version of solve_vc. This is what I use now per default, it performs
-/// the prefiltering with multiple threads and vectorization, which is the fastest
-/// way I could come up with.
-
-template < typename input_array_type ,      ///< type of array with knot point data
-           typename output_array_type >     ///< type of array for coefficients (may be the same)
-void solve_vc ( input_array_type& input ,
-                output_array_type& output ,
-                TinyVector<bc_code,input_array_type::actual_dimension> bc ,
-                int degree ,
-                int nslices = ncores )
-{
-  // check if operation is in-place. I assume that the test performed here
-  // is sufficient to determine if the operation is in-place.
-  
-  bool in_place = false ;
-  
-  if ( (void*)(input.data()) == (void*)(output.data()) )
-    in_place = true ;
-
-  // if input == output, with degree <= 1 we needn't do anything at all.
-  
-  if ( in_place && degree <= 1 )
-    return ;
-
-  
-  // do a bit of compatibility checking
- 
-  const int dim = input_array_type::actual_dimension ;
-  
-  if ( output_array_type::actual_dimension != dim )
-  {
-    cerr << "solve_vigra: dimensions don't match" << endl ;
-    throw dimension_mismatch ( "input and output array must have the same dimension" ) ;
-  }
-  
-  typedef typename input_array_type::difference_type diff_t ;
-  diff_t shape = input.shape() ;
-  if ( output.shape() != shape )
-  {
-    cerr << "solve_vigra: shapes don't match" << endl ;
-    throw dimension_mismatch ( "input and output array must have the same shape" ) ;
-  }
-
-  // even if degree <= 1, we'll only arrive here if input != output.
-  // So we still have to copy the input data to the output (solve_identity)
-  
-  solve_vc<input_array_type,output_array_type>
-             ( input , output , bc[0] , degree , 0 , nslices ) ;
-             
-  // but if degree <= 1 we're done already, since copying the data again
-  // in dimensions 1... is futile
-
-  if ( degree > 1 )
-  {
-    for ( int d = 1 ; d < dim ; d++ )
-      solve_vc<output_array_type,output_array_type>
-                ( output , output , bc[d] , degree , d , nslices ) ;
-  }
-}
-
-#endif // USE_VC
-
 } ; // namespace vspline
 
 #endif // VSPLINE_PREFILTER_H

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/vspline.git



More information about the debian-science-commits mailing list