+
+#undef HAVE_BSPLINE_INTERP
+
+class Backproject;
+
+class Backprojector
+{
+ public:
+ typedef enum {
+ BPROJ_INVALID,
+ BPROJ_TRIG,
+ BPROJ_TABLE,
+ BPROJ_DIFF,
+ BPROJ_DIFF2,
+ BPROJ_IDIFF2,
+ BPROJ_IDIFF3
+} BackprojectID;
+
+ typedef enum {
+ INTERP_INVALID,
+ INTERP_NEAREST, // Nearest neighbor
+#if HAVE_BSPLINE_INTERP
+ I_BSPLINE,
+ I_1BSPLINE, // 1st order B-Spline
+ I_2BSPLINE,
+ I_3BSPLINE,
+#endif
+ INTERP_LINEAR, // Linear interpolation
+ INTERP_FREQ_PREINTERPOLATION,
+ } InterpolationID;
+
+ static const char BPROJ_TRIG_STR[]= "trig";
+ static const char BPROJ_TABLE_STR[]= "table";
+ static const char BPROJ_DIFF_STR[]= "diff";
+ static const char BPROJ_DIFF2_STR[]= "diff2";
+ static const char BPROJ_IDIFF2_STR[]= "idiff2";
+ static const char BPROJ_IDIFF3_STR[]= "idiff3";
+
+ static const char INTERP_NEAREST_STR[]= "nearest";
+ static const char INTERP_LINEAR_STR[]= "linear";
+ static const char INTERP_BSPLINE_STR[]= "bspline";
+ static const char INTERP_FREQ_PREINTERPOLATION_STR[]= "freq_preinterpolation";
+
+ Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+
+ ~Backprojector (void);
+
+ void BackprojectView (const double* const viewData, const double viewAngle);
+
+ bool fail(void) const {return m_fail;}
+ const string& failMessage(void) const {return m_failMessage;}
+
+ private:
+ string m_nameBackproject;
+ string m_nameInterpolation;
+ BackprojectID m_idBackproject;
+ InterpolationID m_idInterpolation;
+ Backproject* m_pBackprojectImplem;
+ bool m_fail;
+ string m_failMessage;
+
+ static const InterpolationID convertInterpolationNameToID (const char* const interpName);
+ static const char* convertInterpolationIDToName (const InterpolationID interpID);
+ static const BackprojectID convertBackprojectNameToID (const char* const bprojName);
+ static const char* convertBackprojectIDToName (const BackprojectID bprojID);
+
+ bool initBackprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+};
+
+