VTK
vtkImageSincInterpolator.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkImageSincInterpolator.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
37#ifndef vtkImageSincInterpolator_h
38#define vtkImageSincInterpolator_h
39
40#include "vtkImagingCoreModule.h" // For export macro
42
43#define VTK_LANCZOS_WINDOW 0
44#define VTK_KAISER_WINDOW 1
45#define VTK_COSINE_WINDOW 2
46#define VTK_HANN_WINDOW 3
47#define VTK_HAMMING_WINDOW 4
48#define VTK_BLACKMAN_WINDOW 5
49#define VTK_BLACKMAN_HARRIS3 6
50#define VTK_BLACKMAN_HARRIS4 7
51#define VTK_NUTTALL_WINDOW 8
52#define VTK_BLACKMAN_NUTTALL3 9
53#define VTK_BLACKMAN_NUTTALL4 10
54#define VTK_SINC_KERNEL_SIZE_MAX 32
55
56class vtkImageData;
58
59class VTKIMAGINGCORE_EXPORT vtkImageSincInterpolator :
61{
62public:
65 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
66
68
76 virtual void SetWindowFunction(int mode);
78 this->SetWindowFunction(VTK_LANCZOS_WINDOW); }
80 this->SetWindowFunction(VTK_KAISER_WINDOW); }
82 this->SetWindowFunction(VTK_COSINE_WINDOW); }
84 this->SetWindowFunction(VTK_HANN_WINDOW); }
86 this->SetWindowFunction(VTK_HAMMING_WINDOW); }
88 this->SetWindowFunction(VTK_BLACKMAN_WINDOW); }
90 this->SetWindowFunction(VTK_BLACKMAN_HARRIS3); }
92 this->SetWindowFunction(VTK_BLACKMAN_HARRIS4); }
94 this->SetWindowFunction(VTK_NUTTALL_WINDOW); }
96 this->SetWindowFunction(VTK_BLACKMAN_NUTTALL3); }
98 this->SetWindowFunction(VTK_BLACKMAN_NUTTALL4); }
99 int GetWindowFunction() { return this->WindowFunction; }
100 virtual const char *GetWindowFunctionAsString();
102
111 int GetWindowHalfWidth() { return this->WindowHalfWidth; }
112
118 void UseWindowParameterOn() { this->SetUseWindowParameter(1); }
119 void UseWindowParameterOff() { this->SetUseWindowParameter(0); }
120 int GetUseWindowParameter() { return this->UseWindowParameter; }
121
130 void SetWindowParameter(double parm);
131 double GetWindowParameter() { return this->WindowParameter; }
132
139 virtual void ComputeSupportSize(const double matrix[16], int support[3]);
140
142
150 void SetBlurFactors(double x, double y, double z);
151 void SetBlurFactors(const double f[3]) {
152 this->SetBlurFactors(f[0], f[1], f[2]); }
153 void GetBlurFactors(double f[3]) {
154 f[0] = this->BlurFactors[0];
155 f[1] = this->BlurFactors[1];
156 f[2] = this->BlurFactors[2]; }
157 double *GetBlurFactors() { return this->BlurFactors; }
159
170 void SetAntialiasing(int antialiasing);
171 void AntialiasingOn() { this->SetAntialiasing(1); }
172 void AntialiasingOff() { this->SetAntialiasing(0); }
173 int GetAntialiasing() { return this->Antialiasing; }
174
182 void SetRenormalization(int renormalization);
183 void RenormalizationOn() { this->SetRenormalization(1); }
184 void RenormalizationOff() { this->SetRenormalization(0); }
185 int GetRenormalization() { return this->Renormalization; }
186
191 virtual bool IsSeparable();
192
194
205 const double matrix[16], const int extent[6], int newExtent[6],
206 vtkInterpolationWeights *&weights);
208 const float matrix[16], const int extent[6], int newExtent[6],
209 vtkInterpolationWeights *&weights);
211
216
217protected:
220
224 virtual void InternalUpdate();
225
230
232
236 void (**doublefunc)(
237 vtkInterpolationInfo *, const double [3], double *));
239 void (**floatfunc)(
240 vtkInterpolationInfo *, const float [3], float *));
242
244
248 void (**doublefunc)(
249 vtkInterpolationWeights *, int, int, int, double *, int));
251 void (**floatfunc)(
252 vtkInterpolationWeights *, int, int, int, float *, int));
254
259
263 virtual void FreeKernelLookupTable();
264
267 float *KernelLookupTable[3];
268 int KernelSize[3];
271 double BlurFactors[3];
272 double LastBlurFactors[3];
275
276private:
277 vtkImageSincInterpolator(const vtkImageSincInterpolator&) VTK_DELETE_FUNCTION;
278 void operator=(const vtkImageSincInterpolator&) VTK_DELETE_FUNCTION;
279};
280
281#endif
interpolate data values from images
topologically and geometrically regular array of data
Definition: vtkImageData.h:46
perform sinc interpolation on images
virtual void InternalUpdate()
Update the interpolator.
virtual void SetWindowFunction(int mode)
The window function to use.
virtual const char * GetWindowFunctionAsString()
virtual void BuildKernelLookupTable()
Build the lookup tables used for the interpolation.
virtual bool IsSeparable()
Returns true if the interpolator supports weight precomputation.
virtual void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6], int newExtent[6], vtkInterpolationWeights *&weights)
void SetRenormalization(int renormalization)
Turn off renormalization.
virtual void GetRowInterpolationFunc(void(**floatfunc)(vtkInterpolationWeights *, int, int, int, float *, int))
void SetUseWindowParameter(int val)
Turn this on in order to use SetWindowParameter.
virtual void FreePrecomputedWeights(vtkInterpolationWeights *&weights)
Free the precomputed weights.
virtual void ComputeSupportSize(const double matrix[16], int support[3])
Get the support size for use in computing update extents.
void SetAntialiasing(int antialiasing)
Turn on antialiasing.
void SetWindowHalfWidth(int n)
Set the window half-width, this must be an integer between 1 and 16, with a default value of 3.
void SetBlurFactors(const double f[3])
static vtkImageSincInterpolator * New()
virtual void FreeKernelLookupTable()
Free the kernel lookup tables.
virtual void InternalDeepCopy(vtkAbstractImageInterpolator *obj)
Copy the interpolator.
virtual void GetInterpolationFunc(void(**floatfunc)(vtkInterpolationInfo *, const float[3], float *))
virtual void GetRowInterpolationFunc(void(**doublefunc)(vtkInterpolationWeights *, int, int, int, double *, int))
Get the row interpolation functions.
virtual void GetInterpolationFunc(void(**doublefunc)(vtkInterpolationInfo *, const double[3], double *))
Get the interpolation functions.
void SetWindowParameter(double parm)
Set the alpha parameter for the Kaiser window function.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6], int newExtent[6], vtkInterpolationWeights *&weights)
If the data is going to be sampled on a regular grid, then the interpolation weights can be precomput...
void SetBlurFactors(double x, double y, double z)
Blur the image by widening the windowed sinc kernel by the specified factors for the x,...
a simple class to control print indentation
Definition: vtkIndent.h:40
@ mode
Definition: vtkX3D.h:247
@ extent
Definition: vtkX3D.h:345
#define VTK_HAMMING_WINDOW
#define VTK_KAISER_WINDOW
#define VTK_BLACKMAN_HARRIS4
#define VTK_HANN_WINDOW
#define VTK_NUTTALL_WINDOW
#define VTK_BLACKMAN_WINDOW
#define VTK_BLACKMAN_NUTTALL4
#define VTK_LANCZOS_WINDOW
#define VTK_COSINE_WINDOW
#define VTK_BLACKMAN_HARRIS3
#define VTK_BLACKMAN_NUTTALL3