Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

vimt_image_pyramid.txx

Go to the documentation of this file.
00001 // This is mul/vimt/vimt_image_pyramid.txx
00002 #ifndef vimt_image_pyramid_txx_
00003 #define vimt_image_pyramid_txx_
00004 //:
00005 // \file
00006 
00007 #include "vimt_image_pyramid.h"
00008 
00009 #include <vcl_cstdlib.h> // for abort()
00010 #include <vcl_cassert.h>
00011 
00012 //------------------------------------------------------------------------
00013 //: Convert an image pyramid into a flat image containing each layer.
00014 template <class T> void vimt_image_pyramid_flatten(T& out, const vimt_image_pyramid & in)
00015 {
00016   if (!out.is_class("vimt_image_2d"))
00017   {
00018     vcl_cerr<< "ERROR: vimt_image_pyramid_flatten(const vimt_image_pyramid &)\n"
00019             << "Don't know how to deal with image type "<< in(0).is_a() << '\n';
00020     vcl_abort();
00021   }
00022 
00023   const int n_levels = in.n_levels();
00024   assert(n_levels > 0);
00025   assert(out.is_a() == in(0).is_a());
00026 
00027   unsigned width = 0;
00028   for (int i =0; i<n_levels; ++i)
00029     width += static_cast<const vimt_image_2d&>(in(i)).image_base().ni();
00030 
00031   const unsigned nplanes = static_cast<const vimt_image_2d&>(in(0)).image_base().nplanes();
00032   unsigned height = static_cast<const vimt_image_2d&>(in(0)).image_base().nj();
00033   out.image().set_size(width, height, nplanes);
00034   out.image().fill(0);
00035 
00036   for (int i=0, offset=0; i<n_levels; ++i)
00037   {
00038     const T& im_i = static_cast<const T&>(in(i));
00039     const int ni = im_i.image().ni();
00040     const int nj = im_i.image().nj();
00041 
00042     for (unsigned int p=0;p<nplanes;++p)
00043       for (int y=0;y<nj;++y)
00044         for (int x=0;x<ni;++x)
00045           out.image()(x+offset, y, p) = im_i.image()(x, y, p);
00046 
00047     offset+=ni;
00048   }
00049 }
00050 
00051 
00052 #undef VIMT_IMAGE_PYRAMID_INSTANTIATE
00053 #define VIMT_IMAGE_PYRAMID_INSTANTIATE(T) \
00054 template void vimt_image_pyramid_flatten(T &, const vimt_image_pyramid &)
00055 
00056 #endif //vimt_image_pyramid_txx_

Generated on Thu Jan 10 14:43:58 2008 for contrib/mul/vimt by  doxygen 1.4.4