Slicer  5.1
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
itkDiffusionTensor3DMatrix3x3Transform.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Diffusion Applications
4  Module: $HeadURL$
5  Language: C++
6  Date: $Date$
7  Version: $Revision$
8 
9  Copyright (c) Brigham and Women's Hospital (BWH) All Rights Reserved.
10 
11  See License.txt or http://www.slicer.org/copyright/copyright.txt for details.
12 
13 ==========================================================================*/
14 #ifndef itkDiffusionTensor3DMatrix3x3Transform_h
15 #define itkDiffusionTensor3DMatrix3x3Transform_h
16 
18 #include <itkVector.h>
19 #include <itkMatrixOffsetTransformBase.h>
20 #include <mutex>
21 
22 namespace itk
23 {
24 
31 template <class TData>
33  public DiffusionTensor3DTransform<TData>
34 {
35 public:
36  typedef TData DataType;
42  typedef typename Superclass::PointType PointType;
47  typedef Vector<TransformType, 3> VectorType;
48  typedef SmartPointer<Self> Pointer;
49  typedef SmartPointer<const Self> ConstPointer;
50 
53 
54  // /Set the translation vector
55  void SetTranslation( VectorType translation );
56 
57  // /Get the translation vector
59 
60  // /Set the center of the transformation
61  void SetCenter( PointType center );
62 
63  // /Evaluate the position of the transformed tensor in the output image
64  PointType EvaluateTensorPosition( const PointType & point ) override;
65 
66  // /Set the 3x3 transform matrix
67  virtual void SetMatrix3x3( MatrixTransformType & matrix );
68 
69  // /Get the 3x3 transform matrix
71 
72  // /Evaluate the transformed tensor
74 
75  TensorDataType EvaluateTransformedTensor( TensorDataType & tensor, PointType & outputPosition ) override; // dummy
76  // output
77  // position;
78  // to be
79  // compatible
80  // with
81  // non-rigid
82  // transforms
83 
84  typename Transform<double, 3, 3>::Pointer GetTransform() override;
85 
86 protected:
87  void ComputeOffset();
88 
89  virtual void PreCompute() = 0;
90 
95  unsigned long m_LatestTime;
99  std::mutex m_Lock;
100 };
101 
102 } // end namespace itk
103 
104 #ifndef ITK_MANUAL_INSTANTIATION
105 #include "itkDiffusionTensor3DMatrix3x3Transform.txx"
106 #endif
107 
108 #endif
virtual InternalMatrixTransformType GetMatrix3x3()
virtual void SetMatrix3x3(MatrixTransformType &matrix)
itkTypeMacro(DiffusionTensor3DMatrix3x3Transform, DiffusionTensor3DTransform)
Simplified inverse ITK transforms.
void SetTranslation(VectorType translation)
virtual TensorDataType EvaluateTransformedTensor(TensorDataType &tensor)
Superclass::InternalMatrixTransformType InternalMatrixTransformType
PointType EvaluateTensorPosition(const PointType &point) override
Transform< double, 3, 3 >::Pointer GetTransform() override
Matrix< TransformType, 3, 3 > MatrixTransformType
DiffusionTensor3D< DataType > TensorDataType