diff options
Diffstat (limited to 'cuda/3d/cgls3d.cu')
-rw-r--r-- | cuda/3d/cgls3d.cu | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/cuda/3d/cgls3d.cu b/cuda/3d/cgls3d.cu index 10c5f1e..4829574 100644 --- a/cuda/3d/cgls3d.cu +++ b/cuda/3d/cgls3d.cu @@ -33,10 +33,6 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. #include <cstdio> #include <cassert> -#ifdef STANDALONE -#include "testutil.h" -#endif - namespace astraCUDA3d { CGLS::CGLS() : ReconAlgo3D() @@ -263,161 +259,3 @@ bool doCGLS(cudaPitchedPtr& D_volumeData, } } - -#ifdef STANDALONE - -using namespace astraCUDA3d; - -int main() -{ - SDimensions3D dims; - dims.iVolX = 256; - dims.iVolY = 256; - dims.iVolZ = 256; - dims.iProjAngles = 100; - dims.iProjU = 512; - dims.iProjV = 512; - dims.iRaysPerDet = 1; - - SConeProjection angle[100]; - angle[0].fSrcX = -2905.6; - angle[0].fSrcY = 0; - angle[0].fSrcZ = 0; - - angle[0].fDetSX = 694.4; - angle[0].fDetSY = -122.4704; - angle[0].fDetSZ = -122.4704; - - angle[0].fDetUX = 0; - angle[0].fDetUY = .4784; - //angle[0].fDetUY = .5; - angle[0].fDetUZ = 0; - - angle[0].fDetVX = 0; - angle[0].fDetVY = 0; - angle[0].fDetVZ = .4784; - -#define ROTATE0(name,i,alpha) do { angle[i].f##name##X = angle[0].f##name##X * cos(alpha) - angle[0].f##name##Y * sin(alpha); angle[i].f##name##Y = angle[0].f##name##X * sin(alpha) + angle[0].f##name##Y * cos(alpha); } while(0) - for (int i = 1; i < 100; ++i) { - angle[i] = angle[0]; - ROTATE0(Src, i, i*2*M_PI/100); - ROTATE0(DetS, i, i*2*M_PI/100); - ROTATE0(DetU, i, i*2*M_PI/100); - ROTATE0(DetV, i, i*2*M_PI/100); - } -#undef ROTATE0 - - - cudaPitchedPtr volData = allocateVolumeData(dims); - cudaPitchedPtr projData = allocateProjectionData(dims); - zeroProjectionData(projData, dims); - - float* pbuf = new float[100*512*512]; - copyProjectionsFromDevice(pbuf, projData, dims); - copyProjectionsToDevice(pbuf, projData, dims); - delete[] pbuf; - -#if 0 - float* slice = new float[256*256]; - cudaPitchedPtr ptr; - ptr.ptr = slice; - ptr.pitch = 256*sizeof(float); - ptr.xsize = 256*sizeof(float); - ptr.ysize = 256; - - for (unsigned int i = 0; i < 256; ++i) { - for (unsigned int y = 0; y < 256; ++y) - for (unsigned int x = 0; x < 256; ++x) - slice[y*256+x] = (i-127.5)*(i-127.5)+(y-127.5)*(y-127.5)+(x-127.5)*(x-127.5) < 4900 ? 1.0f : 0.0f; - - cudaExtent extentS; - extentS.width = dims.iVolX*sizeof(float); - extentS.height = dims.iVolY; - extentS.depth = 1; - cudaPos sp = { 0, 0, 0 }; - cudaPos dp = { 0, 0, i }; - cudaMemcpy3DParms p; - p.srcArray = 0; - p.srcPos = sp; - p.srcPtr = ptr; - p.dstArray = 0; - p.dstPos = dp; - p.dstPtr = volData; - p.extent = extentS; - p.kind = cudaMemcpyHostToDevice; - cudaMemcpy3D(&p); - } - astraCUDA3d::ConeFP(volData, projData, dims, angle, 1.0f); - -#else - - for (int i = 0; i < 100; ++i) { - char fname[32]; - sprintf(fname, "Tiffs/%04d.png", 4*i); - unsigned int w,h; - float* bufp = loadImage(fname, w,h); - - for (int j = 0; j < 512*512; ++j) { - float v = bufp[j]; - if (v > 236.0f) v = 236.0f; - v = logf(236.0f / v); - bufp[j] = 256*v; - } - - for (int j = 0; j < 512; ++j) { - cudaMemcpy(((float*)projData.ptr)+100*512*j+512*i, bufp+512*j, 512*sizeof(float), cudaMemcpyHostToDevice); - } - - delete[] bufp; - - } -#endif - -#if 0 - float* bufs = new float[100*512]; - - for (int i = 0; i < 512; ++i) { - cudaMemcpy(bufs, ((float*)projData.ptr)+100*512*i, 100*512*sizeof(float), cudaMemcpyDeviceToHost); - - printf("%d %d %d\n", projData.pitch, projData.xsize, projData.ysize); - - char fname[20]; - sprintf(fname, "sino%03d.png", i); - saveImage(fname, 100, 512, bufs); - } - - float* bufp = new float[512*512]; - - for (int i = 0; i < 100; ++i) { - for (int j = 0; j < 512; ++j) { - cudaMemcpy(bufp+512*j, ((float*)projData.ptr)+100*512*j+512*i, 512*sizeof(float), cudaMemcpyDeviceToHost); - } - - char fname[20]; - sprintf(fname, "proj%03d.png", i); - saveImage(fname, 512, 512, bufp); - } -#endif - - zeroVolumeData(volData, dims); - - cudaPitchedPtr maskData; - maskData.ptr = 0; - - astraCUDA3d::doCGLS(volData, projData, maskData, dims, angle, 50); -#if 1 - float* buf = new float[256*256]; - - for (int i = 0; i < 256; ++i) { - cudaMemcpy(buf, ((float*)volData.ptr)+256*256*i, 256*256*sizeof(float), cudaMemcpyDeviceToHost); - - char fname[20]; - sprintf(fname, "vol%03d.png", i); - saveImage(fname, 256, 256, buf); - } -#endif - - return 0; -} -#endif - |