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

HxExportExtraIdentMaskMoments.h

00001 /*
00002  *  Copyright (c) 2002, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *  Author(s):
00006  *  Dennis Koelma (koelma@wins.uva.nl)
00007  *
00008  */
00009 
00010 #ifndef HxExportExtraIdentMaskMoments_h
00011 #define HxExportExtraIdentMaskMoments_h
00012 
00013 #include "HxClassName.h"
00014 #include "HxSizes.h"
00015 #include "HxCategories.h"
00016 #include "HxTagList.h"
00017 
00018 
00037 template<class ResultT, class ImValT, class ExtraValT>
00038 class HxExportExtraIdentMaskMoments
00039 {
00040 public:
00042     typedef HxTagTransVar       TransVarianceCategory;
00043 
00045     typedef HxTag1Phase         PhaseCategory;
00046 
00047 
00049                         HxExportExtraIdentMaskMoments(HxTagList& tags);
00050 
00052                         ~HxExportExtraIdentMaskMoments();
00053 
00055     void                doIt(const ImValT& imV, const ExtraValT& extraV,
00056                              int x, int y, int z);
00057 
00059     static HxString     className();
00060 
00061 private:
00062     HxTagList&          _tags;
00063     HxValueList*        _valList;
00064     ExtraValT           _maskVal;
00065     int                 _order;
00066     int                 _number;
00067     ResultT*            _sums;
00068 };
00069 
00070 template<class ResultT, class ImValT, class ExtraValT>
00071 
00072 HxExportExtraIdentMaskMoments<ResultT,ImValT,ExtraValT>::HxExportExtraIdentMaskMoments(HxTagList& tags) : _tags(tags)
00073 {
00074     _maskVal = HxGetTag<int>(tags, "maskVal");
00075     _order = HxGetTag<int>(tags, "order");
00076     _valList = HxGetTag<HxValueList*>(tags, "valList");
00077     _number = ((_order+1)*(_order+2))/2;
00078     _sums = new ResultT[_number];
00079     ResultT *ptr = _sums;
00080     for (int i=0 ; i<_number; i++)
00081         *ptr++ = HxScalarInt(0);
00082 }
00083 
00084 template<class ResultT, class ImValT, class ExtraValT>
00085 
00086 HxExportExtraIdentMaskMoments<ResultT,ImValT,ExtraValT>    ::~HxExportExtraIdentMaskMoments()
00087 {
00088     HxValueListBackInserter res = std::back_inserter(*_valList);
00089     for (int i=0 ; i<_number ; i++)
00090         *res++ = HxValue(_sums[i]);
00091     delete _sums;
00092 }
00093 
00094 template<class ResultT, class ImValT, class ExtraValT>
00095 inline void
00096 
00097 HxExportExtraIdentMaskMoments<ResultT,ImValT,ExtraValT>    ::doIt(const ImValT& imV, const ExtraValT& extraV, int x, int y, int)
00098 {
00099     if (extraV == _maskVal) {
00100         int i=0;
00101         for (int q=0 ; q<=_order ; q++) {
00102             for (int p=0 ; p<=_order ; p++) {
00103                 if (p+q <= _order) {
00104                     HxScalarDouble f = ::pow(x, p) * ::pow(y, q);
00105                     _sums[i] += ResultT(f) * ResultT(imV);
00106                     i++;
00107                 }
00108             }
00109         }
00110     }
00111 }
00112 
00113 template<class ResultT, class ImValT, class ExtraValT>
00114 inline HxString
00115 HxExportExtraIdentMaskMoments<ResultT,ImValT,ExtraValT>::className()
00116 {
00117     return HxString("identMaskMoments");
00118 }
00119 
00120 
00121 #endif

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