ITK  5.1.0
Insight Toolkit
itkRecursiveGaussianImageFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
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 #ifndef itkRecursiveGaussianImageFilter_h
19 #define itkRecursiveGaussianImageFilter_h
20 
22 #include "ITKSmoothingExport.h"
23 
24 namespace itk
25 {
31 {
32 public:
38  enum class GaussianOrder : uint8_t
39  {
40  ZeroOrder = 0,
41  FirstOrder = 1,
42  SecondOrder = 2
43  };
44 };
45 // Define how to print enumeration
46 extern ITKSmoothing_EXPORT std::ostream &
47  operator<<(std::ostream & out, const RecursiveGaussianImageFilterEnums::GaussianOrder value);
48 
50 #if !defined(ITK_LEGACY_REMOVE)
51 
52 using OrderEnumType = GaussianOrderEnum;
53 using EnumGaussianOrderType = GaussianOrderEnum;
54 // We need to expose the enum values at the class level
55 // for backwards compatibility
56 static constexpr GaussianOrderEnum ZeroOrder = GaussianOrderEnum::ZeroOrder;
57 static constexpr GaussianOrderEnum FirstOrder = GaussianOrderEnum::FirstOrder;
58 static constexpr GaussianOrderEnum SecondOrder = GaussianOrderEnum::SecondOrder;
59 #endif
60 
98 template <typename TInputImage, typename TOutputImage = TInputImage>
99 class ITK_TEMPLATE_EXPORT RecursiveGaussianImageFilter : public RecursiveSeparableImageFilter<TInputImage, TOutputImage>
100 {
101 public:
102  ITK_DISALLOW_COPY_AND_ASSIGN(RecursiveGaussianImageFilter);
104 
110 
111  using RealType = typename Superclass::RealType;
113 
115  itkNewMacro(Self);
116 
119 
124  itkGetConstMacro(Sigma, ScalarRealType);
125  itkSetMacro(Sigma, ScalarRealType);
127 
129  using OutputImageType = TOutputImage;
130 
131 #if !defined(ITK_LEGACY_REMOVE)
132 
133  using OrderEnumType = GaussianOrderEnum;
134  using EnumGaussianOrderType = GaussianOrderEnum;
135  // We need to expose the enum values at the class level
136  // for backwards compatibility
137  static constexpr GaussianOrderEnum ZeroOrder = GaussianOrderEnum::ZeroOrder;
138  static constexpr GaussianOrderEnum FirstOrder = GaussianOrderEnum::FirstOrder;
139  static constexpr GaussianOrderEnum SecondOrder = GaussianOrderEnum::SecondOrder;
140 #endif
141 
181  itkSetMacro(NormalizeAcrossScale, bool);
182  itkGetConstMacro(NormalizeAcrossScale, bool);
183 
190  itkSetMacro(Order, GaussianOrderEnum);
191  itkGetConstMacro(Order, GaussianOrderEnum);
193 
195  void
196  SetZeroOrder();
197 
199  void
200  SetFirstOrder();
201 
203  void
204  SetSecondOrder();
205 
206 protected:
208  ~RecursiveGaussianImageFilter() override = default;
209  void
210  PrintSelf(std::ostream & os, Indent indent) const override;
211 
216  void
217  SetUp(ScalarRealType spacing) override;
218 
219  /* See superclass for doxygen. This method adds the additional check
220  * that sigma is greater than zero. */
221  void
222  VerifyPreconditions() ITKv5_CONST override;
223 
224 private:
226  void
227  ComputeNCoefficients(ScalarRealType sigmad,
228  ScalarRealType A1,
229  ScalarRealType B1,
230  ScalarRealType W1,
231  ScalarRealType L1,
232  ScalarRealType A2,
233  ScalarRealType B2,
234  ScalarRealType W2,
235  ScalarRealType L2,
236  ScalarRealType & N0,
237  ScalarRealType & N1,
238  ScalarRealType & N2,
239  ScalarRealType & N3,
240  ScalarRealType & SN,
241  ScalarRealType & DN,
242  ScalarRealType & EN);
243 
245  void
246  ComputeDCoefficients(ScalarRealType sigmad,
247  ScalarRealType W1,
248  ScalarRealType L1,
249  ScalarRealType W2,
250  ScalarRealType L2,
251  ScalarRealType & SD,
252  ScalarRealType & DD,
253  ScalarRealType & ED);
254 
257  void
258  ComputeRemainingCoefficients(bool symmetric);
259 
261  ScalarRealType m_Sigma;
262 
264  bool m_NormalizeAcrossScale;
265 
267 };
268 } // end namespace itk
269 
270 #ifndef ITK_MANUAL_INSTANTIATION
271 # include "itkRecursiveGaussianImageFilter.hxx"
272 #endif
273 
274 #endif
itk::RecursiveSeparableImageFilter::ScalarRealType
typename NumericTraits< InputPixelType >::ScalarRealType ScalarRealType
Definition: itkRecursiveSeparableImageFilter.h:76
itk::uint8_t
::uint8_t uint8_t
Definition: itkIntTypes.h:29
GaussianOrder
itk::RecursiveGaussianImageFilterEnums::GaussianOrder::FirstOrder
itk::operator<<
std::ostream & operator<<(std::ostream &os, const Array< TValue > &arr)
Definition: itkArray.h:213
itk::RecursiveGaussianImageFilterEnums::GaussianOrder
GaussianOrder
Definition: itkRecursiveGaussianImageFilter.h:38
itk::GaussianOrderEnum
RecursiveGaussianImageFilterEnums::GaussianOrder GaussianOrderEnum
Definition: itkRecursiveGaussianImageFilter.h:49
itk::SmartPointer< Self >
itk::RecursiveSeparableImageFilter
Base class for recursive convolution with a kernel.
Definition: itkRecursiveSeparableImageFilter.h:51
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::ImageSource
Base class for all process objects that output image data.
Definition: itkImageSource.h:67
itk::RecursiveGaussianImageFilterEnums::GaussianOrder::SecondOrder
itkRecursiveSeparableImageFilter.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkArray.h:26
itk::RecursiveGaussianImageFilterEnums::GaussianOrder::ZeroOrder
itk::ProcessObject
The base class for all process objects (source, filters, mappers) in the Insight data processing pipe...
Definition: itkProcessObject.h:138
itk::RecursiveGaussianImageFilter
Base class for computing IIR convolution with an approximation of a Gaussian kernel.
Definition: itkRecursiveGaussianImageFilter.h:99
itk::RecursiveGaussianImageFilterEnums
Contains all enum classes used by RecursiveGaussianImageFilter class.
Definition: itkRecursiveGaussianImageFilter.h:30
itk::RecursiveSeparableImageFilter::RealType
typename NumericTraits< InputPixelType >::RealType RealType
Definition: itkRecursiveSeparableImageFilter.h:75
itk::ImageSource::OutputImageType
TOutputImage OutputImageType
Definition: itkImageSource.h:90