MeVisLabToolboxReference
MeVisLab/Standard/Sources/ML/MLKernel/mlConvolutionFilter.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //-------------------------------------------------------------------------
00005 
00010 //-------------------------------------------------------------------------
00011 // Prevent multiple including of this file.
00012 #if !defined (__mlConvolutionFilter_H)
00013 #define __mlConvolutionFilter_H
00014 
00015 // ML-includes
00016 #ifndef __mlInitSystemKernel_H
00017 #include "mlInitSystemKernel.h"
00018 #endif
00019 #ifndef __mlKernel_H
00020 #include "mlKernel.h"
00021 #endif
00022 #ifndef __mlKernelModule_H
00023 #include "mlKernelModule.h"
00024 #endif
00025 
00026 ML_START_NAMESPACE
00027 
00028   //--------------------------------------------------
00036   //--------------------------------------------------
00037   class MLKERNELEXPORT ConvolutionFilter : public KernelModule{
00038 
00039   public: 
00040 
00041     //--------------------------------------------------------------------------------------------------------
00127     //--------------------------------------------------------------------------------------------------------
00128     enum ConvKernelTypes { 
00129       AVERAGE_33_KERNEL    = 0,
00130       AVERAGE_55_KERNEL    ,
00131       AVERAGE_77_KERNEL    ,
00132       AVERAGE_1010_KERNEL  ,
00133       AVERAGE_2525_KERNEL  ,
00134       GAUSS_33_KERNEL      ,
00135       GAUSS_55_KERNEL      ,
00136       LAPLACE_KERNEL       ,
00137       LAPLACE_2_KERNEL     ,
00138       SOBEL_1_KERNEL       ,
00139       SOBEL_2_KERNEL       ,
00140       SOBEL_3_KERNEL       ,
00141       SOBEL_4_KERNEL       ,
00142       ID_KERNEL            ,
00143       FROM_EXTERNAL_KERNEL ,
00144 
00145       NUM_CONV_KERNEL_TYPES 
00146     };
00147 
00149     static const char* const ConvKernelNames[];
00150 
00151     //-------------------------------------------------------------------
00167     //-------------------------------------------------------------------
00168     ConvolutionFilter();
00169 
00171     EnumField *getConvKernelFld() const { return _convKernelFld; }
00172 
00173   protected:
00175     virtual void handleNotification(Field* field);
00176 
00179     virtual void _userKernelPostUpdate();
00180 
00183     virtual void calculateOutputImageProperties(int outIndex);
00184 
00190     CALC_ROW_H();
00191 
00194     template <typename DATATYPE>                                            
00195       void calcRow(MLsoffset    *indexTab,             
00196                    size_t       indexTabSize,                       
00197                    MLsoffset    srcVoxelOffset,                       
00198                    size_t       numVox,                       
00199                    DATATYPE     *inCursor,                             
00200                    DATATYPE     *outCursor,
00201                    const ImageVector &/*rowStart*/);                           
00202 
00203   private:
00205     EnumField *_convKernelFld;
00206 
00211     ML_MODULE_CLASS_HEADER(ConvolutionFilter);
00212  };
00213 
00214 ML_END_NAMESPACE
00215 
00216 #endif //of __mlConvolutionFilter_H
00217 
00218