Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxNgbDefuz.h

00001 /*
00002  *  Copyright (c) 2002, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *  Author(s):
00006  *  Leon Todoran            (todoran@science.uva.nl)
00007  */
00008 
00009 #ifndef HxNgbDefuz_h
00010 #define HxNgbDefuz_h
00011 
00012 #include "HxClassName.h"
00013 #include "HxSizes.h"
00014 #include "HxCategories.h"
00015 #include "HxTagList.h"
00016 
00017 #include <algorithm>
00018 
00021 template <class ArgType, class ResType>
00022 class HxNgbDefuz 
00023 {
00024 public:
00025 
00027     typedef HxTagLoop        IteratorCategory;
00028 
00030     typedef HxTag1Phase      PhaseCategory;
00031 
00032 
00039 //                          HxNgbDefuz();
00040                             HxNgbDefuz(HxTagList& tags);
00041                             ~HxNgbDefuz();
00042 
00043     HxSizes                 size();
00044     void                    init(int, int, ArgType);
00045 
00046     void                    next(int x, int y, ArgType value);
00047     ResType                  result() const;
00048 
00050     static HxString         className();
00051 
00052 private:
00053     int                     _pctIdx;
00054     int                     _sizeX;
00055     int                     _sizeY;
00056     int                     _uniformTh;
00057 
00058     ArgType*                 _values;
00059     int                     _i;
00060 };
00061 
00062 template <class ArgType, class ResType>
00063 ostream&
00064 operator<<(ostream& os, const HxNgbDefuz<ArgType, ResType>& pct)
00065 {
00066     return pct.put(os);
00067 }
00068 
00069 template <class ArgType, class ResType>
00070 inline HxString
00071 HxNgbDefuz<ArgType, ResType>::className()
00072 {
00073     static HxString s("defuz");
00074     return s;
00075 }
00076 
00077 template <class ArgType, class ResType>
00078 inline void
00079 HxNgbDefuz<ArgType, ResType>::init(int, int, ArgType)
00080 {
00081     _i = 0;
00082 }
00083 
00084 template <class ArgType, class ResType>
00085 inline void
00086 HxNgbDefuz<ArgType, ResType>::next(int, int, ArgType value)
00087 {
00088     _values[_i++] = value;
00089 }
00090 
00091 template <class ArgType, class ResType>
00092 inline HxSizes
00093 HxNgbDefuz<ArgType, ResType>::size()
00094 {
00095     return HxSizes(_sizeX, _sizeY, 1);
00096 }
00097 
00098 template <class ArgType, class ResType>
00099 inline ResType
00100 HxNgbDefuz<ArgType, ResType>::result() const
00101 {
00102     std::sort(&_values[0], &_values[_sizeX*_sizeY]);
00103     ArgType minval=_values[0];
00104     ArgType maxval=_values[_sizeX*_sizeY-1];
00105      if(_values[_pctIdx] < minval + _uniformTh * (maxval - minval))
00106          return minval;
00107      else
00108          return maxval;
00109 }
00110 
00111 template <class ArgType, class ResType>
00112 HxNgbDefuz<ArgType, ResType>::HxNgbDefuz(HxTagList& tags)
00113     : _values(0)
00114 {
00115 
00116     _sizeX      = HxGetTag(tags, "windowSzX", 5);
00117     _sizeY      = HxGetTag(tags, "windowSzY", 5);
00118     _uniformTh  = HxGetTag(tags, "thr", 0.5);
00119     _pctIdx     = 0.5 * (_sizeX * _sizeY);
00120 
00121     _values = new ArgType[_sizeX * _sizeY];
00122 
00123 }
00124 
00125 template <class ArgType, class ResType>
00126 HxNgbDefuz<ArgType, ResType>::~HxNgbDefuz()
00127 {
00128     if (_values)
00129         delete [] _values;
00130 }
00131 
00132 
00133 #endif
00134 

Generated on Tue Feb 3 14:18:40 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001