From e2d5375ecc5c8fc45b796e0bd9d948cd729abcc9 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Thu, 24 Jan 2019 13:48:49 +0100 Subject: Remove largely unimplemented CProjector2D::projectPoint method This includes the astra_mex_projector('splat') matlab function. --- src/FanFlatBeamLineKernelProjector2D.cpp | 8 ---- src/FanFlatBeamStripKernelProjector2D.cpp | 63 -------------------------- src/ParallelBeamBlobKernelProjector2D.cpp | 45 ------------------- src/ParallelBeamDistanceDrivenProjector2D.cpp | 19 ++------ src/ParallelBeamLineKernelProjector2D.cpp | 64 --------------------------- src/ParallelBeamLinearKernelProjector2D.cpp | 61 ------------------------- src/ParallelBeamStripKernelProjector2D.cpp | 61 ------------------------- src/SparseMatrixProjector2D.cpp | 41 ----------------- 8 files changed, 3 insertions(+), 359 deletions(-) (limited to 'src') diff --git a/src/FanFlatBeamLineKernelProjector2D.cpp b/src/FanFlatBeamLineKernelProjector2D.cpp index 6475ab2..a092504 100644 --- a/src/FanFlatBeamLineKernelProjector2D.cpp +++ b/src/FanFlatBeamLineKernelProjector2D.cpp @@ -159,14 +159,6 @@ void CFanFlatBeamLineKernelProjector2D::computeSingleRayWeights(int _iProjection _iStoredPixelCount = p.getStoredPixelCount(); } -//---------------------------------------------------------------------------------------- -// Splat a single point -std::vector CFanFlatBeamLineKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ - std::vector 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 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 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 CParallelBeamBlobKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ - // float32 x = m_pVolumeGeometry->pixelColToCenterX(_iCol); - // float32 y = m_pVolumeGeometry->pixelRowToCenterY(_iRow); - - // std::vector 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(); -} 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 . #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 CParallelBeamDistanceDrivenProjector2D::projectPoint(int _iRow, int _iCol) -{ - // TODO - assert(false); - - std::vector 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 CParallelBeamLineKernelProjector2D::projectPoint(int _iRow, int _iCol) -{ - std::vector 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 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 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 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 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 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 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 ret; - - const CSparseMatrix* pMatrix = dynamic_cast(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; -} - -//---------------------------------------------------------------------------------------- -- cgit v1.2.3