#ifndef __clitkForwardWarpImageFilter_h #define __clitkForwardWarpImageFilter_h //clitk include #include "clitkImageCommon.h" //itk include #include "itkImageToImageFilter.h" #include "itkImage.h" #include "itkImageRegionIterator.h" #include "itkImageRegionIteratorWithIndex.h" #include "itkNumericTraits.h" #include "itkSimpleFastMutexLock.h" namespace clitk { template < class InputImageType, class OutputImageType, class DeformationFieldType > class ForwardWarpImageFilter : public itk::ImageToImageFilter { public: typedef ForwardWarpImageFilter Self; typedef itk::ImageToImageFilter Superclass; typedef itk::SmartPointer Pointer; typedef itk::SmartPointer ConstPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Determine the image dimension. */ itkStaticConstMacro(ImageDimension, unsigned int, InputImageType::ImageDimension ); itkStaticConstMacro(InputImageDimension, unsigned int, OutputImageType::ImageDimension ); itkStaticConstMacro(DeformationFieldDimension, unsigned int, DeformationFieldType::ImageDimension ); //Some other typedefs typedef double CoordRepType; typedef itk::Image WeightsImageType; typedef itk::Image MutexImageType; /** Point type */ typedef itk::Point PointType; /** Inherit some types from the superclass. */ typedef typename OutputImageType::IndexType IndexType; typedef typename OutputImageType::SizeType SizeType; typedef typename OutputImageType::PixelType PixelType; typedef typename OutputImageType::SpacingType SpacingType; //Set & Get Methods (inline) itkSetMacro( Verbose, bool); itkSetMacro( EdgePaddingValue, PixelType ); itkSetMacro( DeformationField, typename DeformationFieldType::Pointer); void SetNumberOfThreads(unsigned int r ) { m_NumberOfThreadsIsGiven=true; m_NumberOfThreads=r; } itkSetMacro(ThreadSafe, bool); //ITK concept checking, why not? #ifdef ITK_USE_CONCEPT_CHECKING /** Begin concept checking */ itkConceptMacro(SameDimensionCheck1, (itk::Concept::SameDimension)); itkConceptMacro(SameDimensionCheck2, (itk::Concept::SameDimension)); itkConceptMacro(InputHasNumericTraitsCheck, (itk::Concept::HasNumericTraits)); itkConceptMacro(DeformationFieldHasNumericTraitsCheck, (itk::Concept::HasNumericTraits)); /** End concept checking */ #endif protected: ForwardWarpImageFilter(); ~ForwardWarpImageFilter() {}; void GenerateData( ); private: bool m_Verbose; bool m_NumberOfThreadsIsGiven; unsigned int m_NumberOfThreads; PixelType m_EdgePaddingValue; typename DeformationFieldType::Pointer m_DeformationField; bool m_ThreadSafe; }; } // end namespace clitk #ifndef ITK_MANUAL_INSTANTIATION #include "clitkForwardWarpImageFilter.txx" #endif #endif // #define __clitkForwardWarpImageFilter_h