19 #ifndef rtkIterativeConeBeamReconstructionFilter_h 20 #define rtkIterativeConeBeamReconstructionFilter_h 25 #include "rtkConfiguration.h" 56 template <
class TOutputImage,
class ProjectionStackType = TOutputImage>
75 FP_JOSEPHATTENUATED = 3,
77 } ForwardProjectionType;
82 BP_CUDAVOXELBASED = 2,
84 BP_JOSEPHATTENUATED = 5,
106 return m_CurrentForwardProjectionConfiguration;
109 SetBackProjectionFilter(BackProjectionType bptype);
113 return m_CurrentBackProjectionConfiguration;
123 virtual BackProjectionPointerType
124 InstantiateBackProjectionFilter(
int bptype);
128 virtual ForwardProjectionPointerType
129 InstantiateForwardProjectionFilter(
int fwtype);
138 std::default_random_engine m_DefaultRandomEngine = std::default_random_engine{};
143 template <
typename ImageType>
145 !std::is_same<CPUImageType, ImageType>::value &&
146 std::is_same<typename itk::PixelTraits<typename ImageType::PixelType>::ValueType,
float>::value &&
150 template <
typename ImageType>
152 std::is_same<CPUImageType, ImageType>::value ||
153 !std::is_same<typename itk::PixelTraits<typename ImageType::PixelType>::ValueType,
float>::value ||
157 template <
typename ImageType>
159 !std::is_same<CPUImageType, ImageType>::value &&
160 std::is_same<typename itk::PixelTraits<typename ImageType::PixelType>::ValueType,
float>::value &&
162 template <
typename ImageType>
164 std::is_same<CPUImageType, ImageType>::value ||
165 !std::is_same<typename itk::PixelTraits<typename ImageType::PixelType>::ValueType,
float>::value ||
167 template <
typename ImageType>
169 typename std::enable_if<itk::PixelTraits<typename ImageType::PixelType>::Dimension != 1>::type;
170 template <
typename ImageType>
172 typename std::enable_if<itk::PixelTraits<typename ImageType::PixelType>::Dimension == 1>::type;
175 template <
typename ImageType, EnableCudaScalarAndVectorType<ImageType> * =
nullptr>
181 fw = CudaForwardProjectionImageFilter<ImageType, ImageType>::New();
187 template <
typename ImageType, DisableCudaScalarAndVectorType<ImageType> * =
nullptr>
188 ForwardProjectionPointerType
191 itkGenericExceptionMacro(
192 <<
"CudaRayCastBackProjectionImageFilter only available with 3D CudaImage of float or itk::Vector<float,3>.");
197 template <
typename ImageType, EnableVectorType<ImageType> * =
nullptr>
198 ForwardProjectionPointerType
201 itkGenericExceptionMacro(<<
"JosephForwardAttenuatedProjectionImageFilter only available with scalar pixel types.");
206 template <
typename ImageType, DisableVectorType<ImageType> * =
nullptr>
207 ForwardProjectionPointerType
215 template <
typename ImageType, EnableVectorType<ImageType> * =
nullptr>
216 ForwardProjectionPointerType
219 itkGenericExceptionMacro(<<
"JosephForwardAttenuatedProjectionImageFilter only available with scalar pixel types.");
224 template <
typename ImageType, DisableVectorType<ImageType> * =
nullptr>
225 ForwardProjectionPointerType
233 template <
typename ImageType, EnableCudaScalarAndVectorType<ImageType> * =
nullptr>
234 BackProjectionPointerType
239 bp = CudaBackProjectionImageFilter<ImageType>::New();
245 template <
typename ImageType, DisableCudaScalarAndVectorType<ImageType> * =
nullptr>
246 BackProjectionPointerType
249 itkGenericExceptionMacro(
250 <<
"CudaBackProjectionImageFilter only available with 3D CudaImage of float or itk::Vector<float,3>.");
255 template <
typename ImageType, EnableCudaScalarType<ImageType> * =
nullptr>
256 BackProjectionPointerType
261 bp = CudaRayCastBackProjectionImageFilter::New();
267 template <
typename ImageType, DisableCudaScalarType<ImageType> * =
nullptr>
268 BackProjectionPointerType
271 itkGenericExceptionMacro(<<
"CudaRayCastBackProjectionImageFilter only available with 3D CudaImage of float.");
276 template <
typename ImageType, EnableVectorType<ImageType> * =
nullptr>
277 BackProjectionPointerType
280 itkGenericExceptionMacro(<<
"JosephBackAttenuatedProjectionImageFilter only available with scalar pixel types.");
285 template <
typename ImageType, DisableVectorType<ImageType> * =
nullptr>
286 BackProjectionPointerType
294 template <
typename ImageType, EnableVectorType<ImageType> * =
nullptr>
295 BackProjectionPointerType
298 itkGenericExceptionMacro(<<
"JosephBackAttenuatedProjectionImageFilter only available with scalar pixel types.");
303 template <
typename ImageType, DisableVectorType<ImageType> * =
nullptr>
304 BackProjectionPointerType
316 #ifndef ITK_MANUAL_INSTANTIATION 317 # include "rtkIterativeConeBeamReconstructionFilter.hxx" typename BackProjectionFilterType::Pointer BackProjectionPointerType
Base class for forward projection, i.e. accumulation along x-ray lines.
ForwardProjectionPointerType InstantiateJosephForwardAttenuatedProjection()
typename ForwardProjectionFilterType::Pointer ForwardProjectionPointerType
typename std::enable_if< itk::PixelTraits< typename ImageType::PixelType >::Dimension==1 >::type DisableVectorType
ForwardProjectionType m_CurrentForwardProjectionConfiguration
BackProjectionPointerType InstantiateCudaBackProjection()
typename std::enable_if< !std::is_same< CPUImageType, ImageType >::value &&std::is_same< typename itk::PixelTraits< typename ImageType::PixelType >::ValueType, float >::value &&(itk::PixelTraits< typename ImageType::PixelType >::Dimension==1||itk::PixelTraits< typename ImageType::PixelType >::Dimension==2||itk::PixelTraits< typename ImageType::PixelType >::Dimension==3)>::type EnableCudaScalarAndVectorType
typename std::enable_if< !std::is_same< CPUImageType, ImageType >::value &&std::is_same< typename itk::PixelTraits< typename ImageType::PixelType >::ValueType, float >::value &&itk::PixelTraits< typename ImageType::PixelType >::Dimension==1 >::type EnableCudaScalarType
BackProjectionPointerType InstantiateCudaRayCastBackProjection()
ForwardProjectionType GetForwardProjectionFilter()
Mother class for cone beam reconstruction filters which need runtime selection of their forward and b...
BackProjectionType m_CurrentBackProjectionConfiguration
ForwardProjectionPointerType InstantiateCudaForwardProjection()
typename std::enable_if< std::is_same< CPUImageType, ImageType >::value||!std::is_same< typename itk::PixelTraits< typename ImageType::PixelType >::ValueType, float >::value||(itk::PixelTraits< typename ImageType::PixelType >::Dimension !=1 &&itk::PixelTraits< typename ImageType::PixelType >::Dimension !=2 &&itk::PixelTraits< typename ImageType::PixelType >::Dimension !=3)>::type DisableCudaScalarAndVectorType
BackProjectionPointerType InstantiateZengBackProjection()
BackProjectionPointerType InstantiateJosephBackAttenuatedProjection()
typename std::enable_if< itk::PixelTraits< typename ImageType::PixelType >::Dimension !=1 >::type EnableVectorType
typename std::enable_if< std::is_same< CPUImageType, ImageType >::value||!std::is_same< typename itk::PixelTraits< typename ImageType::PixelType >::ValueType, float >::value||itk::PixelTraits< typename ImageType::PixelType >::Dimension !=1 >::type DisableCudaScalarType
ForwardProjectionPointerType InstantiateZengForwardProjection()
BackProjectionType GetBackProjectionFilter()