RTK  2.7.0
Reconstruction Toolkit
rtkZengBackProjectionImageFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright RTK Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * https://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 
19 #ifndef rtkZengBackProjectionImageFilter_h
20 #define rtkZengBackProjectionImageFilter_h
21 
22 #include "rtkConfiguration.h"
24 #include "rtkMacro.h"
25 #include <itkPixelTraits.h>
26 
27 #include <itkMultiplyImageFilter.h>
28 #include <itkAddImageFilter.h>
29 #include <itkDiscreteGaussianImageFilter.h>
30 #include <itkPasteImageFilter.h>
31 #include <itkResampleImageFilter.h>
32 #include <itkVector.h>
33 #include <itkCenteredEuler3DTransform.h>
34 #include <itkChangeInformationImageFilter.h>
35 #include <itkExtractImageFilter.h>
36 #include <itkRegionOfInterestImageFilter.h>
37 #include <itkConstantBoundaryCondition.h>
38 #include <itkUnaryGeneratorImageFilter.h>
39 
40 #include "rtkConstantImageSource.h"
41 
42 #include <itkVectorImage.h>
43 namespace rtk
44 {
45 
112 template <class TInputImage, class TOutputImage>
113 class ITK_TEMPLATE_EXPORT ZengBackProjectionImageFilter : public BackProjectionImageFilter<TInputImage, TOutputImage>
114 {
115 public:
117  using VectorType = itk::Vector<double, 3>;
118  using InputPixelType = typename TInputImage::PixelType;
119  using OutputPixelType = typename TOutputImage::PixelType;
120  using OutputImageRegionType = typename TOutputImage::RegionType;
121  using InputCPUImageType = itk::Image<InputPixelType, 3>;
122  using OuputCPUImageType = itk::Image<OutputPixelType, 3>;
123  using PointType = typename OuputCPUImageType::PointType;
124 
127  using Pointer = itk::SmartPointer<Self>;
128  using ConstPointer = itk::SmartPointer<const Self>;
129  using AddImageFilterType = itk::AddImageFilter<InputCPUImageType, InputCPUImageType>;
130  using AddImageFilterPointerType = typename AddImageFilterType::Pointer;
131  using PasteImageFilterType = itk::PasteImageFilter<InputCPUImageType, OuputCPUImageType>;
132  using PasteImageFilterPointerType = typename PasteImageFilterType::Pointer;
133  using DiscreteGaussianFilterType = itk::DiscreteGaussianImageFilter<OuputCPUImageType, OuputCPUImageType>;
134  using DiscreteGaussianFilterPointeurType = typename DiscreteGaussianFilterType::Pointer;
135  using ResampleImageFilterType = itk::ResampleImageFilter<InputCPUImageType, InputCPUImageType>;
136  using ResampleImageFilterPointerType = typename ResampleImageFilterType::Pointer;
137  using TransformType = itk::CenteredEuler3DTransform<double>;
138  using TransformPointerType = typename TransformType::Pointer;
139  using ChangeInformationFilterType = itk::ChangeInformationImageFilter<OuputCPUImageType>;
140  using ChangeInformationPointerType = typename ChangeInformationFilterType::Pointer;
141  using MultiplyImageFilterType = itk::MultiplyImageFilter<InputCPUImageType, InputCPUImageType>;
142  using MultiplyImageFilterPointerType = typename MultiplyImageFilterType::Pointer;
145  using ExtractImageFilterType = itk::ExtractImageFilter<OuputCPUImageType, OuputCPUImageType>;
146  using ExtractImageFilterPointerType = typename ExtractImageFilterType::Pointer;
147  using RegionOfInterestFilterType = itk::RegionOfInterestImageFilter<OuputCPUImageType, OuputCPUImageType>;
148  using RegionOfInterestPointerType = typename RegionOfInterestFilterType::Pointer;
149  using CustomUnaryFilterType = itk::UnaryGeneratorImageFilter<OuputCPUImageType, OuputCPUImageType>;
150  using CustomUnaryFilterPointerType = typename CustomUnaryFilterType::Pointer;
151 
153  static constexpr unsigned int InputImageDimension = TInputImage::ImageDimension;
154 
156  using BoundaryCondition = itk::ConstantBoundaryCondition<OuputCPUImageType>;
157 
159  itkNewMacro(Self);
160 
162  itkOverrideGetNameOfClassMacro(ZengBackProjectionImageFilter);
163 
165  itkGetMacro(SigmaZero, double);
166  itkSetMacro(SigmaZero, double);
168 
170  itkGetMacro(Alpha, double);
171  itkSetMacro(Alpha, double);
173 
174 
175 protected:
177  ~ZengBackProjectionImageFilter() override = default;
178 
180  void
181  GenerateInputRequestedRegion() override;
182 
183  void
184  GenerateOutputInformation() override;
185 
186  void
187  GenerateData() override;
188 
191  void
192  VerifyInputInformation() const override;
193 
209 
210 private:
211  ZengBackProjectionImageFilter(const Self &) = delete; // purposely not implemented
212  void
213  operator=(const Self &) = delete; // purposely not implemented
214 
215  double m_SigmaZero{ 1.5417233052142099 };
216  double m_Alpha{ 0.016241189545787734 };
217  VectorType m_VectorOrthogonalDetector{ 0. };
218  PointType m_centerVolume{ 0 };
219 };
220 
221 } // end namespace rtk
222 
223 #ifndef ITK_MANUAL_INSTANTIATION
224 # include "rtkZengBackProjectionImageFilter.hxx"
225 #endif
226 
227 #endif
typename ExtractImageFilterType::Pointer ExtractImageFilterPointerType
ConstantVolumeSourcePointerType m_ConstantVolumeSource
itk::PasteImageFilter< InputCPUImageType, OuputCPUImageType > PasteImageFilterType
typename OuputCPUImageType::PointType PointType
typename PasteImageFilterType::Pointer PasteImageFilterPointerType
Generate an n-dimensional image with constant pixel values.
itk::AddImageFilter< InputCPUImageType, InputCPUImageType > AddImageFilterType
typename CustomUnaryFilterType::Pointer CustomUnaryFilterPointerType
itk::ResampleImageFilter< InputCPUImageType, InputCPUImageType > ResampleImageFilterType
typename TInputImage::PixelType InputPixelType
MultiplyImageFilterPointerType m_AttenuationMapMultiplyImageFilter
typename TOutputImage::PixelType OutputPixelType
itk::ConstantBoundaryCondition< OuputCPUImageType > BoundaryCondition
#define itkSetMacro(name, type)
itk::SmartPointer< const Self > ConstPointer
typename ConstantVolumeSourceType::Pointer ConstantVolumeSourcePointerType
typename RegionOfInterestFilterType::Pointer RegionOfInterestPointerType
itk::ChangeInformationImageFilter< OuputCPUImageType > ChangeInformationFilterType
DiscreteGaussianFilterPointeurType m_DiscreteGaussianFilter
typename MultiplyImageFilterType::Pointer MultiplyImageFilterPointerType
ChangeInformationPointerType m_AttenuationMapChangeInformation
itk::MultiplyImageFilter< InputCPUImageType, InputCPUImageType > MultiplyImageFilterType
itk::RegionOfInterestImageFilter< OuputCPUImageType, OuputCPUImageType > RegionOfInterestFilterType
itk::ExtractImageFilter< OuputCPUImageType, OuputCPUImageType > ExtractImageFilterType
typename ResampleImageFilterType::Pointer ResampleImageFilterPointerType
RegionOfInterestPointerType m_AttenuationMapRegionOfInterest
itk::SmartPointer< Self > Pointer
itk::DiscreteGaussianImageFilter< OuputCPUImageType, OuputCPUImageType > DiscreteGaussianFilterType
itk::Image< InputPixelType, 3 > InputCPUImageType
typename TOutputImage::RegionType OutputImageRegionType
itk::ImageToImageFilter< TInputImage, TOutputImage > Superclass
typename DiscreteGaussianFilterType::Pointer DiscreteGaussianFilterPointeurType
MultiplyImageFilterPointerType m_MultiplyImageFilter
ResampleImageFilterPointerType m_ResampleImageFilter
itk::CenteredEuler3DTransform< double > TransformType
itk::UnaryGeneratorImageFilter< OuputCPUImageType, OuputCPUImageType > CustomUnaryFilterType
typename ChangeInformationFilterType::Pointer ChangeInformationPointerType
itk::Image< OutputPixelType, 3 > OuputCPUImageType
ResampleImageFilterPointerType m_AttenuationMapResampleImageFilter
typename TransformType::Pointer TransformPointerType
typename AddImageFilterType::Pointer AddImageFilterPointerType