00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __itkBSplineResampleImageFilterBase_h
00022 #define __itkBSplineResampleImageFilterBase_h
00023
00024 #include <vector>
00025
00026 #include "itkImageLinearIteratorWithIndex.h"
00027 #include "itkImageLinearConstIteratorWithIndex.h"
00028 #include "itkImageRegionIterator.h"
00029 #include "itkProgressReporter.h"
00030 #include "itkImageToImageFilter.h"
00031
00032 namespace itk
00033 {
00073 template <class TInputImage, class TOutputImage>
00074 class ITK_EXPORT BSplineResampleImageFilterBase :
00075 public ImageToImageFilter<TInputImage,TOutputImage>
00076 {
00077
00078 public:
00080 typedef BSplineResampleImageFilterBase Self;
00081 typedef ImageToImageFilter<TInputImage,TOutputImage> Superclass;
00082 typedef SmartPointer<Self> Pointer;
00083 typedef SmartPointer<const Self> ConstPointer;
00084
00086 itkTypeMacro(BSplineResampleImageFilterBase, ImageToImageFilter);
00087
00088
00090
00091
00093 typedef typename Superclass::InputImageType InputImageType;
00094
00096 itkStaticConstMacro(ImageDimension, unsigned int,
00097 TInputImage::ImageDimension);
00098
00100 typedef typename TInputImage::IndexType IndexType;
00101
00103 typedef typename TInputImage::SizeType SizeType;
00104
00106 typedef typename TInputImage::RegionType RegionType;
00107
00109 typedef typename Superclass::OutputImagePixelType OutputImagePixelType;
00110
00112 typedef itk::ImageLinearConstIteratorWithIndex<TInputImage> ConstInputImageIterator;
00113
00115 typedef itk::ImageLinearConstIteratorWithIndex<TOutputImage> ConstOutputImageIterator;
00116
00118 typedef itk::ImageLinearIteratorWithIndex<TOutputImage> OutputImageIterator;
00119
00122 void SetSplineOrder(int SplineOrder);
00123
00125 itkGetMacro(SplineOrder, int);
00126
00127
00128 protected:
00130 void ReduceNDImage(OutputImageIterator &OutItr);
00131
00133 void ExpandNDImage(OutputImageIterator &OutItr);
00134
00137 virtual void InitializePyramidSplineFilter(int SplineOrder);
00138
00140 virtual void Reduce1DImage(
00141 const std::vector<double> & In,
00142 OutputImageIterator & Iter,
00143 unsigned int traverseSize,
00144 ProgressReporter &progress
00145 );
00146
00148 virtual void Expand1DImage(
00149 const std::vector<double> & In,
00150 OutputImageIterator & Iter,
00151 unsigned int traverseSize,
00152 ProgressReporter &progress
00153 );
00154
00155 BSplineResampleImageFilterBase();
00156 virtual ~BSplineResampleImageFilterBase() {};
00157 void PrintSelf(std::ostream& os, Indent indent) const;
00158
00159 int m_SplineOrder;
00160 int m_gSize;
00161 int m_hSize;
00162 std::vector<double> m_g;
00163 std::vector<double> m_h;
00164
00165 private:
00166
00167
00168 void InitializeScratch(SizeType DataLength);
00169
00170
00171 void CopyInputLineToScratch(ConstInputImageIterator & Iter);
00172 void CopyOutputLineToScratch(ConstOutputImageIterator & Iter);
00173 void CopyLineToScratch(ConstInputImageIterator & Iter);
00174
00175
00176 std::vector<double> m_Scratch;
00177
00178 BSplineResampleImageFilterBase( const Self& );
00179 void operator=( const Self& );
00180
00181 };
00182
00183 }
00184
00185 #ifndef ITK_MANUAL_INSTANTIATION
00186 #include "itkBSplineResampleImageFilterBase.txx"
00187 #endif
00188
00189 #endif