r11223: Oct 15, 2006 Version 4.5.0
authorKevin M. Rosenberg <kevin@rosenberg.net>
Mon, 16 Oct 2006 17:05:49 +0000 (17:05 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Mon, 16 Oct 2006 17:05:49 +0000 (17:05 +0000)
        * libctsim/backprojectors.cpp: Fix for iteration bug in backprojection
        and simply computing rotScale -- thanks to Dan Martin.

ChangeLog
configure.ac
debian/changelog
libctsim/backprojectors.cpp

index 10e239727e5a39a68208901a31085a1427f7b2dd..a376cb0f9da31d3437f3cb7dc29e8a2988609960 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Oct 15, 2006  Version 4.5.0
+       * libctsim/backprojectors.cpp: Fix for iteration bug in backprojection
+       and simply computing rotScale -- thanks to Dan Martin.
+
 Mar 16, 2006  Version 4.4.4
        * Changes for g++ 4.1 support
 
index bf2fba62d3ab541afe6e0d5e7eca529ceb0cead5..4de3646c4e139b615a10e76a1510212dfc52e2d5 100644 (file)
@@ -6,7 +6,7 @@ dnl CDPATH=
 AC_INIT
 AC_CONFIG_SRCDIR([src/ctsim.cpp])
 AM_MAINTAINER_MODE
-AM_INIT_AUTOMAKE(ctsim,4.3.4)
+AM_INIT_AUTOMAKE(ctsim,4.5.0x)
 AM_CONFIG_HEADER(config.h)
 
 dnl Checks for programs.
index 314c416acc03f4118b9ef1ed4c93a0cb0df372fb..a345842e7531e383b567277e7715c7d4b1abec67 100644 (file)
@@ -1,3 +1,9 @@
+ctsim (4.5.0-1) unstable; urgency=low
+
+  * New upstream
+
+ -- Kevin M. Rosenberg <kmr@debian.org>  Mon, 16 Oct 2006 10:57:24 -0600
+
 ctsim (4.4.5-1) unstable; urgency=low
 
   * Update automake files from upstream
index ef1ef12e655738f3b1e1b06bd13fbba148f38b28..2d0d60cc718263746866659b727ba5ed7b28feeb 100644 (file)
@@ -270,12 +270,11 @@ Backproject::Backproject (const Projections& proj, ImageFile& im, int interpType
   detInc = proj.detInc();
   nDet = proj.nDet();
   iDetCenter = (nDet - 1) / 2; // index refering to L=0 projection 
-  rotScale = proj.rotInc();
   
   if (proj.geometry() == Scanner::GEOMETRY_PARALLEL)
-    rotScale /= (proj.nView() * proj.rotInc() / PI); // scale by number of PI rotations
+    rotScale = PI / proj.nView(); // scale by number of PI rotations
   else if (proj.geometry() == Scanner::GEOMETRY_EQUIANGULAR || proj.geometry() == Scanner::GEOMETRY_EQUILINEAR)
-    rotScale /= (proj.nView() * proj.rotInc() / (2 * PI)); // scale by number of 2PI rotations
+    rotScale =  (2 * PI) / proj.nView(); // scale by number of 2PI rotations
   else
     sys_error (ERR_SEVERE, "Invalid geometry type %d [Backproject::Backproject]", proj.geometry());
   
@@ -621,12 +620,17 @@ BackprojectIntDiff::BackprojectView (const double* const filteredProj, const dou
         const int iDetPos = (curDetPos + halfScale) >> scaleShift;
         if (iDetPos >= 0 && iDetPos <= iLastDet)
           *pImCol++ += filteredProj[iDetPos];
+        else
+          pImCol++;
+
       }        // end for iy
     } else if (interpType == Backprojector::INTERP_FREQ_PREINTERPOLATION) {
       for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) {
         const int iDetPos = ((curDetPos + halfScale) >> scaleShift) * m_interpFactor;
         if (iDetPos >= 0 && iDetPos <= iLastDet)
           *pImCol++ += filteredProj[iDetPos];
+        else
+          pImCol++;
       }        // end for iy
     } else if (interpType == Backprojector::INTERP_LINEAR) {
       for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) {
@@ -634,7 +638,8 @@ BackprojectIntDiff::BackprojectView (const double* const filteredProj, const dou
         if (iDetPos >= 0 && iDetPos <= iLastDet) {
          const long detRemainder = curDetPos & scaleBitmask;
          *pImCol++ += filteredProj[iDetPos] + (detRemainder * deltaFilteredProj[iDetPos]);
-       }
+       } else
+          pImCol++;
       }        // end for iy
     } else if (interpType == Backprojector::INTERP_CUBIC) {
       for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) {