diff options
| author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2019-01-24 13:48:49 +0100 | 
|---|---|---|
| committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2019-01-24 14:18:03 +0100 | 
| commit | e2d5375ecc5c8fc45b796e0bd9d948cd729abcc9 (patch) | |
| tree | 774f65447d591ce27abbaccc205940a010775c7b | |
| parent | b9563df34df98480d35a53caa2b81d998440f9c5 (diff) | |
Remove largely unimplemented CProjector2D::projectPoint method
This includes the astra_mex_projector('splat') matlab function.
21 files changed, 6 insertions, 667 deletions
| diff --git a/include/astra/FanFlatBeamLineKernelProjector2D.h b/include/astra/FanFlatBeamLineKernelProjector2D.h index 1bfaf07..4492bdf 100644 --- a/include/astra/FanFlatBeamLineKernelProjector2D.h +++ b/include/astra/FanFlatBeamLineKernelProjector2D.h @@ -134,14 +134,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object.  	 * diff --git a/include/astra/FanFlatBeamStripKernelProjector2D.h b/include/astra/FanFlatBeamStripKernelProjector2D.h index a6a303c..4942f6c 100644 --- a/include/astra/FanFlatBeamStripKernelProjector2D.h +++ b/include/astra/FanFlatBeamStripKernelProjector2D.h @@ -132,14 +132,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object.  	 * diff --git a/include/astra/ParallelBeamBlobKernelProjector2D.h b/include/astra/ParallelBeamBlobKernelProjector2D.h index 46b0b52..ffae707 100644 --- a/include/astra/ParallelBeamBlobKernelProjector2D.h +++ b/include/astra/ParallelBeamBlobKernelProjector2D.h @@ -160,14 +160,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object.  	 * diff --git a/include/astra/ParallelBeamDistanceDrivenProjector2D.h b/include/astra/ParallelBeamDistanceDrivenProjector2D.h index 67dd21b..6d1d633 100644 --- a/include/astra/ParallelBeamDistanceDrivenProjector2D.h +++ b/include/astra/ParallelBeamDistanceDrivenProjector2D.h @@ -138,14 +138,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object. diff --git a/include/astra/ParallelBeamDistanceDrivenProjector2D.inl b/include/astra/ParallelBeamDistanceDrivenProjector2D.inl index 6bf3b56..7b45ed1 100644 --- a/include/astra/ParallelBeamDistanceDrivenProjector2D.inl +++ b/include/astra/ParallelBeamDistanceDrivenProjector2D.inl @@ -81,8 +81,6 @@ void CParallelBeamDistanceDrivenProjector2D::projectBlock_internal(int _iProjFro  		const SParProjection * proj = &pVecProjectionGeometry->getProjectionVectors()[iAngle]; -		float32 detSize = sqrt(proj->fDetUX * proj->fDetUX + proj->fDetUY * proj->fDetUY); -  		const bool vertical = fabs(proj->fRayX) < fabs(proj->fRayY);  		const float32 Ex = m_pVolumeGeometry->getWindowMinX() + pixelLengthX*0.5f; diff --git a/include/astra/ParallelBeamLineKernelProjector2D.h b/include/astra/ParallelBeamLineKernelProjector2D.h index f709e1d..4238919 100644 --- a/include/astra/ParallelBeamLineKernelProjector2D.h +++ b/include/astra/ParallelBeamLineKernelProjector2D.h @@ -132,14 +132,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object.  	 * diff --git a/include/astra/ParallelBeamLinearKernelProjector2D.h b/include/astra/ParallelBeamLinearKernelProjector2D.h index a09dcd1..67d940e 100644 --- a/include/astra/ParallelBeamLinearKernelProjector2D.h +++ b/include/astra/ParallelBeamLinearKernelProjector2D.h @@ -135,14 +135,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object. diff --git a/include/astra/ParallelBeamLinearKernelProjector2D.inl b/include/astra/ParallelBeamLinearKernelProjector2D.inl index 485eef6..10d4892 100644 --- a/include/astra/ParallelBeamLinearKernelProjector2D.inl +++ b/include/astra/ParallelBeamLinearKernelProjector2D.inl @@ -156,7 +156,7 @@ void CParallelBeamLinearKernelProjector2D::projectBlock_internal(int _iProjFrom,  		float32 detSize = sqrt(proj->fDetUX * proj->fDetUX + proj->fDetUY * proj->fDetUY); -		bool vertical = fabs(proj->fRayX) < fabs(proj->fRayY); +		const bool vertical = fabs(proj->fRayX) < fabs(proj->fRayY);  		if (vertical) {  			RxOverRy = proj->fRayX/proj->fRayY;  			lengthPerRow = detSize * m_pVolumeGeometry->getPixelLengthX() * sqrt(proj->fRayY*proj->fRayY + proj->fRayX*proj->fRayX) / abs(proj->fRayY); diff --git a/include/astra/ParallelBeamStripKernelProjector2D.h b/include/astra/ParallelBeamStripKernelProjector2D.h index 153a454..597f8dc 100644 --- a/include/astra/ParallelBeamStripKernelProjector2D.h +++ b/include/astra/ParallelBeamStripKernelProjector2D.h @@ -133,14 +133,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object.  	 * diff --git a/include/astra/Projector2D.h b/include/astra/Projector2D.h index 8e0b7a8..9d9130f 100644 --- a/include/astra/Projector2D.h +++ b/include/astra/Projector2D.h @@ -149,14 +149,6 @@ public:  											 SPixelWeight* _pfWeightedPixels,   											 int* _piRayStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol) = 0; -  	/** Returns the number of weights required for storage of all weights of one projection ray.  	 *  	 * @param _iProjectionIndex Index of the projection (zero-based). diff --git a/include/astra/SparseMatrixProjector2D.h b/include/astra/SparseMatrixProjector2D.h index db8c4e2..1fc44c5 100644 --- a/include/astra/SparseMatrixProjector2D.h +++ b/include/astra/SparseMatrixProjector2D.h @@ -133,14 +133,6 @@ public:  		                                 int _iMaxPixelCount,   										 int& _iStoredPixelCount); -	/** Create a list of detectors that are influenced by point [_iRow, _iCol]. -	 * -	 * @param _iRow row of the point -	 * @param _iCol column of the point -	 * @return list of SDetector2D structs -	 */ -	virtual std::vector<SDetector2D> projectPoint(int _iRow, int _iCol); -  	/** Policy-based projection of all rays.  This function will calculate each non-zero projection   	 * weight and use this value for a task provided by the policy object.  	 * diff --git a/matlab/mex/astra_mex_projector3d_c.cpp b/matlab/mex/astra_mex_projector3d_c.cpp index 5581d6c..e760e3d 100644 --- a/matlab/mex/astra_mex_projector3d_c.cpp +++ b/matlab/mex/astra_mex_projector3d_c.cpp @@ -179,175 +179,6 @@ void astra_mex_projector3d_get_volume_geometry(int nlhs, mxArray* plhs[], int nr  }  //----------------------------------------------------------------------------------------- -/** -* [weights] = astra_mex_projector3d('weights_single_ray', pid, projection_index, detector_index); -*/ -void astra_mex_projector_weights_single_ray(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) -{  -	//// step1: get input -	//if (nrhs < 4) { -	//	mexErrMsgTxt("Not enough arguments.  See the help document for a detailed argument list. \n"); -	//	return; -	//} -	//int iPid = (int)(mxGetScalar(prhs[1])); -	//int iProjectionIndex = (int)(mxGetScalar(prhs[2])); -	//int iDetectorIndex = (int)(mxGetScalar(prhs[3])); - -	//// step2: get projector -	//CProjector3D* pProjector; -	//if (!(pProjector = CProjector3DManager::getSingleton().get(iPid))) { -	//	mexErrMsgTxt("Projector not found.\n"); -	//	return; -	//} -	// -	//// step3: create output vars -	//int iStoredPixelCount; -	//int iMaxPixelCount = pProjector->getProjectionWeightsCount(iProjectionIndex); -	//SWeightedPixel* pPixelsWeights = new SWeightedPixel3D[iMaxPixelCount]; -	// -	//// step4: perform operation -	//pProjector->computeSingleRayWeights(iProjectionIndex,  -	//									iDetectorIndex,  -	//									pPixelsWeights,  -	//									iMaxPixelCount,  -	//									iStoredPixelCount); - -	//// step5: return output -	//if (1 <= nlhs) { -	//	mwSize dims[2]; -	//	dims[0] = iStoredPixelCount; -	//	dims[1] = 2; - -	//	plhs[0] = mxCreateNumericArray(2, dims, mxDOUBLE_CLASS, mxREAL); -	//	double* out = mxGetPr(plhs[0]); - -	//	for (int col = 0; col < iStoredPixelCount; col++) { -	//		out[col] = pPixelsWeights[col].m_iIndex; -	//		out[iStoredPixelCount+col] = pPixelsWeights[col].m_fWeight; -	//		//cout << pPixelsWeights[col].m_iIndex << " " << pPixelsWeights[col].m_fWeight <<endl; -	//	}	 -	//} -	// -	//// garbage collection -	//delete[] pPixelsWeights; -} - -////----------------------------------------------------------------------------------------- -///** -//* [weights] = astra_mex_projector('weights_projection', pid, projection_index); -//*/ -//void astra_mex_projector_weights_projection(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) -//{  -//	// step1: get input -//	if (nrhs < 3) { -//		mexErrMsgTxt("Not enough arguments.  See the help document for a detailed argument list. \n"); -//		return; -//	} -//	int iPid = (int)(mxGetScalar(prhs[1])); -//	int iProjectionIndex = (int)(mxGetScalar(prhs[2])); -// -//	// step2: get projector -//	CProjector2D* pProjector; -//	if (!(pProjector = CProjectorManager::getSingleton().get(iPid))) { -//		mexErrMsgTxt("Projector not found.\n"); -//		return; -//	} -// -//	// step3: create output vars -//	SWeightedPixel2D* pPixelsWheights = new SWeightedPixel2D[pProjector->getProjectionWeightsCount(iProjectionIndex)]; -//	int* piRayStoredPixelCount = new int[pProjector->getProjectionGeometry()->getDetectorCount()]; -// -//	// step4: perform operation -//	pProjector->computeProjectionRayWeights(iProjectionIndex, pPixelsWheights, piRayStoredPixelCount); -// -//	// step5: return output -//	if (1 <= nlhs) { -//		// get basic values -//		int iMatrixSize = pProjector->getVolumeGeometry()->getWindowLengthX() * -//						  pProjector->getVolumeGeometry()->getWindowLengthY(); -//		int iDetectorCount = pProjector->getProjectionGeometry()->getDetectorCount(); -//		int iTotalStoredPixelCount = 0; -//		for (int i = 0; i < iDetectorCount; i++) { -//			iTotalStoredPixelCount += piRayStoredPixelCount[i]; -//		} -// -//		// create matlab sparse matrix -//		plhs[0] = mxCreateSparse(iMatrixSize,				// number of rows (#pixels) -//							     iDetectorCount,			// number of columns (#detectors) -//								 iTotalStoredPixelCount,	// number of non-zero elements -//								 mxREAL);					// element type -//		double* values = mxGetPr(plhs[0]); -//		mwIndex* rows = mxGetIr(plhs[0]); -//		mwIndex* cols = mxGetJc(plhs[0]); -//		 -//		int currentBase = 0; -//		int currentIndex = 0; -//		for (int i = 0; i < iDetectorCount; i++) { -//			for (int j = 0; j < piRayStoredPixelCount[i]; j++) { -//				values[currentIndex + j] = pPixelsWheights[currentBase + j].m_fWeight; -//				rows[currentIndex + j] = pPixelsWheights[currentBase + j].m_iIndex; -//			} -//					 -//			currentBase += pProjector->getProjectionWeightsCount(iProjectionIndex) / pProjector->getProjectionGeometry()->getDetectorCount(); -//			currentIndex += piRayStoredPixelCount[i]; -//		} -//		cols[0] = piRayStoredPixelCount[0]; -//		for (int j = 1; j < iDetectorCount; j++) { -//			cols[j] = cols[j-1] + piRayStoredPixelCount[j]; -//		} -//		cols[iDetectorCount] = iTotalStoredPixelCount; -//	} -//	 -//} -// -////----------------------------------------------------------------------------------------- -///** -//* output = astra_mex_projector('splat', pid, x, y); -//*/ -//void astra_mex_projector_splat(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) -//{  -//	// step1: get input -//	if (nrhs < 4) { -//		mexErrMsgTxt("Not enough arguments.  See the help document for a detailed argument list. \n"); -//		return; -//	} -//	int iPid = (int)(mxGetScalar(prhs[1])); -//	int iX = (int)(mxGetScalar(prhs[2])); -//	int iY = (int)(mxGetScalar(prhs[3])); -// -//	// step2: get projector -//	CProjector2D* pProjector; -//	if (!(pProjector = CProjectorManager::getSingleton().get(iPid))) { -//		mexErrMsgTxt("Projector not found.\n"); -//		return; -//	} -// -//	// step3: perform action -//	vector<SDetector2D> detinfo = pProjector->projectPoint(iX, iY); -// -//	// step4: output -//	if (nlhs <= 1) { -//		plhs[0] = mxCreateDoubleMatrix(detinfo.size(),	// # rows -//									   2,				// # cols -//									   mxREAL);			// datatype 32-bits -//		double* out = mxGetPr(plhs[0]); -// -//		// fill up output -//		int i = 0; -//		for (int x = 0; x < detinfo.size() ; x++) { -//			out[i] = detinfo[x].m_iAngleIndex; -//			i++; -//		} -//		for (int x = 0; x < detinfo.size() ; x++) { -//			out[i] = detinfo[x].m_iDetectorIndex; -//			i++; -//		} -//	} -// -// -//} - -//-----------------------------------------------------------------------------------------  /** result = astra_mex_projector3d('is_cuda', id);   *   * Return is the specified projector is a cuda projector. @@ -395,8 +226,7 @@ static void printHelp()  {  	mexPrintf("Please specify a mode of operation.\n");  	mexPrintf("Valid modes: create, delete, clear, get_projection_geometry,\n"); -	mexPrintf("             get_volume_geometry, weights_single_ray, weights_projection\n"); -	mexPrintf("				splat, is_cuda\n"); +	mexPrintf("             get_volume_geometry, is_cuda\n");  }  //----------------------------------------------------------------------------------------- @@ -428,12 +258,6 @@ void mexFunction(int nlhs, mxArray* plhs[],  		astra_mex_projector3d_get_projection_geometry(nlhs, plhs, nrhs, prhs);  	} else if (sMode == "get_volume_geometry") {  		astra_mex_projector3d_get_volume_geometry(nlhs, plhs, nrhs, prhs); -	} else if (sMode == "weights_single_ray") { -		astra_mex_projector_weights_single_ray(nlhs, plhs, nrhs, prhs); -	//} else if (sMode == "weights_projection") { -	//	astra_mex_projector_weights_projection(nlhs, plhs, nrhs, prhs); -	//} else if (sMode == "splat") { -	//	astra_mex_projector_splat(nlhs, plhs, nrhs, prhs);  	} else if (sMode == "is_cuda") {  		astra_mex_projector3d_is_cuda(nlhs, plhs, nrhs, prhs);  	} else if (sMode == "help") { diff --git a/matlab/mex/astra_mex_projector_c.cpp b/matlab/mex/astra_mex_projector_c.cpp index 27c4b20..16da126 100644 --- a/matlab/mex/astra_mex_projector_c.cpp +++ b/matlab/mex/astra_mex_projector_c.cpp @@ -337,59 +337,6 @@ void astra_mex_projector_weights_projection(int nlhs, mxArray* plhs[], int nrhs,  }  //----------------------------------------------------------------------------------------- -/** hit_detectors = astra_mex_projector('splat', id, col, row); - * - * Create a list of detector indices which have a nonzero contribution to the projection matrix for a pixel [row,col]. - * id: identifier of the projector object as stored in the astra-library. - * col: column of the pixel - * row: row of the pixel - * hit_detectors: list of detector indices [angle_index, det_index] that are hit - */ -void astra_mex_projector_splat(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) -{  -	// step1: get input -	if (nrhs < 4) { -		mexErrMsgTxt("Not enough arguments.  See the help document for a detailed argument list. \n"); -		return; -	} -	int iPid = (int)(mxGetScalar(prhs[1])); -	int iX = (int)(mxGetScalar(prhs[2])); -	int iY = (int)(mxGetScalar(prhs[3])); - -	// step2: get projector -	CProjector2D* pProjector = CProjector2DManager::getSingleton().get(iPid); -	if (!pProjector || !pProjector->isInitialized()) { -		mexErrMsgTxt("Projector not initialized.\n"); -		return; -	} - -	// step3: perform action -	vector<SDetector2D> detinfo = pProjector->projectPoint(iX, iY); - -	// step4: output -	if (nlhs <= 1) { -		plhs[0] = mxCreateDoubleMatrix(detinfo.size(),	// # rows -									   2,				// # cols -									   mxREAL);			// datatype 32-bits -		double* out = mxGetPr(plhs[0]); - -		// fill up output -		int i = 0; -		int x; -		for (x = 0; x < detinfo.size(); ++x) { -			out[i] = detinfo[x].m_iAngleIndex; -			++i; -		} -		for (x = 0; x < detinfo.size(); ++x) { -			out[i] = detinfo[x].m_iDetectorIndex; -			++i; -		} -	} - - -} - -//-----------------------------------------------------------------------------------------  /** matrix_id = astra_mex_projector('matrix', id);   *   * Create an explicit projection matrix for this projector. @@ -467,7 +414,7 @@ static void printHelp()  	mexPrintf("Please specify a mode of operation.\n");  	mexPrintf("Valid modes: create, delete, clear, info, projection_geometry,\n");  	mexPrintf("             volume_geometry, weights_single_ray, weights_projection\n"); -	mexPrintf("             splat, matrix, is_cuda\n"); +	mexPrintf("             matrix, is_cuda\n");  } @@ -506,8 +453,6 @@ void mexFunction(int nlhs, mxArray* plhs[],  		astra_mex_projector_weights_single_ray(nlhs, plhs, nrhs, prhs);  	} else if (sMode == "weights_projection") {  		astra_mex_projector_weights_projection(nlhs, plhs, nrhs, prhs); -	} else if (sMode == "splat") { -		astra_mex_projector_splat(nlhs, plhs, nrhs, prhs);  	} else if (sMode == "matrix") {  		astra_mex_projector_matrix(nlhs, plhs, nrhs, prhs);  	} else if (sMode == "is_cuda") { diff --git a/src/FanFlatBeamLineKernelProjector2D.cpp b/src/FanFlatBeamLineKernelProjector2D.cpp index 6475ab2..a092504 100644 --- a/src/FanFlatBeamLineKernelProjector2D.cpp +++ b/src/FanFlatBeamLineKernelProjector2D.cpp @@ -160,14 +160,6 @@ void CFanFlatBeamLineKernelProjector2D::computeSingleRayWeights(int _iProjection  }  //---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CFanFlatBeamLineKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ -	std::vector<SDetector2D> res; -	return res; -} - -//----------------------------------------------------------------------------------------  //Result is always in [-PI/2; PI/2]  float32 CFanFlatBeamLineKernelProjector2D::angleBetweenVectors(float32 _fAX, float32 _fAY, float32 _fBX, float32 _fBY)  { diff --git a/src/FanFlatBeamStripKernelProjector2D.cpp b/src/FanFlatBeamStripKernelProjector2D.cpp index 7d25a55..c974b82 100644 --- a/src/FanFlatBeamStripKernelProjector2D.cpp +++ b/src/FanFlatBeamStripKernelProjector2D.cpp @@ -157,66 +157,3 @@ void CFanFlatBeamStripKernelProjector2D::computeSingleRayWeights(int _iProjectio  	projectSingleRay(_iProjectionIndex, _iDetectorIndex, p);  	_iStoredPixelCount = p.getStoredPixelCount();  } - -//---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CFanFlatBeamStripKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ -	//float32 xUL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	//float32 yUL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	//float32 xUR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	//float32 yUR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	//float32 xLL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	//float32 yLL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	//float32 xLR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	//float32 yLR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 0.5f; - -	std::vector<SDetector2D> res; -	//// loop projectors and detectors -	//for (int iProjection = 0; iProjection < m_pProjectionGeometry->getProjectionAngleCount(); ++iProjection) { - -	//	// get projection angle -	//	float32 theta = m_pProjectionGeometry->getProjectionAngle(iProjection); -	//	if (theta >= 7*PIdiv4) theta -= 2*PI; -	//	bool inverse = false; -	//	if (theta >= 3*PIdiv4) { -	//		theta -= PI; -	//		inverse = true; -	//	} - -	//	// calculate distance from the center of the voxel to the ray though the origin -	//	float32 tUL = xUL * cos(theta) + yUL * sin(theta); -	//	float32 tUR = xUR * cos(theta) + yUR * sin(theta); -	//	float32 tLL = xLL * cos(theta) + yLL * sin(theta); -	//	float32 tLR = xLR * cos(theta) + yLR * sin(theta); -	//	if (inverse) { -	//		tUL *= -1.0f; -	//		tUR *= -1.0f; -	//		tLL *= -1.0f; -	//		tLR *= -1.0f; -	//	} -	//	float32 tMin = min(tUL, min(tUR, min(tLL,tLR))); -	//	float32 tMax = max(tUL, max(tUR, max(tLL,tLR))); - -	//	// calculate the offset on the detectorarray (in indices) -	//	int dmin = (int)floor(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMin)); -	//	int dmax = (int)ceil(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMax)); - -	//	// add affected detectors to the list -	//	for (int i = dmin; i <= dmax; ++i) { -	//		if (i >= 0 && i < m_pProjectionGeometry->getDetectorCount()) { -	//			SDetector2D det; -	//			det.m_iAngleIndex = iProjection; -	//			det.m_iDetectorIndex = i; -	//			det.m_iIndex = iProjection * getProjectionGeometry()->getDetectorCount() + i; -	//			res.push_back(det); -	//		} -	//	} -	//} - -	//// return result vector -	return res; - -} - -//---------------------------------------------------------------------------------------- diff --git a/src/ParallelBeamBlobKernelProjector2D.cpp b/src/ParallelBeamBlobKernelProjector2D.cpp index da21024..0fb658f 100644 --- a/src/ParallelBeamBlobKernelProjector2D.cpp +++ b/src/ParallelBeamBlobKernelProjector2D.cpp @@ -212,48 +212,3 @@ void CParallelBeamBlobKernelProjector2D::computeSingleRayWeights(int _iProjectio  	projectSingleRay(_iProjectionIndex, _iDetectorIndex, p);  	_iStoredPixelCount = p.getStoredPixelCount();  } -//---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CParallelBeamBlobKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ -	// float32 x = m_pVolumeGeometry->pixelColToCenterX(_iCol); -	// float32 y = m_pVolumeGeometry->pixelRowToCenterY(_iRow); - -	// std::vector<SDetector2D> res; -	// // loop projectors and detectors -	// for (int iProjection = 0; iProjection < m_pProjectionGeometry->getProjectionAngleCount(); ++iProjection) { - -	// 	// get projection angle -	// 	float32 theta = m_pProjectionGeometry->getProjectionAngle(iProjection); -	// 	if (theta >= 7*PIdiv4) theta -= 2*PI; -	// 	bool inverse = false; -	// 	if (theta >= 3*PIdiv4) { -	// 		theta -= PI; -	// 		inverse = true; -	// 	} - -	// 	// calculate distance from the center of the voxel to the ray though the origin -	// 	float32 t = x * cos(theta) + y * sin(theta); -	// 	if (inverse) t *= -1.0f; - -	// 	// calculate the offset on the detectorarray (in indices) -	// 	float32 d = m_pProjectionGeometry->detectorOffsetToIndexFloat(t); -	// 	int dmin = (int)ceil(d - m_fBlobSize); -	// 	int dmax = (int)floor(d + m_fBlobSize); - -	// 	// add affected detectors to the list -	// 	for (int i = dmin; i <= dmax; ++i) { -	// 		if (d >= 0 && d < m_pProjectionGeometry->getDetectorCount()) { -	// 			SDetector2D det; -	// 			det.m_iAngleIndex = iProjection; -	// 			det.m_iDetectorIndex = i; -	// 			det.m_iIndex = iProjection * getProjectionGeometry()->getDetectorCount() + i; -	// 			res.push_back(det); -	// 		} -	// 	} -	// } - -	// // return result vector -	// return res; -	return std::vector<SDetector2D>(); -} diff --git a/src/ParallelBeamDistanceDrivenProjector2D.cpp b/src/ParallelBeamDistanceDrivenProjector2D.cpp index a4ac450..531bef9 100644 --- a/src/ParallelBeamDistanceDrivenProjector2D.cpp +++ b/src/ParallelBeamDistanceDrivenProjector2D.cpp @@ -32,8 +32,7 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.  #include "astra/DataProjectorPolicies.h" -using namespace std; -using namespace astra; +namespace astra {  #include "astra/ParallelBeamDistanceDrivenProjector2D.inl" @@ -140,8 +139,8 @@ bool CParallelBeamDistanceDrivenProjector2D::initialize(CParallelProjectionGeome  // Get maximum amount of weights on a single ray  int CParallelBeamDistanceDrivenProjector2D::getProjectionWeightsCount(int _iProjectionIndex)  { -	int maxDim = max(m_pVolumeGeometry->getGridRowCount(), m_pVolumeGeometry->getGridColCount()); -	int scale = m_pProjectionGeometry->getDetectorWidth() / min(m_pVolumeGeometry->getPixelLengthX(), m_pVolumeGeometry->getPixelLengthY()); +	int maxDim = std::max(m_pVolumeGeometry->getGridRowCount(), m_pVolumeGeometry->getGridColCount()); +	int scale = m_pProjectionGeometry->getDetectorWidth() / std::min(m_pVolumeGeometry->getPixelLengthX(), m_pVolumeGeometry->getPixelLengthY());  	return maxDim * scale * 10 + 1;  } @@ -159,16 +158,4 @@ void CParallelBeamDistanceDrivenProjector2D::computeSingleRayWeights(int _iProje  	_iStoredPixelCount = p.getStoredPixelCount();  } -//---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CParallelBeamDistanceDrivenProjector2D::projectPoint(int _iRow, int _iCol) -{ -	// TODO -	assert(false); - -	std::vector<SDetector2D> res; - -	// return result vector -	return res; -  } diff --git a/src/ParallelBeamLineKernelProjector2D.cpp b/src/ParallelBeamLineKernelProjector2D.cpp index 3654fb0..1765df3 100644 --- a/src/ParallelBeamLineKernelProjector2D.cpp +++ b/src/ParallelBeamLineKernelProjector2D.cpp @@ -157,67 +157,3 @@ void CParallelBeamLineKernelProjector2D::computeSingleRayWeights(int _iProjectio  	_iStoredPixelCount = p.getStoredPixelCount();  } -//---------------------------------------------------------------------------------------- -// Project Point -std::vector<SDetector2D> CParallelBeamLineKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ -	std::vector<SDetector2D> res; -	return res; - -	// float32 xUL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yUL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	// float32 xUR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yUR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	// float32 xLL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yLL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	// float32 xLR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yLR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 0.5f; - -	// std::vector<SDetector2D> res; -	// // loop projectors and detectors -	// for (int iProjection = 0; iProjection < m_pProjectionGeometry->getProjectionAngleCount(); ++iProjection) { - -	// 	// get projection angle -	// 	float32 theta = m_pProjectionGeometry->getProjectionAngle(iProjection); -	// 	if (theta >= 7*PIdiv4) theta -= 2*PI; -	// 	bool inverse = false; -	// 	if (theta >= 3*PIdiv4) { -	// 		theta -= PI; -	// 		inverse = true; -	// 	} - -	// 	// calculate distance from the center of the voxel to the ray though the origin -	// 	float32 tUL = xUL * cos(theta) + yUL * sin(theta); -	// 	float32 tUR = xUR * cos(theta) + yUR * sin(theta); -	// 	float32 tLL = xLL * cos(theta) + yLL * sin(theta); -	// 	float32 tLR = xLR * cos(theta) + yLR * sin(theta); -	// 	if (inverse) { -	// 		tUL *= -1.0f; -	// 		tUR *= -1.0f; -	// 		tLL *= -1.0f; -	// 		tLR *= -1.0f; -	// 	} -	// 	float32 tMin = min(tUL, min(tUR, min(tLL,tLR))); -	// 	float32 tMax = max(tUL, max(tUR, max(tLL,tLR))); - -	// 	// calculate the offset on the detectorarray (in indices) -	// 	int dmin = (int)floor(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMin)); -	// 	int dmax = (int)ceil(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMax)); - -	// 	// add affected detectors to the list -	// 	for (int i = dmin; i <= dmax; ++i) { -	// 		if (i >= 0 && i < m_pProjectionGeometry->getDetectorCount()) { -	// 			SDetector2D det; -	// 			det.m_iAngleIndex = iProjection; -	// 			det.m_iDetectorIndex = i; -	// 			det.m_iIndex = iProjection * getProjectionGeometry()->getDetectorCount() + i; -	// 			res.push_back(det); -	// 		} -	// 	} -	// } - -	// // return result vector -	// return res; -} - -//---------------------------------------------------------------------------------------- diff --git a/src/ParallelBeamLinearKernelProjector2D.cpp b/src/ParallelBeamLinearKernelProjector2D.cpp index 5ca1082..120b1a2 100644 --- a/src/ParallelBeamLinearKernelProjector2D.cpp +++ b/src/ParallelBeamLinearKernelProjector2D.cpp @@ -158,64 +158,3 @@ void CParallelBeamLinearKernelProjector2D::computeSingleRayWeights(int _iProject  	projectSingleRay(_iProjectionIndex, _iDetectorIndex, p);  	_iStoredPixelCount = p.getStoredPixelCount();  } - -//---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CParallelBeamLinearKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ -	float32 xUL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 1.5f; -	float32 yUL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 1.5f; -	float32 xUR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 1.5f; -	float32 yUR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 1.5f; -	float32 xLL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 1.5f; -	float32 yLL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 1.5f; -	float32 xLR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 1.5f; -	float32 yLR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 1.5f; - -	std::vector<SDetector2D> res; -	// loop projectors and detectors -	for (int iProjection = 0; iProjection < m_pProjectionGeometry->getProjectionAngleCount(); ++iProjection) { - -		// get projection angle -		float32 theta = m_pProjectionGeometry->getProjectionAngle(iProjection); -		if (theta >= 7*PIdiv4) theta -= 2*PI; -		bool inverse = false; -		if (theta >= 3*PIdiv4) { -			theta -= PI; -			inverse = true; -		} - -		// calculate distance from the center of the voxel to the ray though the origin -		float32 tUL = xUL * cos(theta) + yUL * sin(theta); -		float32 tUR = xUR * cos(theta) + yUR * sin(theta); -		float32 tLL = xLL * cos(theta) + yLL * sin(theta); -		float32 tLR = xLR * cos(theta) + yLR * sin(theta); -		if (inverse) { -			tUL *= -1.0f; -			tUR *= -1.0f; -			tLL *= -1.0f; -			tLR *= -1.0f; -		} -		float32 tMin = min(tUL, min(tUR, min(tLL,tLR))); -		float32 tMax = max(tUL, max(tUR, max(tLL,tLR))); - -		// calculate the offset on the detectorarray (in indices) -		int dmin = (int)floor(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMin)); -		int dmax = (int)ceil(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMax)); - -		// add affected detectors to the list -		for (int i = dmin; i <= dmax; ++i) { -			if (i >= 0 && i < m_pProjectionGeometry->getDetectorCount()) { -				SDetector2D det; -				det.m_iAngleIndex = iProjection; -				det.m_iDetectorIndex = i; -				det.m_iIndex = iProjection * getProjectionGeometry()->getDetectorCount() + i; -				res.push_back(det); -			} -		} -	} - -	// return result vector -	return res; - -} diff --git a/src/ParallelBeamStripKernelProjector2D.cpp b/src/ParallelBeamStripKernelProjector2D.cpp index 4b10b68..849168d 100644 --- a/src/ParallelBeamStripKernelProjector2D.cpp +++ b/src/ParallelBeamStripKernelProjector2D.cpp @@ -160,64 +160,3 @@ void CParallelBeamStripKernelProjector2D::computeSingleRayWeights(int _iProjecti  }  //---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CParallelBeamStripKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ -	// float32 xUL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yUL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	// float32 xUR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yUR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) - m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	// float32 xLL = m_pVolumeGeometry->pixelColToCenterX(_iCol) - m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yLL = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 0.5f; -	// float32 xLR = m_pVolumeGeometry->pixelColToCenterX(_iCol) + m_pVolumeGeometry->getPixelLengthX() * 0.5f; -	// float32 yLR = m_pVolumeGeometry->pixelRowToCenterY(_iRow) + m_pVolumeGeometry->getPixelLengthY() * 0.5f; - -	std::vector<SDetector2D> res; -	// // loop projectors and detectors -	// for (int iProjection = 0; iProjection < m_pProjectionGeometry->getProjectionAngleCount(); ++iProjection) { - -	// 	// get projection angle -	// 	float32 theta = m_pProjectionGeometry->getProjectionAngle(iProjection); -	// 	if (theta >= 7*PIdiv4) theta -= 2*PI; -	// 	bool inverse = false; -	// 	if (theta >= 3*PIdiv4) { -	// 		theta -= PI; -	// 		inverse = true; -	// 	} - -	// 	// calculate distance from the center of the voxel to the ray though the origin -	// 	float32 tUL = xUL * cos(theta) + yUL * sin(theta); -	// 	float32 tUR = xUR * cos(theta) + yUR * sin(theta); -	// 	float32 tLL = xLL * cos(theta) + yLL * sin(theta); -	// 	float32 tLR = xLR * cos(theta) + yLR * sin(theta); -	// 	if (inverse) { -	// 		tUL *= -1.0f; -	// 		tUR *= -1.0f; -	// 		tLL *= -1.0f; -	// 		tLR *= -1.0f; -	// 	} -	// 	float32 tMin = min(tUL, min(tUR, min(tLL,tLR))); -	// 	float32 tMax = max(tUL, max(tUR, max(tLL,tLR))); - -	// 	// calculate the offset on the detectorarray (in indices) -	// 	int dmin = (int)floor(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMin)); -	// 	int dmax = (int)ceil(m_pProjectionGeometry->detectorOffsetToIndexFloat(tMax)); - -	// 	// add affected detectors to the list -	// 	for (int i = dmin; i <= dmax; ++i) { -	// 		if (i >= 0 && i < m_pProjectionGeometry->getDetectorCount()) { -	// 			SDetector2D det; -	// 			det.m_iAngleIndex = iProjection; -	// 			det.m_iDetectorIndex = i; -	// 			det.m_iIndex = iProjection * getProjectionGeometry()->getDetectorCount() + i; -	// 			res.push_back(det); -	// 		} -	// 	} -	// } - -	// return result vector -	return res; - -} - -//---------------------------------------------------------------------------------------- diff --git a/src/SparseMatrixProjector2D.cpp b/src/SparseMatrixProjector2D.cpp index 6fded6a..46302f3 100644 --- a/src/SparseMatrixProjector2D.cpp +++ b/src/SparseMatrixProjector2D.cpp @@ -174,44 +174,3 @@ void CSparseMatrixProjector2D::computeSingleRayWeights(int _iProjectionIndex,  	_iStoredPixelCount = p.getStoredPixelCount();  } -//---------------------------------------------------------------------------------------- -// Splat a single point -std::vector<SDetector2D> CSparseMatrixProjector2D::projectPoint(int _iRow, int _iCol) -{ -	unsigned int iVolumeIndex = _iCol * m_pVolumeGeometry->getGridRowCount() + _iRow; - -	// NOTE: This is very slow currently because we don't have the -	// sparse matrix stored in an appropriate form for this function. -	std::vector<SDetector2D> ret; - -	const CSparseMatrix* pMatrix = dynamic_cast<CSparseMatrixProjectionGeometry2D*>(m_pProjectionGeometry)->getMatrix(); - -	for (int iAngle = 0; iAngle < m_pProjectionGeometry->getProjectionAngleCount(); ++iAngle) -	{ -		for (int iDetector = 0; iDetector < m_pProjectionGeometry->getDetectorCount(); ++iDetector) -		{ -			int iRayIndex = iAngle * m_pProjectionGeometry->getDetectorCount() + iDetector; -			const unsigned int* piColIndices; -			const float32* pfValues; -			unsigned int iSize; -     -			pMatrix->getRowData(iRayIndex, iSize, pfValues, piColIndices); - -			for (unsigned int i = 0; i < iSize; ++i) { -				if (piColIndices[i] == iVolumeIndex) { -					SDetector2D s; -					s.m_iIndex = iRayIndex; -					s.m_iAngleIndex = iAngle; -					s.m_iDetectorIndex = iDetector; -					ret.push_back(s); -					break; -				} else if (piColIndices[i] > iVolumeIndex) { -					break; -				} -			} -		} -	} -	return ret; -} - -//---------------------------------------------------------------------------------------- | 
