** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: backprojectors.h,v 1.22 2001/02/22 18:22:40 kevin Exp $
+** $Id$
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
class Backproject;
class ImageFile;
class Projections;
+struct ReconstructionROI;
class Backprojector
{
static const int INTERP_3BSPLINE;
#endif
- Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+ Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName,
+ const char* const interpName, const int interpFactor, const ReconstructionROI* pROI);
~Backprojector ();
void BackprojectView (const double* const viewData, const double viewAngle);
+ void PostProcessing();
bool fail() const {return m_fail;}
const std::string& failMessage() const {return m_failMessage;}
static const char* const s_aszInterpTitle[];
static const int s_iInterpCount;
- bool initBackprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+ bool initBackprojector (const Projections& proj, ImageFile& im, const char* const backprojName,
+ const char* const interpName, const int interpFactor, const ReconstructionROI* pROI);
};
class Backproject
{
public:
- Backproject (const Projections& proj, ImageFile& im, int interpID, const int interpFactor);
+ Backproject (const Projections& proj, ImageFile& im, int interpID, const int interpFactor,
+ const ReconstructionROI* pROI);
virtual ~Backproject ();
- virtual void BackprojectView (const double* const viewData, const double viewAngle) {};
+ virtual void BackprojectView (const double* const viewData, const double viewAngle) = 0;
+ virtual void PostProcessing (); // call after backprojecting all views
protected:
void ScaleImageByRotIncrement ();
- void Backproject::errorIndexOutsideDetector (int ix, int iy, double theta, double r, double phi, double L, int ni);
- void Backproject::errorIndexOutsideDetector (int ix, int iy, double theta, double L, int ni);
-
+ void errorIndexOutsideDetector (int ix, int iy, double theta, double r, double phi, double L, int ni);
+ void errorIndexOutsideDetector (int ix, int iy, double theta, double L, int ni);
const Projections& proj;
ImageFile& im;
int interpType;
double xInc, yInc; // size of cells
int m_interpFactor;
double m_dFocalLength;
+ double m_dSourceDetectorLength;
+ bool m_bPostProcessingDone;
private:
Backproject (const Backproject& rhs);
class BackprojectTrig : public Backproject
{
public:
- BackprojectTrig (const Projections& proj, ImageFile& im, int interpID, const int interpFactor)
- : Backproject (proj, im, interpID, interpFactor)
+ BackprojectTrig (const Projections& proj, ImageFile& im, int interpID, const int interpFactor, const ReconstructionROI* pROI)
+ : Backproject (proj, im, interpID, interpFactor, pROI)
{}
void BackprojectView (const double* const t, const double view_angle);
class BackprojectTable : public Backproject
{
public:
- BackprojectTable (const Projections& proj, ImageFile& im, int interpID, const int interpFactor);
+ BackprojectTable (const Projections& proj, ImageFile& im, int interpID, const int interpFactor, const ReconstructionROI* pROI);
virtual ~BackprojectTable ();
- void BackprojectView (const double* const t, const double view_angle);
+ virtual void BackprojectView (const double* const t, const double view_angle);
+ virtual void PostProcessing (); // call after backprojecting all views
protected:
Array2d<kfloat64> arrayR;
class BackprojectDiff : public Backproject
{
public:
- BackprojectDiff (const Projections& proj, ImageFile& im, int interpID, const int interpFactor);
+ BackprojectDiff (const Projections& proj, ImageFile& im, int interpID, const int interpFactor, const ReconstructionROI* pROI);
~BackprojectDiff ();
- void BackprojectView (const double* const t, const double view_angle);
+ virtual void BackprojectView (const double* const t, const double view_angle);
+ virtual void PostProcessing (); // call after backprojecting all views
protected:
double start_r;
class BackprojectIntDiff : public BackprojectDiff
{
public:
- BackprojectIntDiff (const Projections& proj, ImageFile& im, int interpID, const int interpFactor)
- : BackprojectDiff (proj, im, interpID, interpFactor)
+ BackprojectIntDiff (const Projections& proj, ImageFile& im, int interpID, const int interpFactor, const ReconstructionROI* pROI)
+ : BackprojectDiff (proj, im, interpID, interpFactor, pROI)
{}
void BackprojectView (const double* const t, const double view_angle);
class BackprojectEquilinear : public BackprojectTable
{
public:
- BackprojectEquilinear (const Projections& proj, ImageFile& im, int interpID, const int interpFactor)
- : BackprojectTable (proj, im, interpID, interpFactor)
+ BackprojectEquilinear (const Projections& proj, ImageFile& im, int interpID, const int interpFactor, const ReconstructionROI* pROI)
+ : BackprojectTable (proj, im, interpID, interpFactor, pROI)
{}
void BackprojectView (const double* const t, const double view_angle);
class BackprojectEquiangular : public BackprojectTable
{
public:
- BackprojectEquiangular (const Projections& proj, ImageFile& im, int interpID, const int interpFactor)
- : BackprojectTable (proj, im, interpID, interpFactor)
+ BackprojectEquiangular (const Projections& proj, ImageFile& im, int interpID, const int interpFactor, const ReconstructionROI* pROI)
+ : BackprojectTable (proj, im, interpID, interpFactor, pROI)
{}
void BackprojectView (const double* const t, const double view_angle);