00001 #ifndef __RestorationFactory__
00002 #define __RestorationFactory__
00003
00022 #include <stdio.h>
00023
00024 #include "IMultiImageOp.hpp"
00025
00026 #define NUMBER_RESTORATION_CONTEXT 7
00027 #define NUMBER_RESTORATION_MODELS 34
00028
00029 class RestorationFactory
00030 {
00031 public:
00032
00033 const static char context[NUMBER_RESTORATION_CONTEXT][64];
00034 const static char model[NUMBER_RESTORATION_MODELS][64];
00035 const static int modelContext[NUMBER_RESTORATION_MODELS];
00036
00037 protected:
00038
00039
00040 IMultiImageOp* createBinaryMinMaxFlow(int iter=50);
00041 IMultiImageOp* createGreyMinMaxFlow(int type, int iter=50);
00042
00043
00044 IMultiImageOp* createPerona1990Flow(int iter=50);
00045 IMultiImageOp* createRegularizedPeronaFlow(int iter=50);
00046 IMultiImageOp* createWeickertFlow(int iter=50);
00047 IMultiImageOp* createPeronaFabFlow(int iter=16);
00048
00049
00050 IMultiImageOp* createMeanCurvatureFlow(int iter=50, bool kimmelEmbedding=false);
00051 IMultiImageOp* createPeronaMalikFlow(int iter=50, bool kimmelEmbedding=false);
00052 IMultiImageOp* createBeltramiFlow(int iter=50);
00053 IMultiImageOp* createGeodesicBeltramiFlow(int iter=50);
00054
00055
00056 IMultiImageOp* createTVFlow(int iter=50);
00057 IMultiImageOp* createTVvariantFlow(int iter=50, int type=1 );
00058 IMultiImageOp* createTVMarquinaFlow(int iter=50);
00059 IMultiImageOp* createTVBeltramiFlow(int iter=50);
00060
00061 IMultiImageOp* createLysakerFlow(int iter=50, int m=2);
00062
00063
00064 IMultiImageOp* createCoherenceEnhancementDiffusion(int iter=50, bool nonNegativeDiscretization=false);
00065 IMultiImageOp* createCoherenceEnhancementDiffusion55(int iter=50);
00066
00067
00068 IMultiImageOp* createSingleShockFilter(int iter=50);
00069 IMultiImageOp* createSelectiveShockFilter(int iter=50);
00070 IMultiImageOp* createColorShockFilter(int iter=50);
00071
00072
00073 IMultiImageOp* createColorShapiroFilter(int iter=50);
00074 IMultiImageOp* createDericheSelectiveAnisotropicF(int iter=50);
00075 IMultiImageOp* createDericheCombinedAnisotropicF(int iter=50);
00076
00077 public:
00078 RestorationFactory(){}
00079 virtual ~RestorationFactory(){}
00080
00081 static int numberOfContexts(){ return NUMBER_RESTORATION_CONTEXT; }
00082 static int numberOfModels(){ return NUMBER_RESTORATION_MODELS; }
00083
00084 static const char* getContext(int i){ return RestorationFactory::context[getModelContext(i)]; }
00085 static const char* getModel(int i){ return RestorationFactory::model[i]; }
00086 static const int getModelContext(int i){ return RestorationFactory::modelContext[i]; }
00087
00088 IMultiImageOp* createModel(int indexModel, int iter=50);
00089
00090 virtual void report(FILE* file){}
00091 };
00092
00093
00094
00095 #endif