libidx
/home/rex/ebltrunk/core/libidx/include/pyramids.h
00001 /***************************************************************************
00002  *   Copyright (C) 2009 by Pierre Sermanet   *
00003  *   pierre.sermanet@gmail.com   *
00004  *   All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions are met:
00008  *     * Redistributions of source code must retain the above copyright
00009  *       notice, this list of conditions and the following disclaimer.
00010  *     * Redistributions in binary form must reproduce the above copyright
00011  *       notice, this list of conditions and the following disclaimer in the
00012  *       documentation and/or other materials provided with the distribution.
00013  *     * Redistribution under a license not approved by the Open Source 
00014  *       Initiative (http://www.opensource.org) must display the 
00015  *       following acknowledgement in all advertising material:
00016  *        This product includes software developed at the Courant
00017  *        Institute of Mathematical Sciences (http://cims.nyu.edu).
00018  *     * The names of the authors may not be used to endorse or promote products
00019  *       derived from this software without specific prior written permission.
00020  *
00021  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 
00022  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00023  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00024  * DISCLAIMED. IN NO EVENT SHALL ThE AUTHORS BE LIABLE FOR ANY
00025  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00026  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00027  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00028  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00029  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00030  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00031  ***************************************************************************/
00032 
00033 #ifndef PYRAMIDS_H_
00034 #define PYRAMIDS_H_
00035 
00036 #include "defines.h"
00037 #include "idx.h"
00038 #include "numerics.h"
00039 #include "geometry.h"
00040 #include "padder.h"
00041 #include "filters.h"
00042 
00043 namespace ebl {
00044 
00057   template <class T> class gaussian_pyramid {
00058   public:
00062     gaussian_pyramid(double c = 0.375);
00064     virtual ~gaussian_pyramid();
00065 
00066     // scaling operations //////////////////////////////////////////////////////
00067 
00078     idx<T> reduce(idx<T> &in, uint n = 1);
00080     rect<uint> reduce_rect(const rect<uint> &r, uint n = 1);
00082     uint count_reductions(uint insz, uint outsz, uint &dist);    
00085     uint count_reductions_exact(rect<uint> &inr, rect<uint> &outr,
00086                                 rect<uint> &inr_exact);    
00093     idx<T> expand(idx<T> &in, uint n = 1);    
00095     rect<uint> expand_rect(const rect<uint> &r, uint n = 1);
00097     uint count_expansions(uint insz, uint outsz, uint &dist);
00098 
00099     // util methods ////////////////////////////////////////////////////////////
00100 
00103     idx<T> cut_pad(idx<T> &in, int nz);
00104 
00105     // members /////////////////////////////////////////////////////////////////
00106     idx<T> red_tin;
00107   protected:
00108     double a;
00109     idx<T> filter;
00110   };
00111 
00112 } // end namespace ebl
00113 
00114 #include "pyramids.hpp"
00115 
00116 #endif /* PYRAMIDS_H_ */