00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __itkInterpolateImagePointsFilter_h
00022 #define __itkInterpolateImagePointsFilter_h
00023
00024 #include "itkBSplineInterpolateImageFunction.h"
00025 #include "itkImageToImageFilter.h"
00026 #include "itkImageToImageFilterDetail.h"
00027 #include "itkImageRegionIterator.h"
00028 #include "itkImageRegionConstIterator.h"
00029
00030 namespace itk
00031 {
00070 template <class TInputImage,
00071 class TOutputImage,
00072 class TCoordType = ITK_TYPENAME TInputImage::PixelType,
00073 class InterpolatorType = BSplineInterpolateImageFunction<TInputImage, TCoordType> >
00074 class ITK_EXPORT InterpolateImagePointsFilter :
00075 public ImageToImageFilter<TInputImage, TOutputImage>
00076 {
00077 public:
00079 typedef InterpolateImagePointsFilter Self;
00080 typedef ImageToImageFilter<TInputImage, TOutputImage> Superclass;
00081 typedef SmartPointer<Self> Pointer;
00082 typedef SmartPointer<const Self> ConstPointer;
00083
00085 itkTypeMacro(InterpolateImagePointsFilter, ImageToImageFilter);
00086
00087
00089 itkNewMacro( Self );
00090
00092 itkStaticConstMacro(ImageDimension, unsigned int, TInputImage::ImageDimension );
00093
00095 typedef typename Superclass::InputImageType InputImageType;
00096 typedef typename Superclass::OutputImageType OutputImageType;
00097 typedef typename Superclass::InputImagePointer InputImagePointer;
00098
00100 typedef typename TOutputImage::Pointer OutputImagePointer;
00101 typedef ImageRegionIterator<InputImageType> OutputImageIterator;
00102 typedef typename OutputImageType::RegionType OutputImageRegionType;
00103
00105 typedef typename TOutputImage::PixelType PixelType;
00106
00107
00108
00110 typedef typename InterpolatorType::Pointer InterpolatorPointer;
00111 typedef typename InterpolatorType::ContinuousIndexType ContinuousIndexType;
00112
00114 typedef Image< TCoordType, itkGetStaticConstMacro(ImageDimension) > CoordImageType;
00115
00117 typedef ImageToImageFilterDetail::ImageRegionCopier<itkGetStaticConstMacro(ImageDimension),itkGetStaticConstMacro(ImageDimension)> RegionCopierType;
00118
00123 void SetInputImage (const TInputImage * inputImage);
00124
00127 void SetInterpolationCoordinate (const CoordImageType * coordinate, unsigned int setDimension);
00128
00130 itkSetMacro(DefaultPixelValue,PixelType);
00131
00133 itkGetMacro(DefaultPixelValue,PixelType);
00134
00136 InterpolatorPointer GetInterpolator()
00137 { return m_Interpolator; }
00138
00141 void GenerateOutputInformation();
00142
00144 void GenerateInputRequestedRegion();
00145
00146 protected:
00149
00150
00153 void ThreadedGenerateData( const OutputImageRegionType& outputRegionForThread,
00154 int threadId );
00155 void BeforeThreadedGenerateData();
00156
00157 InterpolateImagePointsFilter();
00158 ~InterpolateImagePointsFilter(){};
00159 void PrintSelf(std::ostream& os, Indent indent) const;
00160
00161 private:
00162
00164 typedef typename CoordImageType::Pointer CoordImageTypePointer;
00165 typedef ImageRegionConstIterator<CoordImageType> CoordImageIterator;
00166 typedef typename CoordImageType::RegionType CoordImageRegionType;
00167
00168 InterpolateImagePointsFilter( const Self& );
00169 void operator=( const Self& );
00170
00171 InterpolatorPointer m_Interpolator;
00172 PixelType m_DefaultPixelValue;
00173
00174 };
00175
00176 }
00177
00178 #ifndef ITK_MANUAL_INSTANTIATION
00179 #include "itkInterpolateImagePointsFilter.txx"
00180 #endif
00181
00182 #endif