diff options
| author | Willem Jan Palenstijn <wjp@usecode.org> | 2019-03-30 20:49:42 +0100 | 
|---|---|---|
| committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2019-09-25 14:10:08 +0200 | 
| commit | 48f4e7b165404a0375db300b9fe59da92edf1cce (patch) | |
| tree | 493a6f578d6b51baf0db79f898a5ed3e9a2074fc /src | |
| parent | 3cf63d335ebe392a8c77f0c90395c18150647aeb (diff) | |
| download | astra-48f4e7b165404a0375db300b9fe59da92edf1cce.tar.gz astra-48f4e7b165404a0375db300b9fe59da92edf1cce.tar.bz2 astra-48f4e7b165404a0375db300b9fe59da92edf1cce.tar.xz astra-48f4e7b165404a0375db300b9fe59da92edf1cce.zip  | |
Adjust FBP to line integral scaling
Diffstat (limited to 'src')
| -rw-r--r-- | src/CudaFilteredBackProjectionAlgorithm.cpp | 7 | ||||
| -rw-r--r-- | src/CudaReconstructionAlgorithm2D.cpp | 4 | ||||
| -rw-r--r-- | src/FilteredBackProjectionAlgorithm.cpp | 8 | 
3 files changed, 14 insertions, 5 deletions
diff --git a/src/CudaFilteredBackProjectionAlgorithm.cpp b/src/CudaFilteredBackProjectionAlgorithm.cpp index 88e235b..69140fc 100644 --- a/src/CudaFilteredBackProjectionAlgorithm.cpp +++ b/src/CudaFilteredBackProjectionAlgorithm.cpp @@ -151,6 +151,13 @@ void CCudaFilteredBackProjectionAlgorithm::initCUDAAlgorithm()  	if (!ok) {  		ASTRA_ERROR("CCudaFilteredBackProjectionAlgorithm: Failed to set short-scan mode");  	} + +	const CVolumeGeometry2D& volGeom = *m_pProjector->getVolumeGeometry(); +	float fPixelArea = volGeom.getPixelArea(); +	ok &= pFBP->setReconstructionScale(1.0f/fPixelArea); +	if (!ok) { +		ASTRA_ERROR("CCudaFilteredBackProjectionAlgorithm: Failed to set reconstruction scale"); +	}  } diff --git a/src/CudaReconstructionAlgorithm2D.cpp b/src/CudaReconstructionAlgorithm2D.cpp index 939a026..6730cea 100644 --- a/src/CudaReconstructionAlgorithm2D.cpp +++ b/src/CudaReconstructionAlgorithm2D.cpp @@ -309,9 +309,7 @@ void CCudaReconstructionAlgorithm2D::run(int _iNrIterations)  		m_bAlgoInit = true;  	} -	float fSinogramScale = 1.0f; - -	ok = m_pAlgo->copyDataToGPU(m_pSinogram->getDataConst(), m_pSinogram->getGeometry()->getDetectorCount(), fSinogramScale, +	ok = m_pAlgo->copyDataToGPU(m_pSinogram->getDataConst(), m_pSinogram->getGeometry()->getDetectorCount(),  	                            m_pReconstruction->getDataConst(), volgeom.getGridColCount(),  	                            m_bUseReconstructionMask ? m_pReconstructionMask->getDataConst() : 0, volgeom.getGridColCount(),  	                            m_bUseSinogramMask ? m_pSinogramMask->getDataConst() : 0, m_pSinogram->getGeometry()->getDetectorCount()); diff --git a/src/FilteredBackProjectionAlgorithm.cpp b/src/FilteredBackProjectionAlgorithm.cpp index 423dc6c..95bef3c 100644 --- a/src/FilteredBackProjectionAlgorithm.cpp +++ b/src/FilteredBackProjectionAlgorithm.cpp @@ -264,8 +264,12 @@ void CFilteredBackProjectionAlgorithm::run(int _iNrIterations)  	            DefaultBPPolicy(m_pReconstruction, &filteredSinogram));  	// Scale data -	int iAngleCount = m_pProjector->getProjectionGeometry()->getProjectionAngleCount(); -	(*m_pReconstruction) *= (PI/2)/iAngleCount; +	const CVolumeGeometry2D& volGeom = *m_pProjector->getVolumeGeometry(); +	const CProjectionGeometry2D& projGeom = *m_pProjector->getProjectionGeometry(); + +	int iAngleCount = projGeom.getProjectionAngleCount(); +	float fPixelArea = volGeom.getPixelArea(); +	(*m_pReconstruction) *= PI/(2*iAngleCount*fPixelArea);  	m_pReconstruction->updateStatistics();  }  | 
