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; // origin image 00042 RImage* I; // current image 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