1 // This is mul/vimt3d/tests/test_gauss_reduce.cxx
2 #include <iostream>
3 #include "testlib/testlib_test.h"
4 #ifdef _MSC_VER
5 #  include "vcl_msvc_warnings.h"
6 #endif
7 #include <vimt3d/vimt3d_image_3d_of.h>
8 #include <vimt3d/vimt3d_gauss_reduce.h>
9 
10 
test_gauss_reduce_float()11 static void test_gauss_reduce_float()
12 {
13   std::cout << "*****************************\n"
14            << " Testing vimt3d_gauss_reduce\n"
15            << "*****************************\n";
16 
17   unsigned ni = 20, nj = 20, nk = 20;
18   std::cout<<"Image Size: "<<ni<<" x "<<nj<<" k "<<nk<<std::endl;
19 
20   vimt3d_image_3d_of<float> image0;
21   image0.image().set_size(ni,nj,nk);
22 
23   for (unsigned k=0; k<image0.image().nk(); ++k)
24     for (unsigned j=0; j<image0.image().nj(); ++j)
25       for (unsigned i=0; i<image0.image().ni(); ++i)
26         image0.image()(i,j,k) = i*0.1f+j+k*10;
27 
28 
29   unsigned ni2 = (ni+1)/2;
30   unsigned nj2 = (nj+1)/2;
31   unsigned nk2 = (nk+1)/2;
32   vimt3d_image_3d_of<float> image1,work_im1,work_im2;
33   vimt3d_gauss_reduce(image0,image1,work_im1,work_im2);
34   TEST("size i",image1.image().ni(),(ni+1)/2);
35   TEST("size j",image1.image().nj(),(nj+1)/2);
36   TEST("size k",image1.image().nk(),(nk+1)/2);
37   TEST_NEAR("Pixel (0,0,0)",image0.image()(0,0,0),image1.image()(0,0,0), 6);
38   TEST_NEAR("Pixel (1,1,1)",image0.image()(2,2,2),image1.image()(1,1,1),1e-5);
39   TEST_NEAR("Pixel (2,3,3)",image1.image()(2,3,3),66.4f,1e-4);
40   TEST_NEAR("Corner pixel",image0.image()(ni2*2-2,nj2*2-2,nk2*2-2),image1.image()(ni2-1,nj2-1,nk2-1),6);
41 }
42 
43 
test_gauss_reduce()44 static void test_gauss_reduce()
45 {
46   test_gauss_reduce_float();
47 }
48 
49 TESTMAIN(test_gauss_reduce);
50