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 // speckel noise removal (Sethian denoising) 00040 IMultiImageOp* createBinaryMinMaxFlow(int iter=50); 00041 IMultiImageOp* createGreyMinMaxFlow(int type, int iter=50); 00042 00043 // classic 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 // curvature based flows (Kimmel restoration) 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 // TV based flows 00056 IMultiImageOp* createTVFlow(int iter=50); // Rudin/Osher/Fatemi 00057 IMultiImageOp* createTVvariantFlow(int iter=50, int type=1 ); // implentations Rudin/Osher/Fatemi 00058 IMultiImageOp* createTVMarquinaFlow(int iter=50); // Fast Marquina TV 00059 IMultiImageOp* createTVBeltramiFlow(int iter=50); // Kimmel TV 00060 00061 IMultiImageOp* createLysakerFlow(int iter=50, int m=2); // m= 1 linear TV , m=2,3 NL 00062 00063 // coherence-enhancement diffusions 00064 IMultiImageOp* createCoherenceEnhancementDiffusion(int iter=50, bool nonNegativeDiscretization=false); 00065 IMultiImageOp* createCoherenceEnhancementDiffusion55(int iter=50); 00066 00067 // enhancement (Deriche&all) 00068 IMultiImageOp* createSingleShockFilter(int iter=50); 00069 IMultiImageOp* createSelectiveShockFilter(int iter=50); 00070 IMultiImageOp* createColorShockFilter(int iter=50); 00071 00072 // combined color flows 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