RTK  2.6.0
Reconstruction Toolkit
rtkDeconstructImageFilter.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 rtkDeconstructImageFilter_h
20 #define rtkDeconstructImageFilter_h
21 
22 // Includes
23 #include <itkImageToImageFilter.h>
24 #include <itkMacro.h>
26 
29 
30 namespace rtk
31 {
32 
127 template <class TImage>
128 class ITK_TEMPLATE_EXPORT DeconstructImageFilter : public itk::ImageToImageFilter<TImage, TImage>
129 {
130 public:
131  ITK_DISALLOW_COPY_AND_MOVE(DeconstructImageFilter);
133 
139 
141  itkNewMacro(Self);
142 
144  itkOverrideGetNameOfClassMacro(DeconstructImageFilter);
145 
147  static constexpr unsigned int ImageDimension = TImage::ImageDimension;
148 
150  using InputImageType = typename Superclass::InputImageType;
151  using OutputImageType = typename Superclass::OutputImageType;
152  using InputImagePointer = typename Superclass::InputImagePointer;
153  using OutputImagePointer = typename Superclass::OutputImagePointer;
154  using InputImageConstPointer = typename Superclass::InputImageConstPointer;
155  using PixelType = typename TImage::PixelType;
156  using InternalPixelType = typename TImage::InternalPixelType;
157 
162 
164  virtual void
165  SetNumberOfLevels(unsigned int levels)
166  {
167  this->m_NumberOfLevels = levels;
168  this->ModifyInputOutputStorage();
169  }
171 
173  virtual unsigned int
175  {
176  return this->m_NumberOfLevels;
177  }
178 
183  void
184  GenerateOutputInformation() override;
185 
186  void
187  GenerateInputRequestedRegion() override;
188 
190  itkGetMacro(Order, unsigned int);
191  itkSetMacro(Order, unsigned int);
193 
201  typename InputImageType::SizeType *
203  {
204  return m_Sizes.data();
205  }
206 
214  typename InputImageType::IndexType *
216  {
217  return m_Indices.data();
218  }
219 
220 protected:
222  ~DeconstructImageFilter() override = default;
223  void
224  PrintSelf(std::ostream & os, itk::Indent indent) const override;
225 
229  void
230  ModifyInputOutputStorage();
231 
233  void
234  GenerateData() override;
235 
237  virtual unsigned int
238  CalculateNumberOfOutputs();
239 
241  void
242  GeneratePassVectors();
243 
244 private:
245  unsigned int m_NumberOfLevels{ 5 }; // Holds the number of deconstruction levels
246  unsigned int m_Order{ 3 }; // Holds the order of the wavelet filters
247  bool m_PipelineConstructed{
248  false
249  }; // Filters instantiated by GenerateOutputInformation() should be instantiated only once
250 
251  typename std::vector<typename InputImageType::SizeType> m_Sizes; // Holds the size of sub-images at each level
252  typename std::vector<typename InputImageType::IndexType> m_Indices; // Holds the size of sub-images at each level
253  typename std::vector<typename PadFilterType::Pointer> m_PadFilters; // Holds a vector of padding filters
254  typename std::vector<typename ConvolutionFilterType::Pointer>
255  m_ConvolutionFilters; // Holds a vector of convolution filters
256  typename std::vector<typename DownsampleImageFilterType::Pointer>
257  m_DownsampleFilters; // Holds a vector of downsample filters
258  // Holds a vector of PassVectors. A PassVector has Dimension components, each one storing either "High" or "Low"
259  typename std::vector<typename ConvolutionFilterType::PassVector> m_PassVectors;
260 };
261 
262 } // namespace rtk
263 
264 // Include CXX
265 #ifndef rtk_MANUAL_INSTANTIATION
266 # include "rtkDeconstructImageFilter.hxx"
267 #endif
268 
269 #endif
typename OutputImageType::Pointer OutputImagePointer
std::vector< typename ConvolutionFilterType::PassVector > m_PassVectors
virtual void SetNumberOfLevels(unsigned int levels)
typename Superclass::InputImagePointer InputImagePointer
typename Superclass::InputImageConstPointer InputImageConstPointer
std::vector< typename InputImageType::IndexType > m_Indices
std::vector< typename ConvolutionFilterType::Pointer > m_ConvolutionFilters
std::vector< typename PadFilterType::Pointer > m_PadFilters
#define itkSetMacro(name, type)
InputImageType::IndexType * GetIndices()
TOutputImage OutputImageType
typename TImage::InternalPixelType InternalPixelType
typename TImage::PixelType PixelType
virtual unsigned int GetNumberOfLevels()
std::vector< typename DownsampleImageFilterType::Pointer > m_DownsampleFilters
InputImageType::SizeType * GetSizes()
typename Superclass::InputImageType InputImageType
Creates a Daubechies wavelets kernel image with the requested attributes (order, type, pass along each dimension)
An image filter that deconstructs an image using Daubechies wavelets.
std::vector< typename InputImageType::SizeType > m_Sizes
Downsamples an image by a factor in each dimension.