gaborpatch.h

Go to the documentation of this file.
00001 
00003 
00004 //
00005 // Copyright (c) 2002-2004 California Institute of Technology
00006 // Copyright (c) 2004-2007 University of Southern California
00007 // Rob Peters <rjpeters at usc dot edu>
00008 //
00009 // created: Mon May 12 14:45:43 2003
00010 // commit: $Id: gaborpatch.h 10065 2007-04-12 05:54:56Z rjpeters $
00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/visx/gaborpatch.h $
00012 //
00013 // --------------------------------------------------------------------
00014 //
00015 // This file is part of GroovX.
00016 //   [http://ilab.usc.edu/rjpeters/groovx/]
00017 //
00018 // GroovX is free software; you can redistribute it and/or modify it
00019 // under the terms of the GNU General Public License as published by
00020 // the Free Software Foundation; either version 2 of the License, or
00021 // (at your option) any later version.
00022 //
00023 // GroovX is distributed in the hope that it will be useful, but
00024 // WITHOUT ANY WARRANTY; without even the implied warranty of
00025 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00026 // General Public License for more details.
00027 //
00028 // You should have received a copy of the GNU General Public License
00029 // along with GroovX; if not, write to the Free Software Foundation,
00030 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00031 //
00033 
00034 #ifndef GROOVX_VISX_GABORPATCH_H_UTC20050626084017_DEFINED
00035 #define GROOVX_VISX_GABORPATCH_H_UTC20050626084017_DEFINED
00036 
00037 #include "geom/geom.h"
00038 
00039 #include <cmath>
00040 
00041 struct GaborSpec
00042 {
00044 
00047   GaborSpec(double s, double o, double t, double p);
00048 
00050   bool operator<(const GaborSpec& x) const;
00051 
00052   const double theta;     
00053   const double phi;       
00054   const double sigma;     
00055   const double omega;     
00056 };
00057 
00059 
00060 class GaborPatch
00061 {
00062 public:
00063   GaborPatch(const GaborSpec& spec);
00064 
00065   ~GaborPatch();
00066 
00067   static const GaborPatch& lookup(const GaborSpec& s);
00068 
00069   static const GaborPatch& lookup(double sigma, double omega,
00070                                   double theta, double phi);
00071 
00072   int size() const { return itsSize; }
00073 
00075 
00077   double at(int x, int y) const
00078   {
00079     return (itsData != 0)
00080       ? itsData[x + y*itsSize]
00081       : compute(x, y);
00082   }
00083 
00085 
00088   void fillCache();
00089 
00090 private:
00091   GaborPatch(const GaborPatch&);
00092   GaborPatch& operator=(const GaborPatch&);
00093 
00094   double compute(int x, int y) const;
00095 
00096   const GaborSpec itsSpec;
00097   const int itsSize;
00098   const double itsCenter;
00099   const double itsCosTheta;
00100   const double itsSinTheta;
00101   const double itsSigmaSqr;
00102   double* itsData;
00103 };
00104 
00105 static const char __attribute__((used)) vcid_groovx_visx_gaborpatch_h_utc20050626084017[] = "$Id: gaborpatch.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00106 #endif // !GROOVX_VISX_GABORPATCH_H_UTC20050626084017_DEFINED

The software described here is Copyright (c) 1998-2005, Rob Peters.
This page was generated Wed Dec 3 06:49:42 2008 by Doxygen version 1.5.5.