X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=include%2Fprojections.h;h=39cb09a7a67446a3723a7cb06a6921bc6ddc68a7;hb=b361677a2f7d5b443641faec70b057f2a84dc77e;hp=787f325b34b7729328c04d90000da4c69ebe033e;hpb=9776c9a12ba53419d34563a5ec57c90e3d6798f4;p=ctsim.git diff --git a/include/projections.h b/include/projections.h index 787f325..39cb09a 100644 --- 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 ** -** $Id: projections.h,v 1.25 2001/02/22 18:22:40 kevin Exp $ +** $Id: projections.h,v 1.28 2001/03/10 23:14:15 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -38,6 +38,36 @@ class fnetorderstream; #include "imagefile.h" #include +//used for rebinning divergent beam projections to parallel +class ParallelRaysumCoordinate { +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 + + bool lessThanT (ParallelRaysumCoordinate& rCompare) + {return m_dT < rCompare.m_dT; } + bool lessThanTheta (ParallelRaysumCoordinate& rCompare) + {return m_dTheta < rCompare.m_dTheta; } +}; + +class ParallelRaysums { +private: + ParallelRaysumCoordinate** m_ppCoordinates; + int m_iNumCoordinates; + +public: + ParallelRaysums (Projections* pProjections); + ~ParallelRaysums (); + + ParallelRaysumCoordinate** getCoordinates() {return m_ppCoordinates;} + int getNumCoordinates() const {return m_iNumCoordinates;} + void getLimits (double* dMinT, double* dMaxT, double* dMinTheta, double* dMaxTheta) const; +}; + + + // Projections class Projections { @@ -61,6 +91,7 @@ class Projections static const char* convertInterpIDToTitle (const int interpID); void initFromScanner (const Scanner& scanner); + bool initFromSomatomAR_STAR (int iNViews, int iNDets, unsigned char* pData, unsigned long lDataLength); void printProjectionData (int startView, int endView); void printProjectionData (); @@ -73,6 +104,8 @@ class Projections bool detarrayRead (fnetorderstream& fs, DetectorArray& darray, const int view_num); bool detarrayWrite (fnetorderstream& fs, const DetectorArray& darray, const int view_num); + bool interpolateToParallel(); + 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); @@ -99,6 +132,8 @@ class Projections int nView() const {return m_nView;} int geometry() const {return m_geometry;} double focalLength() const {return m_dFocalLength;} + double sourceDetectorLength() const { return m_dSourceDetectorLength;} + double phmLen() const { return m_dViewDiameter / SQRT2; } void setPhmLen(double phmLen) { m_dViewDiameter = phmLen * SQRT2; } @@ -131,6 +166,7 @@ class Projections double m_detStart; // distance of beginning detector to center phantom double m_detInc; // increment between detectors double m_dFocalLength; + double m_dSourceDetectorLength; double m_dViewDiameter; double m_dFanBeamAngle; kuint32 m_year; // Creation date & time