** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: backprojectors.cpp,v 1.16 2000/12/04 19:50:57 kevin Exp $
+** $Id: backprojectors.cpp,v 1.21 2001/01/01 10:14:34 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
{
{"Nearest"},
{"Linear"},
- {"Frequency Preinterpolationj"},
+ {"Frequency Preinterpolation"},
#if HAVE_BSPLINE_INTERP
{"B-Spline"},
{"B-Spline 1st Order"},
nDet = proj.nDet();
iDetCenter = (nDet - 1) / 2; // index refering to L=0 projection
rotScale = proj.rotInc();
- rotScale /= (proj.nView() * proj.rotInc() / PI); // scale by number of PI rotations
+
+ if (proj.geometry() == Scanner::GEOMETRY_PARALLEL)\r
+ rotScale /= (proj.nView() * proj.rotInc() / PI); // scale by number of PI rotations\r
+ else if (proj.geometry() == Scanner::GEOMETRY_EQUIANGULAR || proj.geometry() == Scanner::GEOMETRY_EQUILINEAR)\r
+ rotScale /= (proj.nView() * proj.rotInc() / (2 * PI)); // scale by number of 2PI rotations\r
+ else\r
+ sys_error (ERR_SEVERE, "Invalid geometry type %d [Backproject::Backproject]", proj.geometry());\r
v = im.getArray();
nx = im.nx();
}
void Backproject::errorIndexOutsideDetector (int ix, int iy, double theta, double L, int iDetPos)
-{
- ostringstream os;
+{\r
+#if 1
+ std::ostringstream os;
os << "ix=" << ix << ", iy=" << iy << ", theta=" << theta << ", L=" << L << ", detinc=" << detInc << "\n";
os << "ndet=" << nDet << ", detInc=" << detInc << ", iDetCenter=" << iDetCenter << "\n";
os << "xMin=" << xMin << ", xMax=" << xMax << ", xInc=" << xInc << "\n";
os << "yMin=" << yMin << ", yMax=" << yMax << ", yInc=" << yInc << "\n";
os << "iDetPos index outside bounds: " << iDetPos << " [backprojector]";;
- sys_error (ERR_WARNING, os.str().c_str());
+ sys_error (ERR_WARNING, os.str().c_str());\r
+#endif
}
// Precalculates trigometric function value for each point in image for backprojection.
BackprojectTable::BackprojectTable (const Projections& proj, ImageFile& im, int interpType, const int interpFactor)
- : Backproject::Backproject (proj, im, interpType, interpFactor)
+ : Backproject (proj, im, interpType, interpFactor)
{
arrayR.initSetSize (im.nx(), im.ny());
arrayPhi.initSetSize (im.nx(), im.ny());
// Iterates in x & y direction by adding difference in L position
BackprojectDiff::BackprojectDiff (const Projections& proj, ImageFile& im, int interpType, const int interpFactor)
- : Backproject::Backproject (proj, im, interpType, interpFactor)
+ : Backproject (proj, im, interpType, interpFactor)
{
// calculate center of first pixel v[0][0]
double x = xMin + xInc / 2;