14#ifndef itkDiffusionTensor3DZeroCorrection_h
15#define itkDiffusionTensor3DZeroCorrection_h
17#include "itkUnaryFunctorImageFilter.h"
47template <
class TInput,
class TOutput>
57 inline DiffusionTensor3D<TOutput>
operator()(
const DiffusionTensor3D<TInput>& A)
59 DiffusionTensor3D<TOutput> tensor;
60 Matrix<double, 3, 3> mat;
61 Matrix<double, 3, 3> matcorrect;
65 tensorDouble.ComputeEigenAnalysis(eigenValues, eigenVectors);
66 for (
int i = 0; i < 3; i++)
70 eigenVectors = eigenVectors.GetTranspose();
71 matcorrect = eigenVectors * mat * eigenVectors.GetInverse();
73 for (
int i = 0; i < 6; i++)
75 tensor[i] = (TOutput)tensorDouble[i];
82template <
class TInputImage,
class TOutputImage>
84 :
public UnaryFunctorImageFilter<TInputImage,
86 Functor::DiffusionTensor3DZero<typename TInputImage::PixelType::ComponentType, typename TOutputImage::PixelType::ComponentType>>
91 typedef UnaryFunctorImageFilter<TInputImage, TOutputImage, Functor::DiffusionTensor3DZero<typename TInputImage::PixelType, typename TOutputImage::PixelType>>
Superclass;
105#ifdef ITK_USE_CONCEPT_CHECKING
107 itkConceptMacro(InputTensorTypeCheck, (Concept::SameType<DiffusionTensor3D<typename TInputImage::PixelType::ComponentType>,
typename TInputImage::PixelType>));
108 itkConceptMacro(OutputTensorTypeCheck, (Concept::SameType<DiffusionTensor3D<typename TOutputImage::PixelType::ComponentType>,
typename TOutputImage::PixelType>));
void SetTensorFromMatrix(Matrix< C, 3, 3 > matrix)
void operator=(const Self &)=delete
DiffusionTensor3DZeroCorrectionFilter Self
DiffusionTensor3DZeroCorrectionFilter(const Self &)=delete
itkTypeMacro(DiffusionTensor3DZeroCorrectionFilter, UnaryFunctorImageFilter)
SmartPointer< Self > Pointer
SmartPointer< const Self > ConstPointer
UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::DiffusionTensor3DZero< typename TInputImage::PixelType, typename TOutputImage::PixelType > > Superclass
~DiffusionTensor3DZeroCorrectionFilter() override=default
DiffusionTensor3DZeroCorrectionFilter()=default
DiffusionTensor3DZero()=default
bool operator==(const DiffusionTensor3DZero &other) const
bool operator!=(const DiffusionTensor3DZero &other) const
~DiffusionTensor3DZero()=default
DiffusionTensor3D< TOutput > operator()(const DiffusionTensor3D< TInput > &A)
#define ITK_DIFFUSION_TENSOR_3D_ZERO
Simplified inverse ITK transforms.