Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

RestorationFactory.hpp

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
SourceForge.net Logo
Restoreinpaint sourceforge project `C++/Java Image Processing, Restoration, Inpainting Project'.

Bernard De Cuyper: Open Project Leader: Concept, design and development.
Bernard De Cuyper & Eddy Fraiha 2002, 2003. Bernard De Cuyper 2004. Open and free, for friendly usage only.
Modifications on Belgium ground of this piece of artistic work, by governement institutions or companies, must be notified to Bernard De Cuyper.
bern_bdc@hotmail.com