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

HxNgbBernsen.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 HxNgbBernsen_h
00010 #define HxNgbBernsen_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 HxNgbBernsen 
00023 {
00024 public:
00025 
00027     typedef HxTagLoop        IteratorCategory;
00028 
00030     typedef HxTag1Phase      PhaseCategory;
00031 
00032 
00038 //                          HxNgbBernsen();
00039                             HxNgbBernsen(HxTagList& tags);
00040                             ~HxNgbBernsen();
00041 
00042     HxSizes                 size();
00043     void                    init(int, int, ArgType);
00044 
00045     void                    next(int x, int y, ArgType value);
00046     ResType                  result() const;
00047 
00049     static HxString         className();
00050 
00051 private:
00052     int                     _pctIdx;
00053     int                     _size;  //this 
00054     int                     _conn;  //connectivity 4 or 8
00055     int                     _windowSz;
00056     int                     _uniformTh;
00057     bool                    _uniformLow;
00058 
00059     ArgType*                 _values;
00060     int                     _i;
00061 };
00062 
00063 template <class ArgType, class ResType>
00064 ostream&
00065 operator<<(ostream& os, const HxNgbBernsen<ArgType, ResType>& pct)
00066 {
00067     return pct.put(os);
00068 }
00069 
00070 template <class ArgType, class ResType>
00071 inline HxString
00072 HxNgbBernsen<ArgType, ResType>::className()
00073 {
00074     static HxString s("bernsen");
00075     return s;
00076 }
00077 
00078 template <class ArgType, class ResType>
00079 inline void
00080 HxNgbBernsen<ArgType, ResType>::init(int, int, ArgType)
00081 {
00082     _i = 0;
00083 }
00084 
00085 template <class ArgType, class ResType>
00086 inline void
00087 HxNgbBernsen<ArgType, ResType>::next(int, int, ArgType value)
00088 {
00089     _values[_i++] = value;
00090 }
00091 
00092 template <class ArgType, class ResType>
00093 inline HxSizes
00094 HxNgbBernsen<ArgType, ResType>::size()
00095 {
00096     return HxSizes(_size, _size, 1);
00097 }
00098 
00099 template <class ArgType, class ResType>
00100 inline ResType
00101 HxNgbBernsen<ArgType, ResType>::result() const
00102 {
00103     std::sort(&_values[0], &_values[_size*_size]);
00104     ArgType minval=_values[0];
00105     ArgType maxval=_values[_size*_size-1];
00106     ArgType t = 0.5*(minval*maxval);
00107     ArgType d = maxval-minval;
00108     if(d>_uniformTh)
00109     {
00110         return _values[_pctIdx]<t?0:1;
00111     }
00112     else
00113     {
00114         return _uniformLow?0:1;
00115     }
00116 
00117     return _values[_pctIdx];
00118 }
00119 
00120 #ifdef INC_TEMPLATE_SRC
00121 #include "HxNgbBernsen.c"
00122 #endif
00123 
00124 
00125 #endif

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