00001 #ifndef __GShockFilter__
00002 #define __GShockFilter__
00003 
00031 #include <stdio.h>
00032 
00033 #include "AbsRImageFilter.hpp"
00034 
00035 #include "AbsRImageFlow.hpp"
00036 
00037 class GShockFilter : public AbsRImageFilter
00038 {
00039 protected:
00040 
00041 RImage*                 I0;                             
00042 RImage*                 I;                              
00043 
00044 int                             niterations;
00045 double                  alpha;
00046 
00047 AbsRImageFlow*          shock;
00048 
00049 protected:
00050 
00051 virtual void operations(RImage& result);
00052 virtual void operations(AnImage& mask, RImage& result);
00053 
00054 public:
00055 GShockFilter(AbsRImageFlow* ashock, int n=30, double ralpha=0.05);
00056 virtual ~GShockFilter(){}
00057 
00058 virtual void setLimiter(AbsLimiter* alimiter=0)
00059         { 
00060         AbsRImageFilter::setLimiter(alimiter); 
00061         if( shock != 0 ) shock->setLimiter(alimiter);
00062         }
00063 
00064 
00065 virtual RImage* filter(RImage* src, RImage* dest=0);
00066 virtual RImage* selectedFilter(AnImage* mask, RImage* src, RImage* dest=0);
00067 
00068 virtual void report(FILE* file){}
00069 };
00070 
00071 
00072 #endif