00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __itkTransformToDeformationFieldSource_h
00032 #define __itkTransformToDeformationFieldSource_h
00033
00034 #include "itkTransform.h"
00035 #include "itkImageSource.h"
00036
00037 namespace itk
00038 {
00039
00070 template <class TOutputImage,
00071 class TTransformPrecisionType=double>
00072 class ITK_EXPORT TransformToDeformationFieldSource:
00073 public ImageSource<TOutputImage>
00074 {
00075 public:
00077 typedef TransformToDeformationFieldSource Self;
00078 typedef ImageSource<TOutputImage> Superclass;
00079 typedef SmartPointer<Self> Pointer;
00080 typedef SmartPointer<const Self> ConstPointer;
00081
00082 typedef TOutputImage OutputImageType;
00083 typedef typename OutputImageType::Pointer OutputImagePointer;
00084 typedef typename OutputImageType::ConstPointer OutputImageConstPointer;
00085 typedef typename OutputImageType::RegionType OutputImageRegionType;
00086
00088 itkNewMacro( Self );
00089
00091 itkTypeMacro( TransformToDeformationFieldSource, ImageSource );
00092
00094 itkStaticConstMacro( ImageDimension, unsigned int,
00095 TOutputImage::ImageDimension );
00096
00098 typedef Transform<TTransformPrecisionType,
00099 itkGetStaticConstMacro( ImageDimension ),
00100 itkGetStaticConstMacro( ImageDimension )> TransformType;
00101 typedef typename TransformType::ConstPointer TransformPointerType;
00103
00105 typedef typename OutputImageType::PixelType PixelType;
00106 typedef typename PixelType::ValueType PixelValueType;
00107 typedef typename OutputImageType::RegionType RegionType;
00108 typedef typename RegionType::SizeType SizeType;
00109 typedef typename OutputImageType::IndexType IndexType;
00110 typedef typename OutputImageType::PointType PointType;
00111 typedef typename OutputImageType::SpacingType SpacingType;
00112 typedef typename OutputImageType::PointType OriginType;
00113 typedef typename OutputImageType::DirectionType DirectionType;
00114
00116 typedef ImageBase< itkGetStaticConstMacro( ImageDimension ) > ImageBaseType;
00117
00125 itkSetConstObjectMacro( Transform, TransformType );
00126
00128 itkGetConstObjectMacro( Transform, TransformType );
00129
00131 virtual void SetOutputSize( const SizeType & size );
00132
00134 virtual const SizeType & GetOutputSize();
00135
00138 virtual void SetOutputIndex( const IndexType & index );
00139
00141 virtual const IndexType & GetOutputIndex();
00142
00144 itkSetMacro( OutputRegion, OutputImageRegionType );
00145
00147 itkGetConstReferenceMacro( OutputRegion, OutputImageRegionType );
00148
00150 itkSetMacro( OutputSpacing, SpacingType );
00151 virtual void SetOutputSpacing( const double* values );
00153
00155 itkGetConstReferenceMacro( OutputSpacing, SpacingType );
00156
00158 itkSetMacro( OutputOrigin, OriginType );
00159 virtual void SetOutputOrigin( const double* values);
00161
00163 itkGetConstReferenceMacro( OutputOrigin, OriginType );
00164
00166 itkSetMacro( OutputDirection, DirectionType );
00167 itkGetConstReferenceMacro( OutputDirection, DirectionType );
00169
00171 void SetOutputParametersFromImage( const ImageBaseType * image );
00172
00174 virtual void GenerateOutputInformation( void );
00175
00177 virtual void BeforeThreadedGenerateData( void );
00178
00180 unsigned long GetMTime( void ) const;
00181
00182 #ifdef ITK_USE_CONCEPT_CHECKING
00183
00184 itkStaticConstMacro(PixelDimension, unsigned int,
00185 PixelType::Dimension );
00186 itkConceptMacro(SameDimensionCheck,
00187 (Concept::SameDimension<ImageDimension,PixelDimension>));
00188
00190 #endif
00191
00192 protected:
00193 TransformToDeformationFieldSource( void );
00194 ~TransformToDeformationFieldSource( void ) {};
00195
00196 void PrintSelf( std::ostream& os, Indent indent ) const;
00197
00201 void ThreadedGenerateData(
00202 const OutputImageRegionType & outputRegionForThread,
00203 int threadId );
00204
00208 void NonlinearThreadedGenerateData(
00209 const OutputImageRegionType& outputRegionForThread,
00210 int threadId );
00211
00215 void LinearThreadedGenerateData(
00216 const OutputImageRegionType & outputRegionForThread,
00217 int threadId );
00218
00219 private:
00220
00221 TransformToDeformationFieldSource( const Self& );
00222 void operator=( const Self& );
00223
00225 RegionType m_OutputRegion;
00226 TransformPointerType m_Transform;
00227 SpacingType m_OutputSpacing;
00228 OriginType m_OutputOrigin;
00229 DirectionType m_OutputDirection;
00230
00231 };
00232
00233 }
00234
00235 #ifndef ITK_MANUAL_INSTANTIATION
00236 #include "itkTransformToDeformationFieldSource.txx"
00237 #endif
00238
00239 #endif // end #ifndef __itkTransformToDeformationFieldSource_h
00240