RTK  2.0.1
Reconstruction Toolkit
rtkADMMTotalVariationConeBeamReconstructionFilter.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  * http://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 rtkADMMTotalVariationConeBeamReconstructionFilter_h
20 #define rtkADMMTotalVariationConeBeamReconstructionFilter_h
21 
22 #include <itkImageToImageFilter.h>
23 #include <itkAddImageFilter.h>
24 #include <itkSubtractImageFilter.h>
25 #include <itkMultiplyImageFilter.h>
26 
34 
35 namespace rtk
36 {
131 template< typename TOutputImage, typename TGradientOutputImage =
133  TOutputImage::ImageDimension > >
135 {
136 public:
137  ITK_DISALLOW_COPY_AND_ASSIGN(ADMMTotalVariationConeBeamReconstructionFilter);
138 
143 
146 
148  itkNewMacro(Self)
149 
150 
152 
153  using ForwardProjectionFilterType = rtk::ForwardProjectionImageFilter< TOutputImage, TOutputImage >;
155  using BackProjectionFilterType = rtk::BackProjectionImageFilter< TOutputImage, TOutputImage >;
159  typename TOutputImage::ValueType,
160  typename TOutputImage::ValueType,
161  TGradientOutputImage>;
163  <TGradientOutputImage, TOutputImage>;
165  <TGradientOutputImage> SoftThresholdTVFilterType;
167  using AddGradientsFilterType = itk::AddImageFilter<TGradientOutputImage>;
169  using MultiplyGradientFilterType = itk::MultiplyImageFilter<TGradientOutputImage>;
170  using SubtractGradientsFilterType = itk::SubtractImageFilter<TGradientOutputImage>;
174 
177 
179  void SetBackProjectionFilter (BackProjectionType _arg) override;
180 
182  itkSetObjectMacro(Geometry, ThreeDCircularProjectionGeometry)
183 
185  void SetBetaForCurrentIteration(int iter);
186 
188  void SetGatingWeights(std::vector<float> weights);
189 
190  itkSetMacro(Alpha, float)
191  itkGetMacro(Alpha, float)
192 
193  itkSetMacro(Beta, float)
194  itkGetMacro(Beta, float)
195 
196  itkSetMacro(AL_iterations, float)
197  itkGetMacro(AL_iterations, float)
198 
199  itkSetMacro(CG_iterations, float)
200  itkGetMacro(CG_iterations, float)
201 
203  itkSetMacro(DisableDisplacedDetectorFilter, bool)
204  itkGetMacro(DisableDisplacedDetectorFilter, bool)
205 
206 protected:
207  ADMMTotalVariationConeBeamReconstructionFilter();
208  ~ADMMTotalVariationConeBeamReconstructionFilter() override = default;
209 
211  void GenerateData() override;
212 
225  typename SoftThresholdTVFilterType::Pointer m_SoftThresholdFilter;
227  typename ForwardProjectionImageFilter<TOutputImage, TOutputImage>::Pointer m_ForwardProjectionFilter;
228  typename BackProjectionImageFilter<TOutputImage, TOutputImage>::Pointer m_BackProjectionFilterForConjugateGradient;
229  typename BackProjectionImageFilter<TOutputImage, TOutputImage>::Pointer m_BackProjectionFilter;
232 
236 #if ITK_VERSION_MAJOR<5
237  void VerifyInputInformation() override {}
238 #else
239  void VerifyInputInformation() const override {}
240 #endif
241 
242 
245  void GenerateInputRequestedRegion() override;
246  void GenerateOutputInformation() override;
248 
251  bool m_IsGated;
252  std::vector<float> m_GatingWeights;
254 
255 private:
256  float m_Alpha;
257  float m_Beta;
258  unsigned int m_AL_iterations;
259  unsigned int m_CG_iterations;
260 
262 };
263 } //namespace ITK
264 
265 
266 #ifndef ITK_MANUAL_INSTANTIATION
267 #include "rtkADMMTotalVariationConeBeamReconstructionFilter.hxx"
268 #endif
269 
270 #endif
void SetGatingWeights(std::vector< float > weights)
Weigting for displaced detectors.
STL namespace.
void SetBackProjectionFilter(BackProjectionType _arg) override
Projection geometry for a source and a 2-D flat panel.
BackProjectionImageFilter< TOutputImage, TOutputImage >::Pointer m_BackProjectionFilter
ForwardProjectionImageFilter< TOutputImage, TOutputImage >::Pointer m_ForwardProjectionFilter
Computes the gradient of an image using forward difference.
void SetForwardProjectionFilter(ForwardProjectionType _arg) override
Implements the operator A used in the conjugate gradient step of ADMM reconstruction with total varia...
Multiplies each (n-1) dimension image by the corresponding element in a vector.
Mother class for cone beam reconstruction filters which need runtime selection of their forward and b...
Computes the Total Variation from a gradient input image (pixels are vectors), soft thresholds it...
Computes the backward differences divergence (adjoint of the forward differences gradient) of the inp...
Implements the ADMM reconstruction with total variation regularization.
Solves AX = B by conjugate gradient.
BackProjectionImageFilter< TOutputImage, TOutputImage >::Pointer m_BackProjectionFilterForConjugateGradient
#define itkSetMacro(name, type)