00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
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