snakes_base.hxx

00001 // Copyright (C) 2004  EPITA Research and Development Laboratory
00002 //
00003 // This file is part of the Olena Library.  This library is free
00004 // software; you can redistribute it and/or modify it under the terms
00005 // of the GNU General Public License version 2 as published by the
00006 // Free Software Foundation.
00007 //
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU General Public License
00014 // along with this library; see the file COPYING.  If not, write to
00015 // the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
00016 // MA 02111-1307, USA.
00017 //
00018 // As a special exception, you may use this file as part of a free
00019 // software library without restriction.  Specifically, if other files
00020 // instantiate templates or use macros or inline functions from this
00021 // file, or you compile this file and link it with other files to
00022 // produce an executable, this file does not by itself cause the
00023 // resulting executable to be covered by the GNU General Public
00024 // License.  This exception does not however invalidate any other
00025 // reasons why the executable file might be covered by the GNU General
00026 // Public License.
00027 
00028 #ifndef OLENA_SNAKES_SNAKES_BASE_HXX
00029 # define OLENA_SNAKES_SNAKES_BASE_HXX
00030 
00031 #include <oln/morpho/gradient.hh>
00032 
00033 namespace oln {
00034 
00035   namespace snakes {
00036 
00037     template <class algorithm>
00038     snake<algorithm>::snake(const image_type&           image,
00039                             std::list<point_type>       initial_contour,
00040                             ntg::float_s                alpha,
00041                             ntg::float_s                beta,
00042                             ntg::float_s                gamma,
00043                             ntg::float_s                khi = 0.0f) :
00044       s(initial_contour), a(alpha, beta, gamma, khi),
00045       alpha(alpha), beta(beta), gamma(gamma), khi(khi)
00046     {
00047       gradient = morpho::fast::beucher_gradient(image, win_c8p());
00048     };
00049 
00050     template <class algorithm>
00051     std::list<typename snake<algorithm>::point_type>
00052     snake<algorithm>::contour(void) const
00053     {
00054       return s.contour();
00055     }
00056 
00057     template <class algorithm>
00058     ntg::float_s
00059     snake<algorithm>::energy(void) const
00060     {
00061       return s.energy(gradient);
00062     }
00063 
00064     template <class algorithm>
00065     inline
00066     int
00067     snake<algorithm>::update_snake(void)
00068     {
00069       return a.update_snake(gradient, *this);
00070     }
00071 
00072     template <class algorithm>
00073     inline
00074     void
00075     snake<algorithm>::converge(void)
00076     {
00077       a.converge(gradient, *this);
00078     }
00079 
00080   } // end snakes
00081 
00082 } // end oln
00083 
00084 #endif // !OLENA_SNAKES_SNAKES_BASE_HXX

Generated on Thu Apr 15 20:13:14 2004 for Olena by doxygen 1.3.6-20040222