diff options
| -rw-r--r-- | cuda/3d/astra3d.cu | 36 | ||||
| -rw-r--r-- | cuda/3d/astra3d.h | 13 | ||||
| -rw-r--r-- | src/CudaFDKAlgorithm3D.cpp | 12 | 
3 files changed, 17 insertions, 44 deletions
| diff --git a/cuda/3d/astra3d.cu b/cuda/3d/astra3d.cu index 5b1f363..0e94fb8 100644 --- a/cuda/3d/astra3d.cu +++ b/cuda/3d/astra3d.cu @@ -1679,33 +1679,19 @@ bool astraCudaPar3DBP_SIRTWeighted(float* pfVolume,  bool astraCudaFDK(float* pfVolume, const float* pfProjections, -                  unsigned int iVolX, -                  unsigned int iVolY, -                  unsigned int iVolZ, -                  unsigned int iProjAngles, -                  unsigned int iProjU, -                  unsigned int iProjV, -                  float fOriginSourceDistance, -                  float fOriginDetectorDistance, -                  float fDetUSize, -                  float fDetVSize, -                  const float *pfAngles, +                  const CVolumeGeometry3D* pVolGeom, +                  const CConeProjectionGeometry3D* pProjGeom,                    bool bShortScan,                    int iGPUIndex, int iVoxelSuperSampling)  {  	SDimensions3D dims; -	dims.iVolX = iVolX; -	dims.iVolY = iVolY; -	dims.iVolZ = iVolZ; -	if (iVolX == 0 || iVolY == 0 || iVolZ == 0) -		return false; +	bool ok = convertAstraGeometry_dims(pVolGeom, pProjGeom, dims); -	dims.iProjAngles = iProjAngles; -	dims.iProjU = iProjU; -	dims.iProjV = iProjV; +	// TODO: Check that pVolGeom is normalized, since we don't support +	// other volume geometries yet -	if (iProjAngles == 0 || iProjU == 0 || iProjV == 0 || pfAngles == 0) +	if (!ok)  		return false;  	dims.iRaysPerVoxelDim = iVoxelSuperSampling; @@ -1722,9 +1708,8 @@ bool astraCudaFDK(float* pfVolume, const float* pfProjections,  			return false;  	} -  	cudaPitchedPtr D_volumeData = allocateVolumeData(dims); -	bool ok = D_volumeData.ptr; +	ok = D_volumeData.ptr;  	if (!ok)  		return false; @@ -1745,6 +1730,13 @@ bool astraCudaFDK(float* pfVolume, const float* pfProjections,  		return false;  	} +	float fOriginSourceDistance = pProjGeom->getOriginSourceDistance(); +	float fOriginDetectorDistance = pProjGeom->getOriginDetectorDistance(); +	float fDetUSize = pProjGeom->getDetectorSpacingX(); +	float fDetVSize = pProjGeom->getDetectorSpacingY(); +	const float *pfAngles = pProjGeom->getProjectionAngles(); + +  	// TODO: Offer interface for SrcZ, DetZ  	ok &= FDK(D_volumeData, D_projData, fOriginSourceDistance,  	          fOriginDetectorDistance, 0, 0, fDetUSize, fDetVSize, diff --git a/cuda/3d/astra3d.h b/cuda/3d/astra3d.h index cab5479..6bac8b2 100644 --- a/cuda/3d/astra3d.h +++ b/cuda/3d/astra3d.h @@ -401,17 +401,8 @@ _AstraExport bool astraCudaPar3DBP_SIRTWeighted(float* pfVolume, const float* pf                        int iGPUIndex, int iVoxelSuperSampling);  _AstraExport bool astraCudaFDK(float* pfVolume, const float* pfProjections, -                  unsigned int iVolX, -                  unsigned int iVolY, -                  unsigned int iVolZ, -                  unsigned int iProjAngles, -                  unsigned int iProjU, -                  unsigned int iProjV, -                  float fOriginSourceDistance, -                  float fOriginDetectorDistance, -                  float fDetUSize, -                  float fDetVSize, -                  const float *pfAngles, +                  const CVolumeGeometry3D* pVolGeom, +                  const CConeProjectionGeometry3D* pProjGeom,                    bool bShortScan,                    int iGPUIndex, int iVoxelSuperSampling); diff --git a/src/CudaFDKAlgorithm3D.cpp b/src/CudaFDKAlgorithm3D.cpp index 7638696..0a46ff6 100644 --- a/src/CudaFDKAlgorithm3D.cpp +++ b/src/CudaFDKAlgorithm3D.cpp @@ -171,17 +171,7 @@ void CCudaFDKAlgorithm3D::run(int _iNrIterations)  	bool ok = true;  	ok = astraCudaFDK(pReconMem->getData(), pSinoMem->getDataConst(), -	                  volgeom.getGridColCount(), -	                  volgeom.getGridRowCount(), -	                  volgeom.getGridSliceCount(), -	                  conegeom->getProjectionCount(), -	                  conegeom->getDetectorColCount(), -	                  conegeom->getDetectorRowCount(), -	                  conegeom->getOriginSourceDistance(), -	                  conegeom->getOriginDetectorDistance(), -	                  conegeom->getDetectorSpacingX(), -	                  conegeom->getDetectorSpacingY(), -	                  conegeom->getProjectionAngles(), +	                  &volgeom, conegeom,  	                  m_bShortScan, m_iGPUIndex, m_iVoxelSuperSampling);  	ASTRA_ASSERT(ok); | 
