vtkDiffusionTensorMathematics.h

Go to the documentation of this file.
00001 /*=auto=========================================================================
00002 
00003   Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
00004 
00005   See Doc/copyright/copyright.txt
00006   or http://www.slicer.org/copyright/copyright.txt for details.
00007 
00008   Program:   3D Slicer
00009   Module:    $RCSfile: vtkDiffusionTensorMathematics.h,v $
00010   Date:      $Date: 2006/12/19 17:14:44 $
00011   Version:   $Revision: 1.20 $
00012 
00013 =========================================================================auto=*/
00018 //
00023 //
00024 
00025 
00026 #ifndef __vtkDiffusionTensorMathematics_h
00027 #define __vtkDiffusionTensorMathematics_h
00028 
00029 #include "vtkTeemConfigure.h"
00030 #include "vtkThreadedImageAlgorithm.h"
00031 
00032 class vtkMatrix4x4;
00033 class vtkImageData;
00034 class VTK_Teem_EXPORT vtkDiffusionTensorMathematics : public vtkThreadedImageAlgorithm
00035 {
00036 public:
00037   static vtkDiffusionTensorMathematics *New();
00038   vtkTypeMacro(vtkDiffusionTensorMathematics,vtkThreadedImageAlgorithm);
00039   void PrintSelf(ostream& os, vtkIndent indent);
00040 
00043   vtkGetMacro(Operation,int);
00044   vtkSetClampMacro(Operation,int, VTK_TENS_TRACE, VTK_TENS_PERPENDICULAR_DIFFUSIVITY);
00045 
00046 
00048   //BTX
00049   enum
00050   {
00051     VTK_TENS_TRACE,
00052     VTK_TENS_DETERMINANT,
00053     VTK_TENS_RELATIVE_ANISOTROPY,
00054     VTK_TENS_FRACTIONAL_ANISOTROPY,
00055     VTK_TENS_MAX_EIGENVALUE,
00056     VTK_TENS_MID_EIGENVALUE,
00057     VTK_TENS_MIN_EIGENVALUE,
00058     VTK_TENS_LINEAR_MEASURE,
00059     VTK_TENS_PLANAR_MEASURE,
00060     VTK_TENS_SPHERICAL_MEASURE,
00061     VTK_TENS_COLOR_ORIENTATION,
00062     VTK_TENS_D11,
00063     VTK_TENS_D22,
00064     VTK_TENS_D33,
00065     VTK_TENS_MODE,
00066     VTK_TENS_COLOR_MODE,
00067     VTK_TENS_MAX_EIGENVALUE_PROJX,
00068     VTK_TENS_MAX_EIGENVALUE_PROJY,
00069     VTK_TENS_MAX_EIGENVALUE_PROJZ,
00070     VTK_TENS_RAI_MAX_EIGENVEC_PROJX,
00071     VTK_TENS_RAI_MAX_EIGENVEC_PROJY,
00072     VTK_TENS_RAI_MAX_EIGENVEC_PROJZ,
00073     VTK_TENS_PARALLEL_DIFFUSIVITY,
00074     VTK_TENS_PERPENDICULAR_DIFFUSIVITY,
00075   };
00076   //ETX
00077 
00078 
00081   void SetOperationToTrace() 
00082     {this->SetOperation(VTK_TENS_TRACE);};
00083 
00086   void SetOperationToDeterminant() 
00087     {this->SetOperation(VTK_TENS_DETERMINANT);};
00088 
00091   void SetOperationToRelativeAnisotropy() 
00092     {this->SetOperation(VTK_TENS_RELATIVE_ANISOTROPY);};
00093   void SetOperationToFractionalAnisotropy() 
00094     {this->SetOperation(VTK_TENS_FRACTIONAL_ANISOTROPY);};
00095   void SetOperationToLinearMeasure() 
00096     {this->SetOperation(VTK_TENS_LINEAR_MEASURE);};
00097   void SetOperationToPlanarMeasure() 
00098     {this->SetOperation(VTK_TENS_PLANAR_MEASURE);};
00099   void SetOperationToSphericalMeasure() 
00100     {this->SetOperation(VTK_TENS_SPHERICAL_MEASURE);};
00103   void SetOperationToMode() 
00104     {this->SetOperation(VTK_TENS_MODE);};
00105   void SetOperationToParallelDiffusivity()
00106     {this->SetOperation(VTK_TENS_PARALLEL_DIFFUSIVITY);};
00107   void SetOperationToPerpendicularDiffusivity()
00108     {this->SetOperation(VTK_TENS_PERPENDICULAR_DIFFUSIVITY);};
00109 
00112   void SetOperationToMaxEigenvalue() 
00113     {this->SetOperation(VTK_TENS_MAX_EIGENVALUE);};
00114   void SetOperationToMiddleEigenvalue() 
00115     {this->SetOperation(VTK_TENS_MID_EIGENVALUE);};
00116   void SetOperationToMinEigenvalue() 
00117     {this->SetOperation(VTK_TENS_MIN_EIGENVALUE);};
00118 
00121   void SetOperationToMaxEigenvalueProjectionX()
00122   {this->SetOperation(VTK_TENS_MAX_EIGENVALUE_PROJX);};
00123   void SetOperationToMaxEigenvalueProjectionY()
00124   {this->SetOperation(VTK_TENS_MAX_EIGENVALUE_PROJY);};
00125   void SetOperationToMaxEigenvalueProjectionZ()
00126   {this->SetOperation(VTK_TENS_MAX_EIGENVALUE_PROJZ);};
00127   
00130   void SetOperationToRAIMaxEigenvecX()
00131   {this->SetOperation(VTK_TENS_RAI_MAX_EIGENVEC_PROJX);}
00132   void SetOperationToRAIMaxEigenvecY()
00133   {this->SetOperation(VTK_TENS_RAI_MAX_EIGENVEC_PROJY);}
00134   void SetOperationToRAIMaxEigenvecZ()
00135   {this->SetOperation(VTK_TENS_RAI_MAX_EIGENVEC_PROJZ);}
00136   
00139   void SetOperationToD11() 
00140     {this->SetOperation(VTK_TENS_D11);};
00141   void SetOperationToD22() 
00142     {this->SetOperation(VTK_TENS_D22);};
00143   void SetOperationToD33() 
00144     {this->SetOperation(VTK_TENS_D33);};
00145   
00150   void SetOperationToColorByOrientation() 
00151     {this->SetOperation(VTK_TENS_COLOR_ORIENTATION);};
00152 
00158   void SetOperationToColorByMode() 
00159     {this->SetOperation(VTK_TENS_COLOR_MODE);};
00160 
00164   vtkSetMacro(ScaleFactor,double);
00165   vtkGetMacro(ScaleFactor,double);
00166 
00169   vtkSetMacro(ExtractEigenvalues,int);
00170   vtkBooleanMacro(ExtractEigenvalues,int);
00171   vtkGetMacro(ExtractEigenvalues,int);
00172 
00177   //
00180   //
00191   //
00192   virtual void SetTensorRotationMatrix(vtkMatrix4x4*);
00193   vtkGetObjectMacro(TensorRotationMatrix, vtkMatrix4x4);
00194 
00198   vtkBooleanMacro(MaskWithScalars, int);
00199   vtkSetMacro(MaskWithScalars, int);
00200   vtkGetMacro(MaskWithScalars, int);
00201 
00202   vtkBooleanMacro(FixNegativeEigenvalues, int);
00203   vtkSetMacro(FixNegativeEigenvalues, int);
00204   vtkGetMacro(FixNegativeEigenvalues, int);
00205 
00208   virtual void SetScalarMask(vtkImageData*);
00209   vtkGetObjectMacro(ScalarMask, vtkImageData);
00210   
00213   vtkSetMacro(MaskLabelValue, int);
00214   vtkGetMacro(MaskLabelValue, int);
00215 
00217   static void ModeToRGB(double Mode, double FA,
00218                  double &R, double &G, double &B);
00219 
00220 
00223   static int FixNegativeEigenvaluesMethod(double w[3]);
00224   static double Determinant(double D[3][3]);
00225   static double Trace(double D[3][3]);
00226   static double Trace(double w[3]);
00227   static double RelativeAnisotropy(double w[3]);
00228   static double FractionalAnisotropy(double w[3]);
00229   static double LinearMeasure(double w[3]);
00230   static double PlanarMeasure(double w[3]);
00231   static double SphericalMeasure(double w[3]);
00232   static double MaxEigenvalue(double w[3]);
00233   static double MiddleEigenvalue(double w[3]);
00234   static double ParallelDiffusivity(double w[3]);
00235   static double PerpendicularDiffusivity(double w[3]);
00236   static double MinEigenvalue(double w[3]);
00237   static double RAIMaxEigenvecX(double **v, double w[3]);
00238   static double RAIMaxEigenvecY(double **v, double w[3]);
00239   static double RAIMaxEigenvecZ(double **v, double w[3]);
00240   static double MaxEigenvalueProjectionX(double **v, double w[3]);
00241   static double MaxEigenvalueProjectionY(double **v, double w[3]);
00242   static double MaxEigenvalueProjectionZ(double **v, double w[3]);
00243   static double Mode(double w[3]);
00244   static void ColorByMode(double w[3], double &R,double &G, double &B);
00245 
00246   //Description
00247   //Wrap function to teem eigen solver
00248   static int TeemEigenSolver(double **m, double *w, double **v);
00249   void ComputeTensorIncrements(vtkImageData *imageData, vtkIdType incr[3]);
00250 
00251 protected:
00252   vtkDiffusionTensorMathematics();
00253   ~vtkDiffusionTensorMathematics();
00254 
00255   int Operation; 
00256   double ScaleFactor; 
00257   int ExtractEigenvalues; 
00258 
00259   int MaskWithScalars;
00260   vtkImageData *ScalarMask;
00261   int MaskLabelValue;
00262   
00263   vtkMatrix4x4 *TensorRotationMatrix;
00264   int FixNegativeEigenvalues;
00265 
00266   virtual int RequestInformation (vtkInformation*,
00267                                   vtkInformationVector**,
00268                                   vtkInformationVector*);
00269 
00270   virtual void ThreadedRequestData(vtkInformation *request,
00271                                    vtkInformationVector **inputVector,
00272                                    vtkInformationVector *outputVector,
00273                                    vtkImageData ***inData,
00274                                    vtkImageData **outData,
00275                                    int extent[6], int threadId);
00276 
00277   int FillInputPortInformation(int port, vtkInformation* info);
00278 
00279 
00280 private:
00281   vtkDiffusionTensorMathematics(const vtkDiffusionTensorMathematics&);
00282   void operator=(const vtkDiffusionTensorMathematics&);
00283 };
00284 
00285 #endif
00286 
00287 
00288 
00289 
00290 
00291 
00292 
00293 
00294 
00295 
00296 
00297 
00298 

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1