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