projects
/
ctsim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r653: *** empty log message ***
[ctsim.git]
/
include
/
projections.h
diff --git
a/include/projections.h
b/include/projections.h
index 9e64f260d49fd9da53e39468223900565053e625..d2fe89c0e6a286f58c7ae9f5c98fa76cd9c2780b 100644
(file)
--- a/
include/projections.h
+++ b/
include/projections.h
@@
-9,7
+9,7
@@
** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: projections.h,v 1.
29 2001/03/10 23:56:58
kevin Exp $
+** $Id: projections.h,v 1.
35 2001/03/21 21:45:31
kevin Exp $
**
**
** This program is free software; you can redistribute it and/or modify
**
**
** This program is free software; you can redistribute it and/or modify
@@
-45,25
+45,27
@@
class ParallelRaysumCoordinate {
public:
double m_dT; // Distance from center of origin
double m_dTheta; // perpendicular angle to origin
public:
double m_dT; // Distance from center of origin
double m_dTheta; // perpendicular angle to origin
- int m_iViewNum; // View number for this raysum
- int m_iDetNum; // Detector number for this raysum
+ double m_dRaysum;
- bool lessThanT (ParallelRaysumCoordinate& rCompare)
- {return m_dT < rCompare.m_dT; }
- bool lessThanTheta (ParallelRaysumCoordinate& rCompare)
- {return m_dTheta < rCompare.m_dTheta; }
+ static bool compareByTheta (ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b)
+ { return a->m_dTheta == b->m_dTheta ? b->m_dT > a->m_dT : b->m_dTheta > a->m_dTheta; }
- static compareByTheta(ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b)
- { return a->m_dTheta > b->m_dTheta; }
-
- static compareByT(ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b)
- { return a->m_dT > b->m_dT; }
+ // sort first by T, then Theta
+ static bool compareByT (ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b)
+ { return a->m_dT == b->m_dT ? b->m_dTheta > a->m_dTheta : b->m_dT > a->m_dT; }
};
class ParallelRaysums {
public:
};
class ParallelRaysums {
public:
- ParallelRaysums (Projections* pProjections);
+
+ enum {
+ THETA_RANGE_UNCONSTRAINED = 0,
+ THETA_RANGE_NORMALIZE_TO_TWOPI,
+ THETA_RANGE_FOLD_TO_PI,
+ };
+
+ ParallelRaysums (const Projections* pProjections, int iThetaRange);
~ParallelRaysums ();
typedef std::vector<ParallelRaysumCoordinate*> CoordinateContainer;
~ParallelRaysums ();
typedef std::vector<ParallelRaysumCoordinate*> CoordinateContainer;
@@
-74,12
+76,19
@@
public:
void getLimits (double* dMinT, double* dMaxT, double* dMinTheta, double* dMaxTheta) const;
CoordinateContainer& getSortedByT();
CoordinateContainer& getSortedByTheta();
void getLimits (double* dMinT, double* dMaxT, double* dMinTheta, double* dMaxTheta) const;
CoordinateContainer& getSortedByT();
CoordinateContainer& getSortedByTheta();
+ double interpolate (double* pdX, double* pdY, int n, double dXValue, int* iLastFloor = NULL);
+ void getThetaAndRaysumsForT (int iT, double* pdTheta, double* pdRaysum);
+ void getDetPositions (double* pdDetPos);
private:
CoordinateContainer m_vecpCoordinates;
CoordinateContainer m_vecpSortedByT;
CoordinateContainer m_vecpSortedByTheta;
private:
CoordinateContainer m_vecpCoordinates;
CoordinateContainer m_vecpSortedByT;
CoordinateContainer m_vecpSortedByTheta;
+ ParallelRaysumCoordinate* m_pCoordinates;
int m_iNumCoordinates;
int m_iNumCoordinates;
+ int m_iNumView;
+ int m_iNumDet;
+ int m_iThetaRange;
};
};
@@
-120,13
+129,15
@@
class Projections
bool detarrayRead (fnetorderstream& fs, DetectorArray& darray, const int view_num);
bool detarrayWrite (fnetorderstream& fs, const DetectorArray& darray, const int view_num);
bool detarrayRead (fnetorderstream& fs, DetectorArray& darray, const int view_num);
bool detarrayWrite (fnetorderstream& fs, const DetectorArray& darray, const int view_num);
-
bool interpolateToParallel()
;
+
Projections* interpolateToParallel() const
;
bool convertPolar (ImageFile& rIF, int iInterpolation);
bool convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad);
bool convertPolar (ImageFile& rIF, int iInterpolation);
bool convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad);
- bool calcArrayPolarCoordinates (unsigned int nx, unsigned int ny, double** ppdView, double** ppdDet);
+ void calcArrayPolarCoordinates (unsigned int nx, unsigned int ny, double** ppdView, double** ppdDet,
+ int iNumDetWithZeros, double dZeropadRatio, double dDetInc);
void interpolatePolar (ImageFileArray& v, ImageFileArray& vImag, unsigned int nx, unsigned int ny, std::complex<double>** ppcDetValue,
void interpolatePolar (ImageFileArray& v, ImageFileArray& vImag, unsigned int nx, unsigned int ny, std::complex<double>** ppcDetValue,
- double** ppdDet, double** ppdView, unsigned int nView, unsigned int nDet, int iInterpolate);
+ double** ppdDet, double** ppdView, unsigned int nView, unsigned int nDet, unsigned int nDetWithZeros,
+ int iInterpolate);
bool reconstruct (ImageFile& im, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* frequencyFilterName, const char* const interpName, int interp_param, const char* const backprojName, const int trace) const;
bool reconstruct (ImageFile& im, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* frequencyFilterName, const char* const interpName, int interp_param, const char* const backprojName, const int trace) const;
@@
-149,7
+160,7
@@
class Projections
int geometry() const {return m_geometry;}
double focalLength() const {return m_dFocalLength;}
double sourceDetectorLength() const { return m_dSourceDetectorLength;}
int geometry() const {return m_geometry;}
double focalLength() const {return m_dFocalLength;}
double sourceDetectorLength() const { return m_dSourceDetectorLength;}
-
+ double viewDiameter() const {return m_dViewDiameter; }
double phmLen() const { return m_dViewDiameter / SQRT2; }
void setPhmLen(double phmLen) { m_dViewDiameter = phmLen * SQRT2; }
double phmLen() const { return m_dViewDiameter / SQRT2; }
void setPhmLen(double phmLen) { m_dViewDiameter = phmLen * SQRT2; }