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