ITK  5.3.0
Insight Toolkit
itkSymmetricEigenAnalysisImageFilter.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  * 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 #ifndef itkSymmetricEigenAnalysisImageFilter_h
19 #define itkSymmetricEigenAnalysisImageFilter_h
20 
23 #include "ITKImageIntensityExport.h"
24 
25 namespace itk
26 {
27 // This functor class invokes the computation of Eigen Analysis for
28 // every pixel. The input pixel type must provide the API for the [][]
29 // operator, while the output pixel type must provide the API for the
30 // [] operator. Input pixel matrices should be symmetric.
31 //
32 // The default operation is to order eigen values in ascending order.
33 // You may also use OrderEigenValuesBy( ) to order eigen values by
34 // magnitude as is common with use of tensors in vessel extraction.
35 namespace Functor
36 {
37 
38 #if !defined(ITK_LEGACY_REMOVE)
39 using OrderTypeOfEigenValue = EigenValueOrderEnum;
40 #endif
41 
42 template <typename TInput, typename TOutput>
44 {
45 public:
46  using RealValueType = typename TInput::RealValueType;
50  bool
52  {
53  return true;
54  }
55 
57 
58  inline TOutput
59  operator()(const TInput & x) const
60  {
61  TOutput eigenValues;
62 
63  m_Calculator.ComputeEigenValues(x, eigenValues);
64  return eigenValues;
65  }
66 
68  void
69  SetDimension(unsigned int n)
70  {
72  }
73  unsigned int
74  GetDimension() const
75  {
76  return m_Calculator.GetDimension();
77  }
80 #if !defined(ITK_LEGACY_REMOVE)
81 
82  using EigenValueOrderType = EigenValueOrderEnum;
83 #endif
84 #if !defined(ITK_LEGACY_REMOVE)
85  // We need to expose the enum values at the class level
86  // for backwards compatibility
87  static constexpr EigenValueOrderEnum OrderByValue = EigenValueOrderEnum::OrderByValue;
88  static constexpr EigenValueOrderEnum OrderByMagnitude = EigenValueOrderEnum::OrderByMagnitude;
89  static constexpr EigenValueOrderEnum DoNotOrder = EigenValueOrderEnum::DoNotOrder;
90 #endif
91 
94  void
96  {
98  {
100  }
101  else if (order == EigenValueOrderEnum::DoNotOrder)
102  {
104  }
105  }
106  void
108  {
109  this->OrderEigenValuesBy(order);
110  }
113  {
115  {
117  }
119  {
121  }
123  }
127 private:
129 };
130 
131 template <unsigned int TMatrixDimension, typename TInput, typename TOutput>
133 {
134 public:
135  using RealValueType = typename TInput::RealValueType;
139  bool
141  {
142  return true;
143  }
144 
146 
147  inline TOutput
148  operator()(const TInput & x) const
149  {
150  TOutput eigenValues;
151 
152  m_Calculator.ComputeEigenValues(x, eigenValues);
153  return eigenValues;
154  }
155 
157  unsigned int
158  GetDimension() const
159  {
160  return m_Calculator.GetDimension();
161  }
162 
163 #if !defined(ITK_LEGACY_REMOVE)
164 
165  using EigenValueOrderType = EigenValueOrderEnum;
166 #endif
167 #if !defined(ITK_LEGACY_REMOVE)
168  // We need to expose the enum values at the class level
169  // for backwards compatibility
170  static constexpr EigenValueOrderEnum OrderByValue = EigenValueOrderEnum::OrderByValue;
171  static constexpr EigenValueOrderEnum OrderByMagnitude = EigenValueOrderEnum::OrderByMagnitude;
172  static constexpr EigenValueOrderEnum DoNotOrder = EigenValueOrderEnum::DoNotOrder;
173 #endif
174 
177  void
179  {
181  {
183  }
184  else if (order == EigenValueOrderEnum::DoNotOrder)
185  {
187  }
188  }
191 private:
193 };
194 
196 extern ITKImageIntensity_EXPORT std::ostream &
197  operator<<(std::ostream & out, const EigenValueOrderEnum value);
198 
199 } // end namespace Functor
200 
219 template <typename TInputImage, typename TOutputImage = TInputImage>
221  : public UnaryFunctorImageFilter<
222  TInputImage,
223  TOutputImage,
224  Functor::SymmetricEigenAnalysisFunction<typename TInputImage::PixelType, typename TOutputImage::PixelType>>
225 {
226 public:
227  ITK_DISALLOW_COPY_AND_MOVE(SymmetricEigenAnalysisImageFilter);
228 
232  TInputImage,
233  TOutputImage,
235 
238 
239  using typename Superclass::OutputImageType;
240  using OutputPixelType = typename TOutputImage::PixelType;
241  using InputPixelType = typename TInputImage::PixelType;
242  using InputValueType = typename InputPixelType::ValueType;
243  using typename Superclass::FunctorType;
244 
245 #if !defined(ITK_LEGACY_REMOVE)
246 
247  using EigenValueOrderType = EigenValueOrderEnum;
248 #endif
249 
252  void
254  {
255  this->GetFunctor().OrderEigenValuesBy(order);
256  }
257  void
259  {
260  this->OrderEigenValuesBy(order);
261  }
264  {
265  return this->GetFunctor().GetOrderEigenValuesBy();
266  }
271 
273  itkNewMacro(Self);
274 
276  void
277  PrintSelf(std::ostream & os, Indent indent) const override
278  {
279  this->Superclass::PrintSelf(os, indent);
280  }
281 
284  void
285  SetDimension(unsigned int p)
286  {
287  this->GetFunctor().SetDimension(p);
288  }
289  unsigned int
290  GetDimension() const
291  {
292  return this->GetFunctor().GetDimension();
293  }
296 #ifdef ITK_USE_CONCEPT_CHECKING
297  // Begin concept checking
298  itkConceptMacro(InputHasNumericTraitsCheck, (Concept::HasNumericTraits<InputValueType>));
299  // End concept checking
300 #endif
301 
302 protected:
303  SymmetricEigenAnalysisImageFilter() { this->SetDimension(TInputImage::ImageDimension); }
304  ~SymmetricEigenAnalysisImageFilter() override = default;
305 };
306 
325 template <unsigned int TMatrixDimension, typename TInputImage, typename TOutputImage = TInputImage>
327  : public UnaryFunctorImageFilter<
328  TInputImage,
329  TOutputImage,
330  Functor::SymmetricEigenAnalysisFixedDimensionFunction<TMatrixDimension,
331  typename TInputImage::PixelType,
332  typename TOutputImage::PixelType>>
333 {
334 public:
335  ITK_DISALLOW_COPY_AND_MOVE(SymmetricEigenAnalysisFixedDimensionImageFilter);
336 
339  using Superclass =
340  UnaryFunctorImageFilter<TInputImage,
341  TOutputImage,
343  typename TInputImage::PixelType,
344  typename TOutputImage::PixelType>>;
345 
348 
349  using typename Superclass::OutputImageType;
350  using OutputPixelType = typename TOutputImage::PixelType;
351  using InputPixelType = typename TInputImage::PixelType;
352  using InputValueType = typename InputPixelType::ValueType;
353  using typename Superclass::FunctorType;
354 
357 
360  void
362  {
363  this->GetFunctor().OrderEigenValuesBy(order);
364  }
365 
368 
370  itkNewMacro(Self);
371 
373  void
374  PrintSelf(std::ostream & os, Indent indent) const override
375  {
376  this->Superclass::PrintSelf(os, indent);
377  }
378 
380  unsigned int
381  GetDimension() const
382  {
383  return this->GetFunctor().GetDimension();
384  }
385 
386 #ifdef ITK_USE_CONCEPT_CHECKING
387  // Begin concept checking
388  itkConceptMacro(InputHasNumericTraitsCheck, (Concept::HasNumericTraits<InputValueType>));
389  // End concept checking
390 #endif
391 
392 protected:
395 };
396 } // end namespace itk
397 
398 #endif
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::m_Calculator
CalculatorType m_Calculator
Definition: itkSymmetricEigenAnalysisImageFilter.h:192
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::GetDimension
unsigned int GetDimension() const
Definition: itkSymmetricEigenAnalysisImageFilter.h:158
itk::SymmetricEigenAnalysisImageFilter
Computes the eigen-values of every input symmetric matrix pixel.
Definition: itkSymmetricEigenAnalysisImageFilter.h:220
itkUnaryFunctorImageFilter.h
itk::SymmetricEigenAnalysis::SetDimension
void SetDimension(const unsigned int n)
Definition: itkSymmetricEigenAnalysis.h:331
itk::Concept::HasNumericTraits
Definition: itkConceptChecking.h:714
itk::SymmetricEigenAnalysisImageFilter::GetDimension
unsigned int GetDimension() const
Definition: itkSymmetricEigenAnalysisImageFilter.h:290
itk::Functor::SymmetricEigenAnalysisFunction
Definition: itkSymmetricEigenAnalysisImageFilter.h:43
itk::Functor::SymmetricEigenAnalysisFunction::operator()
TOutput operator()(const TInput &x) const
Definition: itkSymmetricEigenAnalysisImageFilter.h:59
itk::SymmetricEigenAnalysisEnums::EigenValueOrder::OrderByValue
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction
Definition: itkSymmetricEigenAnalysisImageFilter.h:132
itk::UnaryFunctorImageFilter
Implements pixel-wise generic operation on one image.
Definition: itkUnaryFunctorImageFilter.h:50
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::operator==
bool operator==(const SymmetricEigenAnalysisFixedDimensionFunction &) const
Definition: itkSymmetricEigenAnalysisImageFilter.h:140
itk::SymmetricEigenAnalysisImageFilter::OrderEigenValuesBy
void OrderEigenValuesBy(EigenValueOrderEnum order)
Definition: itkSymmetricEigenAnalysisImageFilter.h:253
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::~SymmetricEigenAnalysisFixedDimensionImageFilter
~SymmetricEigenAnalysisFixedDimensionImageFilter() override=default
itk::Functor::SymmetricEigenAnalysisFunction::SetDimension
void SetDimension(unsigned int n)
Definition: itkSymmetricEigenAnalysisImageFilter.h:69
itk::SymmetricEigenAnalysisImageFilter::InputValueType
typename InputPixelType::ValueType InputValueType
Definition: itkSymmetricEigenAnalysisImageFilter.h:242
itk::Functor::SymmetricEigenAnalysisFunction::OrderEigenValuesBy
void OrderEigenValuesBy(EigenValueOrderEnum order)
Definition: itkSymmetricEigenAnalysisImageFilter.h:95
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::OrderEigenValuesBy
void OrderEigenValuesBy(EigenValueOrderEnum order)
Definition: itkSymmetricEigenAnalysisImageFilter.h:361
itk::SymmetricEigenAnalysisEnums::EigenValueOrder::OrderByMagnitude
itk::Functor::SymmetricEigenAnalysisFunction::SymmetricEigenAnalysisFunction
SymmetricEigenAnalysisFunction()=default
itk::SymmetricEigenAnalysisImageFilter::SymmetricEigenAnalysisImageFilter
SymmetricEigenAnalysisImageFilter()
Definition: itkSymmetricEigenAnalysisImageFilter.h:303
itk::SymmetricEigenAnalysisFixedDimension::SetOrderEigenValues
void SetOrderEigenValues(const bool b)
Definition: itkSymmetricEigenAnalysis.h:826
itk::SmartPointer< Self >
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::GetDimension
unsigned int GetDimension() const
Definition: itkSymmetricEigenAnalysisImageFilter.h:381
itkSymmetricEigenAnalysis.h
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::SymmetricEigenAnalysisImageFilter::OutputPixelType
typename TOutputImage::PixelType OutputPixelType
Definition: itkSymmetricEigenAnalysisImageFilter.h:240
itk::SymmetricEigenAnalysis::GetOrderEigenValues
bool GetOrderEigenValues() const
Definition: itkSymmetricEigenAnalysis.h:300
itk::Functor::SymmetricEigenAnalysisFunction::GetDimension
unsigned int GetDimension() const
Definition: itkSymmetricEigenAnalysisImageFilter.h:74
itk::SymmetricEigenAnalysis::ComputeEigenValues
unsigned int ComputeEigenValues(const TMatrix &A, TVector &D) const
itk::EigenValueOrderEnum
SymmetricEigenAnalysisEnums::EigenValueOrder EigenValueOrderEnum
Definition: itkSymmetricEigenAnalysis.h:142
itk::SymmetricEigenAnalysisImageFilter::GetOrderEigenValuesBy
EigenValueOrderEnum GetOrderEigenValuesBy() const
Definition: itkSymmetricEigenAnalysisImageFilter.h:263
itk::ImageSource
Base class for all process objects that output image data.
Definition: itkImageSource.h:67
itk::UnaryFunctorImageFilter::OutputImageType
TOutputImage OutputImageType
Definition: itkUnaryFunctorImageFilter.h:75
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::OrderEigenValuesBy
void OrderEigenValuesBy(EigenValueOrderEnum order)
Definition: itkSymmetricEigenAnalysisImageFilter.h:178
itk::SymmetricEigenAnalysisImageFilter::InputPixelType
typename TInputImage::PixelType InputPixelType
Definition: itkSymmetricEigenAnalysisImageFilter.h:241
itk::InPlaceImageFilter::PrintSelf
void PrintSelf(std::ostream &os, Indent indent) const override
itk::SymmetricEigenAnalysis::GetDimension
unsigned int GetDimension() const
Definition: itkSymmetricEigenAnalysis.h:344
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::OutputPixelType
typename TOutputImage::PixelType OutputPixelType
Definition: itkSymmetricEigenAnalysisImageFilter.h:350
itk::SymmetricEigenAnalysisFixedDimensionImageFilter
Computes the eigen-values of every input symmetric matrix pixel.
Definition: itkSymmetricEigenAnalysisImageFilter.h:326
itk::SymmetricEigenAnalysisFixedDimension::SetOrderEigenMagnitudes
void SetOrderEigenMagnitudes(const bool b)
Definition: itkSymmetricEigenAnalysis.h:843
itk::SymmetricEigenAnalysis::SetOrderEigenMagnitudes
void SetOrderEigenMagnitudes(const bool b)
Definition: itkSymmetricEigenAnalysis.h:309
itk::SymmetricEigenAnalysisEnums::EigenValueOrder::DoNotOrder
itk::Functor::SymmetricEigenAnalysisFunction::operator==
bool operator==(const SymmetricEigenAnalysisFunction &) const
Definition: itkSymmetricEigenAnalysisImageFilter.h:51
itk::Functor::SymmetricEigenAnalysisFunction::~SymmetricEigenAnalysisFunction
~SymmetricEigenAnalysisFunction()=default
itk::UnaryFunctorImageFilter::FunctorType
TFunction FunctorType
Definition: itkUnaryFunctorImageFilter.h:68
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::SymmetricEigenAnalysisFixedDimensionFunction
SymmetricEigenAnalysisFixedDimensionFunction()=default
itk::Functor::operator<<
ITKImageIntensity_EXPORT std::ostream & operator<<(std::ostream &out, const EigenValueOrderEnum value)
itk::SymmetricEigenAnalysisFixedDimension::GetDimension
constexpr unsigned int GetDimension() const
Definition: itkSymmetricEigenAnalysis.h:865
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::InputValueType
typename InputPixelType::ValueType InputValueType
Definition: itkSymmetricEigenAnalysisImageFilter.h:352
itk::SymmetricEigenAnalysisImageFilter::~SymmetricEigenAnalysisImageFilter
~SymmetricEigenAnalysisImageFilter() override=default
itk::SymmetricEigenAnalysisFixedDimension< TMatrixDimension, TInputImage::PixelType, TOutputImage::PixelType >
itk::SymmetricEigenAnalysis::SetOrderEigenValues
void SetOrderEigenValues(const bool b)
Definition: itkSymmetricEigenAnalysis.h:286
itkConceptMacro
#define itkConceptMacro(name, concept)
Definition: itkConceptChecking.h:65
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::SymmetricEigenAnalysisFixedDimensionImageFilter
SymmetricEigenAnalysisFixedDimensionImageFilter()=default
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION
ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION(SymmetricEigenAnalysisFixedDimensionFunction)
itk::ProcessObject
The base class for all process objects (source, filters, mappers) in the Insight data processing pipe...
Definition: itkProcessObject.h:139
itk::SymmetricEigenAnalysisImageFilter::PrintSelf
void PrintSelf(std::ostream &os, Indent indent) const override
Definition: itkSymmetricEigenAnalysisImageFilter.h:277
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::InputPixelType
typename TInputImage::PixelType InputPixelType
Definition: itkSymmetricEigenAnalysisImageFilter.h:351
itk::UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::SymmetricEigenAnalysisFunction< TInputImage::PixelType, TOutputImage::PixelType > >::GetFunctor
FunctorType & GetFunctor()
Definition: itkUnaryFunctorImageFilter.h:85
itk::Functor::SymmetricEigenAnalysisFunction::SetOrderEigenValuesBy
void SetOrderEigenValuesBy(EigenValueOrderEnum order)
Definition: itkSymmetricEigenAnalysisImageFilter.h:107
itk::Functor::SymmetricEigenAnalysisFunction::GetOrderEigenValuesBy
EigenValueOrderEnum GetOrderEigenValuesBy() const
Definition: itkSymmetricEigenAnalysisImageFilter.h:112
itk::SymmetricEigenAnalysisImageFilter::SetOrderEigenValuesBy
void SetOrderEigenValuesBy(EigenValueOrderEnum order)
Definition: itkSymmetricEigenAnalysisImageFilter.h:258
AddImageFilter
Definition: itkAddImageFilter.h:80
itk::Functor::SymmetricEigenAnalysisFunction::m_Calculator
CalculatorType m_Calculator
Definition: itkSymmetricEigenAnalysisImageFilter.h:128
itk::SymmetricEigenAnalysisFixedDimensionImageFilter::PrintSelf
void PrintSelf(std::ostream &os, Indent indent) const override
Definition: itkSymmetricEigenAnalysisImageFilter.h:374
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::~SymmetricEigenAnalysisFixedDimensionFunction
~SymmetricEigenAnalysisFixedDimensionFunction()=default
itk::SymmetricEigenAnalysis::GetOrderEigenMagnitudes
bool GetOrderEigenMagnitudes() const
Definition: itkSymmetricEigenAnalysis.h:323
itk::SymmetricEigenAnalysisFixedDimension::ComputeEigenValues
unsigned int ComputeEigenValues(const TMatrix &A, TVector &EigenValues) const
Definition: itkSymmetricEigenAnalysis.h:794
itk::Functor::SymmetricEigenAnalysisFunction::ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION
ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION(SymmetricEigenAnalysisFunction)
itk::SymmetricEigenAnalysisEnums::EigenValueOrder
EigenValueOrder
Definition: itkSymmetricEigenAnalysis.h:131
itk::SymmetricEigenAnalysisImageFilter::SetDimension
void SetDimension(unsigned int p)
Definition: itkSymmetricEigenAnalysisImageFilter.h:285
itk::SymmetricEigenAnalysis< TInputImage::PixelType, TOutputImage::PixelType >
itk::Functor::SymmetricEigenAnalysisFunction< TInputImage::PixelType, TOutputImage::PixelType >::RealValueType
typename TInputImage::PixelType ::RealValueType RealValueType
Definition: itkSymmetricEigenAnalysisImageFilter.h:46
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction::operator()
TOutput operator()(const TInput &x) const
Definition: itkSymmetricEigenAnalysisImageFilter.h:148
itk::Functor::SymmetricEigenAnalysisFixedDimensionFunction< TMatrixDimension, TInputImage::PixelType, TOutputImage::PixelType >::RealValueType
typename TInputImage::PixelType ::RealValueType RealValueType
Definition: itkSymmetricEigenAnalysisImageFilter.h:135