Slicer 4.2
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
itkDiffusionTensor3DInterpolateImageFunctionReimplementation.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Diffusion Applications
00004   Module:    $HeadURL: http://svn.slicer.org/Slicer4/trunk/Modules/CLI/ResampleDTIVolume/itkDiffusionTensor3DInterpolateImageFunctionReimplementation.h $
00005   Language:  C++
00006   Date:      $Date: 2012-02-02 01:52:52 -0500 (Thu, 02 Feb 2012) $
00007   Version:   $Revision: 19197 $
00008 
00009   Copyright (c) Brigham and Women's Hospital (BWH) All Rights Reserved.
00010 
00011   See License.txt or http://www.slicer.org/copyright/copyright.txt for details.
00012 
00013 ==========================================================================*/
00014 #ifndef __itkDiffusionTensor3DInterpolateImageFunctionReimplementation_h
00015 #define __itkDiffusionTensor3DInterpolateImageFunctionReimplementation_h
00016 
00017 #include "itkDiffusionTensor3DInterpolateImageFunction.h"
00018 #include <itkImage.h>
00019 // #include <itkImageRegionIteratorWithIndex.h>
00020 #include <itkInterpolateImageFunction.h>
00021 #include "itkSeparateComponentsOfADiffusionTensorImage.h"
00022 // #include <itkMutexLock.h>
00023 // #include <itkSemaphore.h>
00024 
00025 namespace itk
00026 {
00027 
00028 /*struct RegionType
00029 {
00030   ImageRegion< 3 > itkRegion ;
00031   bool Done ;
00032   Index< 3 > PositionInImage ;
00033   bool Stop ;
00034 };*/
00035 
00042 template <class TData, class TCoordRep = double>
00043 class DiffusionTensor3DInterpolateImageFunctionReimplementation :
00044   public DiffusionTensor3DInterpolateImageFunction<TData, TCoordRep>
00045 {
00046 public:
00047   typedef TData                                                          DataType;
00048   typedef DiffusionTensor3DInterpolateImageFunctionReimplementation      Self;
00049   typedef DiffusionTensor3DInterpolateImageFunction<DataType, TCoordRep> Superclass;
00050   typedef typename Superclass::TensorDataType                            TensorDataType;
00051   typedef typename Superclass::DiffusionImageType                        DiffusionImageType;
00052   typedef typename Superclass::DiffusionImageTypePointer                 DiffusionImageTypePointer;
00053   typedef Image<DataType, 3>                                             ImageType;
00054   typedef typename ImageType::Pointer                                    ImagePointer;
00055   typedef typename Superclass::PointType                                 PointType;
00056   typedef SmartPointer<Self>                                             Pointer;
00057   typedef SmartPointer<const Self>                                       ConstPointer;
00058   typedef ImageRegionIteratorWithIndex<DiffusionImageType>               IteratorDiffusionImageType;
00059   typedef ImageRegionIteratorWithIndex<ImageType>                        IteratorImageType;
00060   typedef InterpolateImageFunction<ImageType, double>                    InterpolateImageFunctionType;
00061   typedef typename DiffusionImageType::RegionType                        itkRegionType;
00062   typedef typename DiffusionImageType::SizeType                          SizeType;
00063   typedef typename Superclass::ContinuousIndexType                       ContinuousIndexType;
00066   // TensorDataType Evaluate( const PointType &point ) ;
00067   TensorDataType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const;
00068 
00069   virtual void SetInputImage( const DiffusionImageType *inputImage );
00070 
00071   itkSetMacro( NumberOfThreads, int );
00072 protected:
00073   DiffusionTensor3DInterpolateImageFunctionReimplementation();
00074   virtual void AllocateInterpolator() = 0;
00075 
00076 //  void SeparateImages() ;
00077 //  void AllocateImages() ;
00078 //  bool DivideRegion( int currentThread ) ;
00079 //  int RegionToDivide() ;
00080   typename InterpolateImageFunctionType::Pointer m_Interpol[6];
00081   ImagePointer m_ImageVec[6];
00082   int          m_NumberOfThreads;
00083 //  Semaphore::Pointer m_Threads ;
00084 //  int m_SplitAxis ;
00085 //  bool m_SeparationDone ;
00086 //  bool m_CannotSplit ;
00087 //  MutexLock::Pointer m_Lock ;
00088 //  MutexLock::Pointer m_LockNewThreadDetected ;
00089 //  std::vector< RegionType > m_ListRegions ;
00090 //  int m_NbThread ;
00091 //  MutexLock::Pointer m_CheckRegionsDone ;
00092 //  bool m_ExceptionThrown ;
00093 //  SizeType m_Size ;
00094 //  bool m_AllocateInterpolatorsDone ;
00095 };
00096 
00097 } // end namespace itk
00098 
00099 #ifndef ITK_MANUAL_INSTANTIATION
00100 #include "itkDiffusionTensor3DInterpolateImageFunctionReimplementation.txx"
00101 #endif
00102 
00103 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines