ITK  5.4.0
Insight Toolkit
itkDiffusionTensor3D.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 itkDiffusionTensor3D_h
19 #define itkDiffusionTensor3D_h
20 
21 // Undefine an eventual DiffusionTensor3D macro
22 #ifdef DiffusionTensor3D
23 # undef DiffusionTensor3D
24 #endif
25 
27 
28 namespace itk
29 {
78 template <typename TComponent>
79 class ITK_TEMPLATE_EXPORT DiffusionTensor3D : public SymmetricSecondRankTensor<TComponent, 3>
80 {
81 public:
85 
87  using typename Superclass::ValueType;
88  using typename Superclass::ComponentType;
89  using typename Superclass::ComponentArrayType;
90 
91  using typename Superclass::AccumulateValueType;
92  using typename Superclass::RealValueType;
93 
94  using typename Superclass::EigenValuesArrayType;
96 
98  DiffusionTensor3D() = default;
99 
101  DiffusionTensor3D(const Superclass & r);
102  DiffusionTensor3D(const ComponentType & r);
107  template <typename TCoordRepB>
109  : SymmetricSecondRankTensor<TComponent, 3>(pa)
110  {}
111 
113  Self &
114  operator=(const Superclass & r);
115 
116  Self &
117  operator=(const ComponentType & r);
118 
119  Self &
120  operator=(const ComponentArrayType r);
121 
123  template <typename TCoordRepB>
124  Self &
126  {
127  // NOTE (this != &pa ) because they are different pointer types
128  // if this templated function is called
129  // ComponentType 'itk::DiffusionTensor3D<double> *'
130  // TCoordRepB 'const DiffusionTensor3D<float> *')
132  return *this;
133  }
150  AccumulateValueType
151  GetTrace() const;
152 
154  RealValueType
155  GetFractionalAnisotropy() const;
156 
158  RealValueType
159  GetRelativeAnisotropy() const;
160 
162  RealValueType
163  GetInnerScalarProduct() const;
164 };
165 
166 
167 template <typename T>
168 inline void
170 {
171  a.swap(b);
172 }
173 
174 } // end namespace itk
176 
177 #ifndef ITK_MANUAL_INSTANTIATION
178 # include "itkDiffusionTensor3D.hxx"
179 #endif
180 
181 #endif
itk::swap
void swap(Array< T > &a, Array< T > &b)
Definition: itkArray.h:242
itk::DiffusionTensor3D
Represent a diffusion tensor as used in DTI images.
Definition: itkDiffusionTensor3D.h:79
itk::SymmetricSecondRankTensor
Represent a symmetric tensor of second rank.
Definition: itkSymmetricSecondRankTensor.h:75
itk::SymmetricSecondRankTensor< TComponent, 3 >::RealValueType
typename NumericTraits< ValueType >::RealType RealValueType
Definition: itkSymmetricSecondRankTensor.h:100
itk::SymmetricSecondRankTensor::operator=
Self & operator=(const SymmetricSecondRankTensor< TCoordRepB, VDimension > &pa)
Definition: itkSymmetricSecondRankTensor.h:132
itkSymmetricSecondRankTensor.h
itk::SymmetricSecondRankTensor< TComponent, 3 >::ComponentArrayType
ComponentType[Self::InternalDimension] ComponentArrayType
Definition: itkSymmetricSecondRankTensor.h:122
itk::SymmetricSecondRankTensor< TComponent, 3 >::ComponentType
TComponent ComponentType
Definition: itkSymmetricSecondRankTensor.h:97
itk::FixedArray
Simulate a standard C array with copy semantics.
Definition: itkFixedArray.h:53
itk::Matrix
A templated class holding a M x N size Matrix.
Definition: itkMatrix.h:52
itkNumericTraitsDiffusionTensor3DPixel.h
itk::SymmetricSecondRankTensor< TComponent, 3 >::AccumulateValueType
typename NumericTraits< ValueType >::RealType AccumulateValueType
Definition: itkSymmetricSecondRankTensor.h:99
itk::DiffusionTensor3D::DiffusionTensor3D
DiffusionTensor3D(const DiffusionTensor3D< TCoordRepB > &pa)
Definition: itkDiffusionTensor3D.h:108
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::DiffusionTensor3D::operator=
Self & operator=(const DiffusionTensor3D< TCoordRepB > &pa)
Definition: itkDiffusionTensor3D.h:125
itk::FixedArray< TComponent, VDimension *(VDimension+1)/2 >::swap
void swap(FixedArray &other)
Definition: itkFixedArray.h:433
AddImageFilter
Definition: itkAddImageFilter.h:81
Superclass
BinaryGeneratorImageFilter< TInputImage1, TInputImage2, TOutputImage > Superclass
Definition: itkAddImageFilter.h:90
itk::FixedArray< TComponent, VDimension *(VDimension+1)/2 >::ValueType
TComponent ValueType
Definition: itkFixedArray.h:63