diff options
Diffstat (limited to 'cuda/2d')
-rw-r--r-- | cuda/2d/algo.cu | 18 | ||||
-rw-r--r-- | cuda/2d/algo.h | 173 | ||||
-rw-r--r-- | cuda/2d/arith.cu | 5 | ||||
-rw-r--r-- | cuda/2d/arith.h | 85 | ||||
-rw-r--r-- | cuda/2d/astra.cu | 42 | ||||
-rw-r--r-- | cuda/2d/astra.h | 127 | ||||
-rw-r--r-- | cuda/2d/cgls.cu | 12 | ||||
-rw-r--r-- | cuda/2d/cgls.h | 90 | ||||
-rw-r--r-- | cuda/2d/darthelper.cu | 5 | ||||
-rw-r--r-- | cuda/2d/darthelper.h | 41 | ||||
-rw-r--r-- | cuda/2d/dims.h | 68 | ||||
-rw-r--r-- | cuda/2d/em.cu | 12 | ||||
-rw-r--r-- | cuda/2d/em.h | 75 | ||||
-rw-r--r-- | cuda/2d/fan_bp.cu | 12 | ||||
-rw-r--r-- | cuda/2d/fan_bp.h | 52 | ||||
-rw-r--r-- | cuda/2d/fan_fp.cu | 14 | ||||
-rw-r--r-- | cuda/2d/fan_fp.h | 40 | ||||
-rw-r--r-- | cuda/2d/fbp.cu | 12 | ||||
-rw-r--r-- | cuda/2d/fbp.h | 97 | ||||
-rw-r--r-- | cuda/2d/fbp_filters.h | 61 | ||||
-rw-r--r-- | cuda/2d/fft.cu | 14 | ||||
-rw-r--r-- | cuda/2d/fft.h | 72 | ||||
-rw-r--r-- | cuda/2d/par_bp.cu | 12 | ||||
-rw-r--r-- | cuda/2d/par_bp.h | 47 | ||||
-rw-r--r-- | cuda/2d/par_fp.cu | 17 | ||||
-rw-r--r-- | cuda/2d/par_fp.h | 40 | ||||
-rw-r--r-- | cuda/2d/sart.cu | 16 | ||||
-rw-r--r-- | cuda/2d/sart.h | 87 | ||||
-rw-r--r-- | cuda/2d/sirt.cu | 12 | ||||
-rw-r--r-- | cuda/2d/sirt.h | 96 | ||||
-rw-r--r-- | cuda/2d/util.cu | 7 | ||||
-rw-r--r-- | cuda/2d/util.h | 84 |
32 files changed, 103 insertions, 1442 deletions
diff --git a/cuda/2d/algo.cu b/cuda/2d/algo.cu index 02790f0..f809c23 100644 --- a/cuda/2d/algo.cu +++ b/cuda/2d/algo.cu @@ -25,16 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cassert> +#include "astra/cuda/2d/algo.h" +#include "astra/cuda/2d/par_fp.h" +#include "astra/cuda/2d/fan_fp.h" +#include "astra/cuda/2d/par_bp.h" +#include "astra/cuda/2d/fan_bp.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" +#include "astra/cuda/2d/astra.h" -#include "algo.h" -#include "par_fp.h" -#include "fan_fp.h" -#include "par_bp.h" -#include "fan_bp.h" -#include "util.h" -#include "arith.h" -#include "astra.h" +#include <cassert> namespace astraCUDA { diff --git a/cuda/2d/algo.h b/cuda/2d/algo.h deleted file mode 100644 index 2ce929c..0000000 --- a/cuda/2d/algo.h +++ /dev/null @@ -1,173 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ALGO_H -#define _CUDA_ALGO_H - -#include "astra/Globals.h" -#include "dims.h" - -namespace astra { - -class CParallelProjectionGeometry2D; -class CParallelVecProjectionGeometry2D; -class CFanFlatProjectionGeometry2D; -class CFanFlatVecProjectionGeometry2D; -class CVolumeGeometry2D; -class CProjectionGeometry2D; - -} - -namespace astraCUDA { - -class _AstraExport ReconAlgo { -public: - ReconAlgo(); - virtual ~ReconAlgo(); - - bool setGPUIndex(int iGPUIndex); - - bool setGeometry(const astra::CVolumeGeometry2D* pVolGeom, - const astra::CProjectionGeometry2D* pProjGeom); - - bool setSuperSampling(int raysPerDet, int raysPerPixelDim); - - void signalAbort() { shouldAbort = true; } - - virtual bool enableVolumeMask(); - virtual bool enableSinogramMask(); - - // init should be called after setting all geometry - virtual bool init() = 0; - - // setVolumeMask should be called after init and before iterate, - // but only if enableVolumeMask was called before init. - // It may be called again after iterate. - bool setVolumeMask(float* D_maskData, unsigned int maskPitch); - - // setSinogramMask should be called after init and before iterate, - // but only if enableSinogramMask was called before init. - // It may be called again after iterate. - bool setSinogramMask(float* D_smaskData, unsigned int smaskPitch); - - - // setBuffers should be called after init and before iterate. - // It may be called again after iterate. - virtual bool setBuffers(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch); - - - // instead of calling setBuffers, you can also call allocateBuffers - // to let ReconAlgo manage its own GPU memory - virtual bool allocateBuffers(); - - // copy data to GPU. This must be called after allocateBuffers. - // pfSinogram, pfReconstruction, pfVolMask, pfSinoMask are the - // sinogram, reconstruction, volume mask and sinogram mask in system RAM, - // respectively. The corresponding pitch variables give the pitches - // of these buffers, measured in floats. - // The sinogram is multiplied by fSinogramScale after uploading it. - virtual bool copyDataToGPU(const float* pfSinogram, unsigned int iSinogramPitch, float fSinogramScale, - const float* pfReconstruction, unsigned int iReconstructionPitch, - const float* pfVolMask, unsigned int iVolMaskPitch, - const float* pfSinoMask, unsigned int iSinoMaskPitch); - - - - // set Min/Max constraints. They may be called at any time, and will affect - // any iterate() calls afterwards. - virtual bool setMinConstraint(float fMin); - virtual bool setMaxConstraint(float fMax); - - - // iterate should be called after init and setBuffers. - // It may be called multiple times. - virtual bool iterate(unsigned int iterations) = 0; - - // Compute the norm of the difference of the FP of the current - // reconstruction and the sinogram. (This performs one FP.) - // It can be called after iterate. - virtual float computeDiffNorm() = 0; - // TODO: computeDiffNorm shouldn't be virtual, but for it to be - // implemented in ReconAlgo, it needs a way to get a suitable - // temporary sinogram buffer. - - bool getReconstruction(float* pfReconstruction, - unsigned int iReconstructionPitch) const; - - - -protected: - void reset(); - - bool callFP(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - float outputScale); - bool callBP(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - float outputScale); - - - SDimensions dims; - SParProjection* parProjs; - SFanProjection* fanProjs; - float fOutputScale; - - volatile bool shouldAbort; - - bool freeGPUMemory; - - // Input/output - float* D_sinoData; - unsigned int sinoPitch; - - float* D_volumeData; - unsigned int volumePitch; - - // Masks - bool useVolumeMask; - bool useSinogramMask; - - float* D_maskData; - unsigned int maskPitch; - float* D_smaskData; - unsigned int smaskPitch; - - // Min/max - bool useMinConstraint; - bool useMaxConstraint; - float fMinConstraint; - float fMaxConstraint; - - -}; - - -} - -#endif - diff --git a/cuda/2d/arith.cu b/cuda/2d/arith.cu index 0ff4aa0..62eb8c2 100644 --- a/cuda/2d/arith.cu +++ b/cuda/2d/arith.cu @@ -25,8 +25,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" + #include <cassert> namespace astraCUDA { diff --git a/cuda/2d/arith.h b/cuda/2d/arith.h deleted file mode 100644 index e18bb1b..0000000 --- a/cuda/2d/arith.h +++ /dev/null @@ -1,85 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ARITH_H -#define _CUDA_ARITH_H - -#include <cuda.h> - -namespace astraCUDA { - - -struct opAddScaled; -struct opScaleAndAdd; -struct opAddMulScaled; -struct opAddMul; -struct opAdd; -struct opAdd2; -struct opMul; -struct opDiv; -struct opMul2; -struct opDividedBy; -struct opInvert; -struct opSet; -struct opClampMin; -struct opClampMax; -struct opClampMinMask; -struct opClampMaxMask; -struct opSegmentAndMask; -struct opSetMaskedValues; - -struct opMulMask; - - -template<typename op> void processVolCopy(float* out, const SDimensions& dims); -template<typename op> void processVolCopy(float* out, float param, const SDimensions& dims); -template<typename op> void processVolCopy(float* out1, float* out2, float param1, float param2, const SDimensions& dims); -template<typename op> void processVolCopy(float* out, const float* in, const SDimensions& dims); -template<typename op> void processVolCopy(float* out, const float* in, float param, const SDimensions& dims); -template<typename op> void processVolCopy(float* out, const float* in1, const float* in2, const SDimensions& dims); -template<typename op> void processVolCopy(float* out, const float* in1, const float* in2, float param, const SDimensions& dims); - -template<typename op> void processVol(float* out, unsigned int pitch, const SDimensions& dims); -template<typename op> void processVol(float* out, float fParam, unsigned int pitch, const SDimensions& dims); -template<typename op> void processVol(float* out1, float* out2, float fParam1, float fParam2, unsigned int pitch, const SDimensions& dims); -template<typename op> void processVol(float* out, const float* in, unsigned int pitch, const SDimensions& dims); -template<typename op> void processVol(float* out, const float* in, float fParam, unsigned int pitch, const SDimensions& dims); -template<typename op> void processVol(float* out, const float* in1, const float* in2, float fParam, unsigned int pitch, const SDimensions& dims); -template<typename op> void processVol(float* out, const float* in1, const float* in2, unsigned int pitch, const SDimensions& dims); - -template<typename op> void processSino(float* out, unsigned int pitch, const SDimensions& dims); -template<typename op> void processSino(float* out, float fParam, unsigned int pitch, const SDimensions& dims); -template<typename op> void processSino(float* out1, float* out2, float fParam1, float fParam2, unsigned int pitch, const SDimensions& dims); -template<typename op> void processSino(float* out, const float* in, unsigned int pitch, const SDimensions& dims); -template<typename op> void processSino(float* out, const float* in, float fParam, unsigned int pitch, const SDimensions& dims); -template<typename op> void processSino(float* out, const float* in1, const float* in2, float fParam, unsigned int pitch, const SDimensions& dims); -template<typename op> void processSino(float* out, const float* in1, const float* in2, unsigned int pitch, const SDimensions& dims); - - -} - -#endif diff --git a/cuda/2d/astra.cu b/cuda/2d/astra.cu index 2ee469c..ec03517 100644 --- a/cuda/2d/astra.cu +++ b/cuda/2d/astra.cu @@ -25,33 +25,31 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/par_fp.h" +#include "astra/cuda/2d/fan_fp.h" +#include "astra/cuda/2d/par_bp.h" +#include "astra/cuda/2d/fan_bp.h" +#include "astra/cuda/2d/arith.h" +#include "astra/cuda/2d/astra.h" +#include "astra/cuda/2d/fft.h" -#include "util.h" -#include "par_fp.h" -#include "fan_fp.h" -#include "par_bp.h" -#include "fan_bp.h" -#include "arith.h" -#include "astra.h" +// For fan beam FBP weighting +#include "astra/cuda/3d/fdk.h" -#include "fft.h" +#include "astra/GeometryUtil2D.h" +#include "astra/VolumeGeometry2D.h" +#include "astra/ParallelProjectionGeometry2D.h" +#include "astra/ParallelVecProjectionGeometry2D.h" +#include "astra/FanFlatProjectionGeometry2D.h" +#include "astra/FanFlatVecProjectionGeometry2D.h" +#include "astra/Logging.h" +#include <cstdio> +#include <cassert> #include <fstream> -#include <cuda.h> - -#include "../../include/astra/GeometryUtil2D.h" -#include "../../include/astra/VolumeGeometry2D.h" -#include "../../include/astra/ParallelProjectionGeometry2D.h" -#include "../../include/astra/ParallelVecProjectionGeometry2D.h" -#include "../../include/astra/FanFlatProjectionGeometry2D.h" -#include "../../include/astra/FanFlatVecProjectionGeometry2D.h" - -#include "../../include/astra/Logging.h" -// For fan beam FBP weighting -#include "../3d/fdk.h" +#include <cuda.h> using namespace astraCUDA; using namespace std; diff --git a/cuda/2d/astra.h b/cuda/2d/astra.h deleted file mode 100644 index 6f0e2f0..0000000 --- a/cuda/2d/astra.h +++ /dev/null @@ -1,127 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ASTRA_H -#define _CUDA_ASTRA_H - -#include "fbp_filters.h" -#include "dims.h" -#include "algo.h" - -using astraCUDA::SFanProjection; - -namespace astra { - -enum Cuda2DProjectionKernel { - ker2d_default = 0 -}; - -class CParallelProjectionGeometry2D; -class CParallelVecProjectionGeometry2D; -class CFanFlatProjectionGeometry2D; -class CFanFlatVecProjectionGeometry2D; -class CVolumeGeometry2D; -class CProjectionGeometry2D; - - -class _AstraExport BPalgo : public astraCUDA::ReconAlgo { -public: - BPalgo(); - ~BPalgo(); - - virtual bool init(); - - virtual bool iterate(unsigned int iterations); - - virtual float computeDiffNorm(); -}; - - - - -// TODO: Clean up this interface to FP - -// Do a single forward projection -_AstraExport bool astraCudaFP(const float* pfVolume, float* pfSinogram, - unsigned int iVolWidth, unsigned int iVolHeight, - unsigned int iProjAngles, unsigned int iProjDets, - const SParProjection *pAngles, - unsigned int iDetSuperSampling = 1, - float fOutputScale = 1.0f, int iGPUIndex = 0); - -_AstraExport bool astraCudaFanFP(const float* pfVolume, float* pfSinogram, - unsigned int iVolWidth, unsigned int iVolHeight, - unsigned int iProjAngles, unsigned int iProjDets, - const SFanProjection *pAngles, - unsigned int iDetSuperSampling = 1, - float fOutputScale = 1.0f, int iGPUIndex = 0); - - -_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom, - const CParallelProjectionGeometry2D* pProjGeom, - astraCUDA::SParProjection*& pProjs, - float& fOutputScale); - -_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom, - const CParallelVecProjectionGeometry2D* pProjGeom, - astraCUDA::SParProjection*& pProjs, - float& fOutputScale); - - -_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom, - const CFanFlatProjectionGeometry2D* pProjGeom, - astraCUDA::SFanProjection*& pProjs, - float& outputScale); - -_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom, - const CFanFlatVecProjectionGeometry2D* pProjGeom, - astraCUDA::SFanProjection*& pProjs, - float& outputScale); - -_AstraExport bool convertAstraGeometry_dims(const CVolumeGeometry2D* pVolGeom, - const CProjectionGeometry2D* pProjGeom, - astraCUDA::SDimensions& dims); - -_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom, - const CProjectionGeometry2D* pProjGeom, - astraCUDA::SParProjection*& pParProjs, - astraCUDA::SFanProjection*& pFanProjs, - float& outputScale); -} - -namespace astraCUDA { - -// Return string with CUDA device number, name and memory size. -// Use device == -1 to get info for the current device. -_AstraExport std::string getCudaDeviceString(int device); - -_AstraExport bool setGPUIndex(int index); - -_AstraExport size_t availableGPUMemory(); - -} -#endif diff --git a/cuda/2d/cgls.cu b/cuda/2d/cgls.cu index f9fd6c1..696a0c1 100644 --- a/cuda/2d/cgls.cu +++ b/cuda/2d/cgls.cu @@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> - -#include "cgls.h" -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/cgls.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif +#include <cstdio> +#include <cassert> + namespace astraCUDA { CGLS::CGLS() : ReconAlgo() diff --git a/cuda/2d/cgls.h b/cuda/2d/cgls.h deleted file mode 100644 index 375a425..0000000 --- a/cuda/2d/cgls.h +++ /dev/null @@ -1,90 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_CGLS_H -#define _CUDA_CGLS_H - -#include "algo.h" - -namespace astraCUDA { - -class _AstraExport CGLS : public ReconAlgo { -public: - CGLS(); - virtual ~CGLS(); - - // disable some features - virtual bool enableSinogramMask() { return false; } - virtual bool setMinConstraint(float) { return false; } - virtual bool setMaxConstraint(float) { return false; } - - virtual bool init(); - - virtual bool setBuffers(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch); - - virtual bool copyDataToGPU(const float* pfSinogram, unsigned int iSinogramPitch, float fSinogramScale, - const float* pfReconstruction, unsigned int iReconstructionPitch, - const float* pfVolMask, unsigned int iVolMaskPitch, - const float* pfSinoMask, unsigned int iSinoMaskPitch); - - - virtual bool iterate(unsigned int iterations); - - virtual float computeDiffNorm(); - -protected: - void reset(); - - bool sliceInitialized; - - // Buffers - float* D_r; - unsigned int rPitch; - - float* D_w; - unsigned int wPitch; - - float* D_z; - unsigned int zPitch; - - float* D_p; - unsigned int pPitch; - - - float gamma; -}; - - -_AstraExport bool doCGLS(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const float* angles, - const float* TOffsets, unsigned int iterations); - -} - -#endif diff --git a/cuda/2d/darthelper.cu b/cuda/2d/darthelper.cu index 4041d79..b466840 100644 --- a/cuda/2d/darthelper.cu +++ b/cuda/2d/darthelper.cu @@ -25,8 +25,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include "util.h" -#include "darthelper.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/darthelper.h" + #include <cassert> namespace astraCUDA { diff --git a/cuda/2d/darthelper.h b/cuda/2d/darthelper.h deleted file mode 100644 index 3c2f83c..0000000 --- a/cuda/2d/darthelper.h +++ /dev/null @@ -1,41 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ARITH2_H -#define _CUDA_ARITH2_H - -#include "astra/Globals.h" - -namespace astraCUDA { - - void roiSelect(float* out, float radius, unsigned int width, unsigned int height); - void dartMask(float* out, const float* in, unsigned int conn, unsigned int radius, unsigned int threshold, unsigned int width, unsigned int height); - void dartSmoothing(float* out, const float* in, float b, unsigned int radius, unsigned int width, unsigned int height); - -} - -#endif diff --git a/cuda/2d/dims.h b/cuda/2d/dims.h deleted file mode 100644 index 0bdefa9..0000000 --- a/cuda/2d/dims.h +++ /dev/null @@ -1,68 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_DIMS_H -#define _CUDA_DIMS_H - -#include "astra/GeometryUtil2D.h" - - -namespace astraCUDA { - -using astra::SParProjection; -using astra::SFanProjection; - - - -struct SDimensions { - // Width, height of reconstruction volume - unsigned int iVolWidth; - unsigned int iVolHeight; - - // Number of projection angles - unsigned int iProjAngles; - - // Number of detector pixels - unsigned int iProjDets; - - // in FP, number of rays to trace per detector pixel. - // This should usually be set to 1. - // If fDetScale > 1, this should be set to an integer of roughly - // the same size as fDetScale. - unsigned int iRaysPerDet; - - // in BP, square root of number of rays to trace per volume pixel - // This should usually be set to 1. - // If fDetScale < 1, this should be set to an integer of roughly - // the same size as 1 / fDetScale. - unsigned int iRaysPerPixelDim; -}; - -} - -#endif - diff --git a/cuda/2d/em.cu b/cuda/2d/em.cu index cf67f9b..ca09d31 100644 --- a/cuda/2d/em.cu +++ b/cuda/2d/em.cu @@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> - -#include "em.h" -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/em.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif +#include <cstdio> +#include <cassert> + namespace astraCUDA { diff --git a/cuda/2d/em.h b/cuda/2d/em.h deleted file mode 100644 index 3ffe01b..0000000 --- a/cuda/2d/em.h +++ /dev/null @@ -1,75 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_EM_H -#define _CUDA_EM_H - -#include "algo.h" - -namespace astraCUDA { - -class _AstraExport EM : public ReconAlgo { -public: - EM(); - virtual ~EM(); - - // disable some features - virtual bool enableSinogramMask() { return false; } - virtual bool enableVolumeMask() { return false; } - virtual bool setMinConstraint(float) { return false; } - virtual bool setMaxConstraint(float) { return false; } - - virtual bool init(); - - virtual bool iterate(unsigned int iterations); - - virtual float computeDiffNorm(); - -protected: - void reset(); - bool precomputeWeights(); - - // Temporary buffers - float* D_projData; - unsigned int projPitch; - - float* D_tmpData; - unsigned int tmpPitch; - - // Geometry-specific precomputed data - float* D_pixelWeight; - unsigned int pixelPitch; -}; - -_AstraExport bool doEM(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const float* angles, - const float* TOffsets, unsigned int iterations); - -} - -#endif diff --git a/cuda/2d/fan_bp.cu b/cuda/2d/fan_bp.cu index 793b5f4..dac3ac2 100644 --- a/cuda/2d/fan_bp.cu +++ b/cuda/2d/fan_bp.cu @@ -25,18 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> -#include <iostream> - -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif -#define PIXELTRACE +#include <cstdio> +#include <cassert> +#include <iostream> typedef texture<float, 2, cudaReadModeElementType> texture2D; diff --git a/cuda/2d/fan_bp.h b/cuda/2d/fan_bp.h deleted file mode 100644 index 22349b0..0000000 --- a/cuda/2d/fan_bp.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_FAN_BP_H -#define _CUDA_FAN_BP_H - -namespace astraCUDA { - -_AstraExport bool FanBP(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const SFanProjection* angles, - float fOutputScale); - -_AstraExport bool FanBP_SART(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - unsigned int angle, - const SDimensions& dims, const SFanProjection* angles, - float fOutputScale); - -_AstraExport bool FanBP_FBPWeighted(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const SFanProjection* angles, - float fOutputScale); - - -} - -#endif diff --git a/cuda/2d/fan_fp.cu b/cuda/2d/fan_fp.cu index f08a681..3479650 100644 --- a/cuda/2d/fan_fp.cu +++ b/cuda/2d/fan_fp.cu @@ -25,18 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> -#include <iostream> -#include <list> - -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif +#include <cstdio> +#include <cassert> +#include <iostream> +#include <list> + typedef texture<float, 2, cudaReadModeElementType> texture2D; diff --git a/cuda/2d/fan_fp.h b/cuda/2d/fan_fp.h deleted file mode 100644 index 3e8f1e4..0000000 --- a/cuda/2d/fan_fp.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_FAN_FP_H -#define _CUDA_FAN_FP_H - -namespace astraCUDA { - -_AstraExport bool FanFP(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const SFanProjection* angles, - float outputScale); - -} - -#endif diff --git a/cuda/2d/fbp.cu b/cuda/2d/fbp.cu index ecaf544..48fb7dc 100644 --- a/cuda/2d/fbp.cu +++ b/cuda/2d/fbp.cu @@ -25,14 +25,14 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include "fbp.h" -#include "fft.h" -#include "par_bp.h" -#include "fan_bp.h" -#include "util.h" +#include "astra/cuda/2d/fbp.h" +#include "astra/cuda/2d/fft.h" +#include "astra/cuda/2d/par_bp.h" +#include "astra/cuda/2d/fan_bp.h" +#include "astra/cuda/2d/util.h" // For fan-beam preweighting -#include "../3d/fdk.h" +#include "astra/cuda/3d/fdk.h" #include "astra/Logging.h" diff --git a/cuda/2d/fbp.h b/cuda/2d/fbp.h deleted file mode 100644 index 8666646..0000000 --- a/cuda/2d/fbp.h +++ /dev/null @@ -1,97 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#include "algo.h" -#include "fbp_filters.h" - -namespace astraCUDA { - -class _AstraExport FBP : public ReconAlgo { -public: - FBP(); - ~FBP(); - - virtual bool useSinogramMask() { return false; } - virtual bool useVolumeMask() { return false; } - - // Returns the required size of a filter in the fourier domain - // when multiplying it with the fft of the projection data. - // Its value is equal to the smallest power of two larger than - // or equal to twice the number of detectors in the spatial domain. - // - // _iDetectorCount is the number of detectors in the spatial domain. - static int calcFourierFilterSize(int _iDetectorCount); - - // Sets the filter type. Some filter types require the user to supply an - // array containing the filter. - // The number of elements in a filter in the fourier domain should be equal - // to the value returned by calcFourierFilterSize(). - // The following types require a filter: - // - // - FILTER_PROJECTION: - // The filter size should be equal to the output of - // calcFourierFilterSize(). The filtered sinogram is - // multiplied with the supplied filter. - // - // - FILTER_SINOGRAM: - // Same as FILTER_PROJECTION, but now the filter should contain a row for - // every projection direction. - // - // - FILTER_RPROJECTION: - // The filter should now contain one kernel (= ifft of filter), with the - // peak in the center. The filter width - // can be any value. If odd, the peak is assumed to be in the center, if - // even, it is assumed to be at floor(filter-width/2). - // - // - FILTER_RSINOGRAM - // Same as FILTER_RPROJECTION, but now the supplied filter should contain a - // row for every projection direction. - // - // A large number of other filters (FILTER_RAMLAK, FILTER_SHEPPLOGAN, - // FILTER_COSINE, FILTER_HAMMING, and FILTER_HANN) - // have a D variable, which gives the cutoff point in the frequency domain. - // Setting this value to 1.0 will include the whole filter - bool setFilter(astra::E_FBPFILTER _eFilter, - const float * _pfHostFilter = NULL, - int _iFilterWidth = 0, float _fD = 1.0f, float _fFilterParameter = -1.0f); - - bool setShortScan(bool ss) { m_bShortScan = ss; return true; } - - virtual bool init(); - - virtual bool iterate(unsigned int iterations); - - virtual float computeDiffNorm() { return 0.0f; } // TODO - -protected: - void reset(); - - void* D_filter; // cufftComplex* - bool m_bShortScan; -}; - -} diff --git a/cuda/2d/fbp_filters.h b/cuda/2d/fbp_filters.h deleted file mode 100644 index 7c1121a..0000000 --- a/cuda/2d/fbp_filters.h +++ /dev/null @@ -1,61 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef FBP_FILTERS_H -#define FBP_FILTERS_H - -namespace astra { - -enum E_FBPFILTER -{ - FILTER_NONE, //< no filter (regular BP) - FILTER_RAMLAK, //< default FBP filter - FILTER_SHEPPLOGAN, //< Shepp-Logan - FILTER_COSINE, //< Cosine - FILTER_HAMMING, //< Hamming filter - FILTER_HANN, //< Hann filter - FILTER_TUKEY, //< Tukey filter - FILTER_LANCZOS, //< Lanczos filter - FILTER_TRIANGULAR, //< Triangular filter - FILTER_GAUSSIAN, //< Gaussian filter - FILTER_BARTLETTHANN, //< Bartlett-Hann filter - FILTER_BLACKMAN, //< Blackman filter - FILTER_NUTTALL, //< Nuttall filter, continuous first derivative - FILTER_BLACKMANHARRIS, //< Blackman-Harris filter - FILTER_BLACKMANNUTTALL, //< Blackman-Nuttall filter - FILTER_FLATTOP, //< Flat top filter - FILTER_KAISER, //< Kaiser filter - FILTER_PARZEN, //< Parzen filter - FILTER_PROJECTION, //< all projection directions share one filter - FILTER_SINOGRAM, //< every projection direction has its own filter - FILTER_RPROJECTION, //< projection filter in real space (as opposed to fourier space) - FILTER_RSINOGRAM, //< sinogram filter in real space -}; - -} - -#endif /* FBP_FILTERS_H */ diff --git a/cuda/2d/fft.cu b/cuda/2d/fft.cu index a1b1b93..bd8cab5 100644 --- a/cuda/2d/fft.cu +++ b/cuda/2d/fft.cu @@ -25,16 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include "fft.h" -#include "util.h" +#include "astra/cuda/2d/fft.h" +#include "astra/cuda/2d/util.h" + +#include "astra/Logging.h" +#include "astra/Fourier.h" -#include <cufft.h> #include <iostream> -#include <cuda.h> #include <fstream> -#include "../../include/astra/Logging.h" -#include "../../include/astra/Fourier.h" +#include <cufft.h> +#include <cuda.h> + using namespace astra; diff --git a/cuda/2d/fft.h b/cuda/2d/fft.h deleted file mode 100644 index d36cae2..0000000 --- a/cuda/2d/fft.h +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef FFT_H -#define FFT_H - -#include <cufft.h> -#include <cuda.h> - -#include "fbp_filters.h" - -namespace astraCUDA { - -bool allocateComplexOnDevice(int _iProjectionCount, - int _iDetectorCount, - cufftComplex ** _ppDevComplex); - -bool freeComplexOnDevice(cufftComplex * _pDevComplex); - -bool uploadComplexArrayToDevice(int _iProjectionCount, int _iDetectorCount, - cufftComplex * _pHostComplexSource, - cufftComplex * _pDevComplexTarget); - -bool runCudaFFT(int _iProjectionCount, const float * _pfDevRealSource, - int _iSourcePitch, int _iProjDets, - int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount, - cufftComplex * _pDevTargetComplex); - -bool runCudaIFFT(int _iProjectionCount, const cufftComplex* _pDevSourceComplex, - float * _pfRealTarget, - int _iTargetPitch, int _iProjDets, - int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount); - -void applyFilter(int _iProjectionCount, int _iFreqBinCount, - cufftComplex * _pSinogram, cufftComplex * _pFilter); - -int calcFFTFourierSize(int _iFFTRealSize); - -void genFilter(astra::E_FBPFILTER _eFilter, float _fD, int _iProjectionCount, - cufftComplex * _pFilter, int _iFFTRealDetectorCount, - int _iFFTFourierDetectorCount, float _fParameter = -1.0f); - -void genIdenFilter(int _iProjectionCount, cufftComplex * _pFilter, - int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount); - -} - -#endif /* FFT_H */ diff --git a/cuda/2d/par_bp.cu b/cuda/2d/par_bp.cu index a894f3f..09a6554 100644 --- a/cuda/2d/par_bp.cu +++ b/cuda/2d/par_bp.cu @@ -25,18 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> -#include <iostream> - -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif -#define PIXELTRACE +#include <cstdio> +#include <cassert> +#include <iostream> typedef texture<float, 2, cudaReadModeElementType> texture2D; diff --git a/cuda/2d/par_bp.h b/cuda/2d/par_bp.h deleted file mode 100644 index c8dfab8..0000000 --- a/cuda/2d/par_bp.h +++ /dev/null @@ -1,47 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_PAR_BP_H -#define _CUDA_PAR_BP_H - -#include "dims.h" - -namespace astraCUDA { - -_AstraExport bool BP(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const SParProjection* angles, - float fOutputScale); - -_AstraExport bool BP_SART(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - unsigned int angle, const SDimensions& dims, - const SParProjection* angles, float fOutputScale); - -} - -#endif diff --git a/cuda/2d/par_fp.cu b/cuda/2d/par_fp.cu index 427a4e8..0835301 100644 --- a/cuda/2d/par_fp.cu +++ b/cuda/2d/par_fp.cu @@ -25,21 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> -#include <iostream> -#include <list> -#include <cmath> - -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif -#define PIXELTRACE - +#include <cstdio> +#include <cassert> +#include <iostream> +#include <list> +#include <cmath> typedef texture<float, 2, cudaReadModeElementType> texture2D; diff --git a/cuda/2d/par_fp.h b/cuda/2d/par_fp.h deleted file mode 100644 index 62277a1..0000000 --- a/cuda/2d/par_fp.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_PAR_FP_H -#define _CUDA_PAR_FP_H - -namespace astraCUDA { - -_AstraExport bool FP(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - const SDimensions& dims, const SParProjection* angles, - float fOutputScale); - -} - -#endif diff --git a/cuda/2d/sart.cu b/cuda/2d/sart.cu index 8b6f50e..cf9babc 100644 --- a/cuda/2d/sart.cu +++ b/cuda/2d/sart.cu @@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/2d/sart.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" +#include "astra/cuda/2d/fan_fp.h" +#include "astra/cuda/2d/fan_bp.h" +#include "astra/cuda/2d/par_fp.h" +#include "astra/cuda/2d/par_bp.h" + #include <cstdio> #include <cassert> -#include "sart.h" -#include "util.h" -#include "arith.h" -#include "fan_fp.h" -#include "fan_bp.h" -#include "par_fp.h" -#include "par_bp.h" - namespace astraCUDA { // FIXME: Remove these functions. (Outdated) diff --git a/cuda/2d/sart.h b/cuda/2d/sart.h deleted file mode 100644 index 6c0e547..0000000 --- a/cuda/2d/sart.h +++ /dev/null @@ -1,87 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_SART_H -#define _CUDA_SART_H - -#include "algo.h" - -namespace astraCUDA { - -class _AstraExport SART : public ReconAlgo { -public: - SART(); - ~SART(); - - // disable some features - virtual bool enableSinogramMask() { return false; } - - virtual bool init(); - - virtual bool setProjectionOrder(int* projectionOrder, int projectionCount); - - virtual bool iterate(unsigned int iterations); - - virtual float computeDiffNorm(); - - void setRelaxation(float r) { fRelaxation = r; } - -protected: - void reset(); - bool precomputeWeights(); - - bool callFP_SART(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - unsigned int angle, float outputScale); - bool callBP_SART(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - unsigned int angle, float outputScale); - - - // projection angle variables - bool customOrder; - int* projectionOrder; - int projectionCount; - int iteration; - - // Temporary buffers - float* D_projData; - unsigned int projPitch; - - float* D_tmpData; // Only used when there's a volume mask - unsigned int tmpPitch; - - // Geometry-specific precomputed data - float* D_lineWeight; - unsigned int linePitch; - - float fRelaxation; -}; - -} - -#endif diff --git a/cuda/2d/sirt.cu b/cuda/2d/sirt.cu index faba7a7..7ec377c 100644 --- a/cuda/2d/sirt.cu +++ b/cuda/2d/sirt.cu @@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> - -#include "sirt.h" -#include "util.h" -#include "arith.h" +#include "astra/cuda/2d/sirt.h" +#include "astra/cuda/2d/util.h" +#include "astra/cuda/2d/arith.h" #ifdef STANDALONE #include "testutil.h" #endif +#include <cstdio> +#include <cassert> + namespace astraCUDA { SIRT::SIRT() : ReconAlgo() diff --git a/cuda/2d/sirt.h b/cuda/2d/sirt.h deleted file mode 100644 index 434a07c..0000000 --- a/cuda/2d/sirt.h +++ /dev/null @@ -1,96 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_SIRT_H -#define _CUDA_SIRT_H - -#include "algo.h" - -namespace astraCUDA { - -class _AstraExport SIRT : public ReconAlgo { -public: - SIRT(); - ~SIRT(); - - virtual bool init(); - - // Do optional long-object compensation. See the comments in sirt.cu. - // Call this after init(). It can not be used in combination with masks. - bool doSlabCorrections(); - - // Set min/max masks to existing GPU memory buffers - bool setMinMaxMasks(float* D_minMaskData, float* D_maxMaskData, - unsigned int pitch); - - // Set min/max masks from RAM buffers - bool uploadMinMaxMasks(const float* minMaskData, const float* maxMaskData, - unsigned int pitch); - - void setRelaxation(float r) { fRelaxation = r; } - - virtual bool iterate(unsigned int iterations); - - virtual float computeDiffNorm(); - -protected: - void reset(); - bool precomputeWeights(); - - // Temporary buffers - float* D_projData; - unsigned int projPitch; - - float* D_tmpData; - unsigned int tmpPitch; - - // Geometry-specific precomputed data - float* D_lineWeight; - unsigned int linePitch; - - float* D_pixelWeight; - unsigned int pixelPitch; - - // Masks - bool freeMinMaxMasks; - float* D_minMaskData; - unsigned int minMaskPitch; - float* D_maxMaskData; - unsigned int maxMaskPitch; - - float fRelaxation; -}; - -bool doSIRT(float* D_volumeData, unsigned int volumePitch, - float* D_projData, unsigned int projPitch, - float* D_maskData, unsigned int maskPitch, - const SDimensions& dims, const float* angles, - const float* TOffsets, unsigned int iterations); - -} - -#endif diff --git a/cuda/2d/util.cu b/cuda/2d/util.cu index dfc5de9..533b86c 100644 --- a/cuda/2d/util.cu +++ b/cuda/2d/util.cu @@ -25,11 +25,12 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/2d/util.h" + +#include "astra/Logging.h" + #include <cstdio> #include <cassert> -#include "util.h" - -#include "../../include/astra/Logging.h" namespace astraCUDA { diff --git a/cuda/2d/util.h b/cuda/2d/util.h deleted file mode 100644 index 70e7c86..0000000 --- a/cuda/2d/util.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_UTIL_H -#define _CUDA_UTIL_H - -#include <cuda.h> -#include <driver_types.h> -#include <string> - -#include "astra/Globals.h" - -#include "dims.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define ASTRA_CUDA_ASSERT(err) do { if (err != cudaSuccess) { astraCUDA::reportCudaError(err); assert(err == cudaSuccess); } } while(0) - - -namespace astraCUDA { - -bool copyVolumeToDevice(const float* in_data, unsigned int in_pitch, - const SDimensions& dims, - float* outD_data, unsigned int out_pitch); -bool copyVolumeFromDevice(float* out_data, unsigned int out_pitch, - const SDimensions& dims, - float* inD_data, unsigned int in_pitch); -bool copySinogramFromDevice(float* out_data, unsigned int out_pitch, - const SDimensions& dims, - float* inD_data, unsigned int in_pitch); -bool copySinogramToDevice(const float* in_data, unsigned int in_pitch, - const SDimensions& dims, - float* outD_data, unsigned int out_pitch); - -bool allocateVolume(float*& D_ptr, unsigned int width, unsigned int height, unsigned int& pitch); -void zeroVolume(float* D_data, unsigned int pitch, unsigned int width, unsigned int height); - -bool allocateVolumeData(float*& D_ptr, unsigned int& pitch, const SDimensions& dims); -bool allocateProjectionData(float*& D_ptr, unsigned int& pitch, const SDimensions& dims); -void zeroVolumeData(float* D_ptr, unsigned int pitch, const SDimensions& dims); -void zeroProjectionData(float* D_ptr, unsigned int pitch, const SDimensions& dims); - -void duplicateVolumeData(float* D_dst, float* D_src, unsigned int pitch, const SDimensions& dims); -void duplicateProjectionData(float* D_dst, float* D_src, unsigned int pitch, const SDimensions& dims); - - - -bool cudaTextForceKernelsCompletion(); -void reportCudaError(cudaError_t err); - - - -float dotProduct2D(float* D_data, unsigned int pitch, - unsigned int width, unsigned int height); - -} - -#endif |