26#ifndef __vtkDiffusionTensorMathematics_h
27#define __vtkDiffusionTensorMathematics_h
30#include "vtkTeemConfigure.h"
33#include <vtkThreadedImageAlgorithm.h>
42 void PrintSelf(ostream& os, vtkIndent indent)
override;
48 VTK_TENS_DETERMINANT = 1,
49 VTK_TENS_RELATIVE_ANISOTROPY = 2,
50 VTK_TENS_FRACTIONAL_ANISOTROPY = 3,
51 VTK_TENS_MAX_EIGENVALUE = 4,
52 VTK_TENS_MID_EIGENVALUE = 5,
53 VTK_TENS_MIN_EIGENVALUE = 6,
54 VTK_TENS_LINEAR_MEASURE = 7,
55 VTK_TENS_PLANAR_MEASURE = 8,
56 VTK_TENS_SPHERICAL_MEASURE = 9,
57 VTK_TENS_COLOR_ORIENTATION = 10,
62 VTK_TENS_COLOR_MODE =15,
63 VTK_TENS_MAX_EIGENVALUE_PROJX = 16,
64 VTK_TENS_MAX_EIGENVALUE_PROJY = 17,
65 VTK_TENS_MAX_EIGENVALUE_PROJZ = 18,
66 VTK_TENS_RAI_MAX_EIGENVEC_PROJX = 19,
67 VTK_TENS_RAI_MAX_EIGENVEC_PROJY = 20,
68 VTK_TENS_RAI_MAX_EIGENVEC_PROJZ = 21,
69 VTK_TENS_MAX_EIGENVEC_PROJX = 22,
70 VTK_TENS_MAX_EIGENVEC_PROJY = 23,
71 VTK_TENS_MAX_EIGENVEC_PROJZ = 24,
72 VTK_TENS_PARALLEL_DIFFUSIVITY = 25,
73 VTK_TENS_PERPENDICULAR_DIFFUSIVITY = 26,
74 VTK_TENS_COLOR_ORIENTATION_MIDDLE_EIGENVECTOR = 27,
75 VTK_TENS_COLOR_ORIENTATION_MIN_EIGENVECTOR = 28,
76 VTK_TENS_MEAN_DIFFUSIVITY = 29
80 vtkGetMacro(Operation,
int);
81 vtkSetClampMacro(Operation,
int, VTK_TENS_TRACE, VTK_TENS_MEAN_DIFFUSIVITY);
86 {this->SetOperation(VTK_TENS_TRACE);};
91 {this->SetOperation(VTK_TENS_DETERMINANT);};
96 {this->SetOperation(VTK_TENS_RELATIVE_ANISOTROPY);};
98 {this->SetOperation(VTK_TENS_FRACTIONAL_ANISOTROPY);};
100 {this->SetOperation(VTK_TENS_LINEAR_MEASURE);};
102 {this->SetOperation(VTK_TENS_PLANAR_MEASURE);};
104 {this->SetOperation(VTK_TENS_SPHERICAL_MEASURE);};
108 {this->SetOperation(VTK_TENS_MODE);};
110 {this->SetOperation(VTK_TENS_PARALLEL_DIFFUSIVITY);};
112 {this->SetOperation(VTK_TENS_PERPENDICULAR_DIFFUSIVITY);};
114 {this->SetOperation(VTK_TENS_MEAN_DIFFUSIVITY);};
119 {this->SetOperation(VTK_TENS_MAX_EIGENVALUE);};
121 {this->SetOperation(VTK_TENS_MID_EIGENVALUE);};
123 {this->SetOperation(VTK_TENS_MIN_EIGENVALUE);};
128 {this->SetOperation(VTK_TENS_MAX_EIGENVALUE_PROJX);};
130 {this->SetOperation(VTK_TENS_MAX_EIGENVALUE_PROJY);};
132 {this->SetOperation(VTK_TENS_MAX_EIGENVALUE_PROJZ);};
137 {this->SetOperation(VTK_TENS_RAI_MAX_EIGENVEC_PROJX);}
139 {this->SetOperation(VTK_TENS_RAI_MAX_EIGENVEC_PROJY);}
141 {this->SetOperation(VTK_TENS_RAI_MAX_EIGENVEC_PROJZ);}
146 {this->SetOperation(VTK_TENS_MAX_EIGENVEC_PROJX);}
148 {this->SetOperation(VTK_TENS_MAX_EIGENVEC_PROJY);}
150 {this->SetOperation(VTK_TENS_MAX_EIGENVEC_PROJZ);}
156 {this->SetOperation(VTK_TENS_D11);};
158 {this->SetOperation(VTK_TENS_D22);};
160 {this->SetOperation(VTK_TENS_D33);};
167 {this->SetOperation(VTK_TENS_COLOR_ORIENTATION);};
175 {this->SetOperation(VTK_TENS_COLOR_MODE);};
180 vtkSetMacro(ScaleFactor,
double);
181 vtkGetMacro(ScaleFactor,
double);
185 vtkSetMacro(ExtractEigenvalues,
int);
186 vtkBooleanMacro(ExtractEigenvalues,
int);
187 vtkGetMacro(ExtractEigenvalues,
int);
209 vtkGetObjectMacro(TensorRotationMatrix, vtkMatrix4x4);
214 vtkBooleanMacro(MaskWithScalars,
int);
215 vtkSetMacro(MaskWithScalars,
int);
216 vtkGetMacro(MaskWithScalars,
int);
218 vtkBooleanMacro(FixNegativeEigenvalues,
int);
219 vtkSetMacro(FixNegativeEigenvalues,
int);
220 vtkGetMacro(FixNegativeEigenvalues,
int);
225 vtkGetObjectMacro(ScalarMask, vtkImageData);
229 vtkSetMacro(MaskLabelValue,
int);
230 vtkGetMacro(MaskLabelValue,
int);
234 double &R,
double &G,
double &B);
237 double B,
double &index);
243 static double Trace(
double D[3][3]);
265 static double Mode(
double w[3]);
266 static void ColorByMode(
double w[3],
double &R,
double &G,
double &B);
289 vtkInformationVector**,
290 vtkInformationVector*)
override;
293 vtkInformationVector **inputVector,
294 vtkInformationVector *outputVector,
295 vtkImageData ***inData,
296 vtkImageData **outData,
297 int extent[6],
int threadId)
override;
303 vtkInformationVector** inputVector,
304 vtkInformationVector* outputVector)
override;
void SetOperationToFractionalAnisotropy()
int FillInputPortInformation(int port, vtkInformation *info) override
void SetOperationToMode()
void SetOperationToMaxEigenvalueProjectionZ()
void PrintSelf(ostream &os, vtkIndent indent) override
static void ModeToRGB(double Mode, double FA, double &R, double &G, double &B)
Public for access from threads.
void SetOperationToParallelDiffusivity()
~vtkDiffusionTensorMathematics() override
static double ParallelDiffusivity(double w[3])
void SetOperationToRAIMaxEigenvecZ()
static void RGBToIndex(double R, double G, double B, double &index)
void SetOperationToColorByMode()
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
static double FractionalAnisotropy(double w[3])
static double PlanarMeasure(double w[3])
static double MaxEigenvalueProjectionX(double **v, double w[3])
void SetOperationToMeanDiffusivity()
static double MaxEigenvalue(double w[3])
virtual void SetTensorRotationMatrix(vtkMatrix4x4 *)
int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
void SetOperationToMaxEigenvecZ()
void SetOperationToPerpendicularDiffusivity()
void SetOperationToDeterminant()
Output the determinant.
vtkMatrix4x4 * TensorRotationMatrix
static double Mode(double w[3])
void SetOperationToLinearMeasure()
void SetOperationToRAIMaxEigenvecY()
static double RelativeAnisotropy(double w[3])
static double MinEigenvalue(double w[3])
void SetOperationToMaxEigenvalueProjectionY()
static double MeanDiffusivity(double w[3])
void SetOperationToD11()
Output a matrix (tensor) component.
int MaskWithScalars
Boolean controls eigenfunction extraction.
static double RAIMaxEigenvecZ(double **v, double w[3])
static vtkDiffusionTensorMathematics * New()
static double Trace(double w[3])
static double MaxEigenvalueProjectionY(double **v, double w[3])
static double MiddleEigenvalue(double w[3])
void SetOperationToMiddleEigenvalue()
void SetOperationToMaxEigenvalueProjectionX()
Output Maxeigenvalue*Maxeigenvec_projection also known as L1Z.
void SetOperationToMaxEigenvecY()
static double MaxEigenvecZ(double **v, double w[3])
vtkImageData * ScalarMask
static double MaxEigenvecY(double **v, double w[3])
static double RAIMaxEigenvecY(double **v, double w[3])
vtkDiffusionTensorMathematics()
void SetOperationToMaxEigenvecX()
Output Relative_anisotropy*Maxeigenvec_projection also known as L1z.
static int TeemEigenSolver(double **m, double *w, double **v)
static int FixNegativeEigenvaluesMethod(double w[3])
Helper functions to perform operations pixel-wise.
void SetOperationToMaxEigenvalue()
Output a selected eigenvalue.
void SetOperationToSphericalMeasure()
static double SphericalMeasure(double w[3])
double ScaleFactor
math operation to perform
void SetOperationToMinEigenvalue()
int ExtractEigenvalues
Scale factor for output scalars.
void SetOperationToPlanarMeasure()
void SetOperationToRelativeAnisotropy()
Output various anisotropy and shape measures.
void SetOperationToRAIMaxEigenvecX()
Output Relative_anisotropy*Maxeigenvec_projection also known as L1z.
static double Trace(double D[3][3])
static double PerpendicularDiffusivity(double w[3])
void ThreadedRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, int extent[6], int threadId) override
static double RAIMaxEigenvecX(double **v, double w[3])
static double LinearMeasure(double w[3])
void SetOperationToColorByOrientation()
virtual void SetScalarMask(vtkImageData *)
Scalar mask.
int FixNegativeEigenvalues
static void ColorByMode(double w[3], double &R, double &G, double &B)
static double MaxEigenvalueProjectionZ(double **v, double w[3])
static double MaxEigenvecX(double **v, double w[3])
void ComputeTensorIncrements(vtkImageData *imageData, vtkIdType incr[3])
void SetOperationToTrace()
Output the trace (sum of eigenvalues = sum along diagonal)
static double Determinant(double D[3][3])