** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: backprojectors.h,v 1.15 2000/09/02 05:10:39 kevin Exp $
+** $Id: backprojectors.h,v 1.16 2000/12/03 15:16:17 kevin Exp $
**
** 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
kint32 nx;
kint32 ny;
double detInc;
- double rotInc;
+ double rotScale;
int iDetCenter; // index refering to L=0 projection
int nDet;
double xMin, xMax, yMin, yMax; // Retangular coords of phantom
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: backprojectors.cpp,v 1.14 2000/09/02 05:10:39 kevin Exp $
+** $Id: backprojectors.cpp,v 1.15 2000/12/03 15:16:18 kevin Exp $
**
** 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
detInc = proj.detInc();
nDet = proj.nDet();
iDetCenter = (nDet - 1) / 2; // index refering to L=0 projection
- rotInc = proj.rotInc();
+ rotScale = proj.rotInc();
+ rotScale /= (proj.nView() * proj.rotInc() / PI); // scale by number of PI rotations
v = im.getArray();
nx = im.nx();
{
for (int ix = 0; ix < nx; ix++)
for (int iy = 0; iy < ny; iy++)
- v[ix][iy] *= rotInc;
+ v[ix][iy] *= rotScale;
}
void Backproject::errorIndexOutsideDetector (int ix, int iy, double theta, double r, double phi, double L, int iDetPos)
if (iDetPos < 0 || iDetPos >= nDet) // check for impossible: index outside of raysum pos
errorIndexOutsideDetector (ix, iy, theta, r, phi, L, iDetPos);
else
- v[ix][iy] += rotInc * filteredProj[iDetPos];
+ v[ix][iy] += rotScale * filteredProj[iDetPos];
} else if (interpType == Backprojector::INTERP_LINEAR) {
double p = L / detInc; // position along detector
double pFloor = floor (p);
if (iDetPos < 0 || iDetPos >= nDet - 1) // check for impossible: index outside of raysum pos
errorIndexOutsideDetector (ix, iy, theta, r, phi, L, iDetPos);
else
- v[ix][iy] += rotInc * ((1-frac) * filteredProj[iDetPos] + frac * filteredProj[iDetPos+1]);
+ v[ix][iy] += rotScale * ((1-frac) * filteredProj[iDetPos] + frac * filteredProj[iDetPos+1]);
}
}
}
double detPosColStart = start_r * cos (theta - start_phi) / detInc;
#ifdef DEBUG
- printf ("start_r=%8.5f, start_phi=%8.5f, rotInc=%8.5f\n", start_r, start_phi, rotInc);
+ printf ("start_r=%8.5f, start_phi=%8.5f, rotScale=%8.5f\n", start_r, start_phi, rotScale);
#endif
for (int ix = 0; ix < nx; ix++, detPosColStart += det_dx) {
double curDetPos = detPosColStart;