00001 #ifndef __AFSpatialDiscretisation_H__
00002 #define __AFSpatialDiscretisation_H__
00003
00004
00005
00027 #include <stdio.h>
00028
00029 #include "FImage.hpp"
00030 #include "AFSymMatrix.hpp"
00031 #include "FloatVector.hpp"
00032
00034
00039 enum PixelOrder { Natural=0, RedBlack=1, Unknown=9 };
00040
00041 class AFSpatialDiscretisation
00042 {
00043 protected:
00044
00045 bool fixedMatrix;
00046 PixelOrder order;
00047
00048 public:
00049 AFSpatialDiscretisation(bool fixed=false){order= Natural; fixedMatrix=fixed; }
00050 virtual ~AFSpatialDiscretisation(){}
00051
00052 virtual void setI0(FImage* u0){}
00053 virtual FImage* getI0(){return 0;}
00054
00055 virtual void setTauRight(float t){}
00056 virtual float setTauRight(){return 0.0;}
00057
00058 virtual void init(FImage* uk){}
00059
00060
00061
00062 virtual FloatVector* getB(FImage* ik, FloatVector* uk=0);
00063 virtual FImage* getImage(FloatVector* uk, FImage* ik);
00064
00065 virtual AFSymMatrix* getA(float tau, FImage* uk, AFSymMatrix* Afull=0)=0;
00066
00067
00068 virtual AFSymMatrix* getAexplicit(float tau, FImage* uk, AFSymMatrix* Afull=0);
00069
00070
00071 virtual AFSymMatrix* getAsemiImplicit(float tau, FImage* uk, AFSymMatrix* Afull=0);
00072
00073
00074
00075 virtual FloatVector* getRowB(FImage* ik, int row, FloatVector* uk=0);
00076 virtual FImage* getRowImage(FloatVector* uk, int row, FImage* ik);
00077
00078 virtual FloatVector* getColB(FImage* ik, int col, FloatVector* uk=0);
00079 virtual FImage* getColImage(FloatVector* uk, int col, FImage* ik);
00080
00081 virtual AFSymMatrix* getRowA(float tau, FImage* uk, int row, AFSymMatrix* A1=0)=0;
00082 virtual AFSymMatrix* getColA(float tau, FImage* uk, int col, AFSymMatrix* A2=0)=0;
00083
00084
00085 virtual AFSymMatrix* getRowAexplicit(float tau, FImage* uk, int row, AFSymMatrix* A1=0);
00086 virtual AFSymMatrix* getColAexplicit(float tau, FImage* uk, int col, AFSymMatrix* A2=0);
00087
00088
00089 virtual AFSymMatrix* getRowAsemiImplicit(float tau, FImage* uk, int row, AFSymMatrix* A1=0);
00090 virtual AFSymMatrix* getColAsemiImplicit(float tau, FImage* uk, int col, AFSymMatrix* A2=0);
00091 };
00092
00093 #endif
00094
00095