VTK  9.1.0
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 =========================================================================*/
31 #ifndef vtkImageSincInterpolator_h
32 #define vtkImageSincInterpolator_h
33 
35 #include "vtkImagingCoreModule.h" // For export macro
36 
37 #define VTK_LANCZOS_WINDOW 0
38 #define VTK_KAISER_WINDOW 1
39 #define VTK_COSINE_WINDOW 2
40 #define VTK_HANN_WINDOW 3
41 #define VTK_HAMMING_WINDOW 4
42 #define VTK_BLACKMAN_WINDOW 5
43 #define VTK_BLACKMAN_HARRIS3 6
44 #define VTK_BLACKMAN_HARRIS4 7
45 #define VTK_NUTTALL_WINDOW 8
46 #define VTK_BLACKMAN_NUTTALL3 9
47 #define VTK_BLACKMAN_NUTTALL4 10
48 #define VTK_SINC_KERNEL_SIZE_MAX 32
49 
50 class vtkImageData;
52 
53 class VTKIMAGINGCORE_EXPORT vtkImageSincInterpolator : public vtkAbstractImageInterpolator
54 {
55 public:
58  void PrintSelf(ostream& os, vtkIndent indent) override;
59 
61 
69  virtual void SetWindowFunction(int mode);
70  void SetWindowFunctionToLanczos() { this->SetWindowFunction(VTK_LANCZOS_WINDOW); }
71  void SetWindowFunctionToKaiser() { this->SetWindowFunction(VTK_KAISER_WINDOW); }
72  void SetWindowFunctionToCosine() { this->SetWindowFunction(VTK_COSINE_WINDOW); }
73  void SetWindowFunctionToHann() { this->SetWindowFunction(VTK_HANN_WINDOW); }
74  void SetWindowFunctionToHamming() { this->SetWindowFunction(VTK_HAMMING_WINDOW); }
75  void SetWindowFunctionToBlackman() { this->SetWindowFunction(VTK_BLACKMAN_WINDOW); }
76  void SetWindowFunctionToBlackmanHarris3() { this->SetWindowFunction(VTK_BLACKMAN_HARRIS3); }
77  void SetWindowFunctionToBlackmanHarris4() { this->SetWindowFunction(VTK_BLACKMAN_HARRIS4); }
78  void SetWindowFunctionToNuttall() { this->SetWindowFunction(VTK_NUTTALL_WINDOW); }
79  void SetWindowFunctionToBlackmanNuttall3() { this->SetWindowFunction(VTK_BLACKMAN_NUTTALL3); }
80  void SetWindowFunctionToBlackmanNuttall4() { this->SetWindowFunction(VTK_BLACKMAN_NUTTALL4); }
81  int GetWindowFunction() { return this->WindowFunction; }
82  virtual const char* GetWindowFunctionAsString();
84 
92  void SetWindowHalfWidth(int n);
93  int GetWindowHalfWidth() { return this->WindowHalfWidth; }
94 
99  void SetUseWindowParameter(int val);
100  void UseWindowParameterOn() { this->SetUseWindowParameter(1); }
101  void UseWindowParameterOff() { this->SetUseWindowParameter(0); }
102  int GetUseWindowParameter() { return this->UseWindowParameter; }
103 
112  void SetWindowParameter(double parm);
113  double GetWindowParameter() { return this->WindowParameter; }
114 
121  void ComputeSupportSize(const double matrix[16], int support[3]) override;
122 
124 
132  void SetBlurFactors(double x, double y, double z);
133  void SetBlurFactors(const double f[3]) { this->SetBlurFactors(f[0], f[1], f[2]); }
134  void GetBlurFactors(double f[3])
135  {
136  f[0] = this->BlurFactors[0];
137  f[1] = this->BlurFactors[1];
138  f[2] = this->BlurFactors[2];
139  }
140  double* GetBlurFactors() VTK_SIZEHINT(3) { return this->BlurFactors; }
142 
153  void SetAntialiasing(int antialiasing);
154  void AntialiasingOn() { this->SetAntialiasing(1); }
155  void AntialiasingOff() { this->SetAntialiasing(0); }
156  int GetAntialiasing() { return this->Antialiasing; }
157 
165  void SetRenormalization(int renormalization);
166  void RenormalizationOn() { this->SetRenormalization(1); }
167  void RenormalizationOff() { this->SetRenormalization(0); }
168  int GetRenormalization() { return this->Renormalization; }
169 
174  bool IsSeparable() override;
175 
177 
187  void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6], int newExtent[6],
188  vtkInterpolationWeights*& weights) override;
189  void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6], int newExtent[6],
190  vtkInterpolationWeights*& weights) override;
192 
197 
198 protected:
201 
205  void InternalUpdate() override;
206 
211 
213 
217  void (**doublefunc)(vtkInterpolationInfo*, const double[3], double*)) override;
219  void (**floatfunc)(vtkInterpolationInfo*, const float[3], float*)) override;
221 
223 
227  void (**doublefunc)(vtkInterpolationWeights*, int, int, int, double*, int)) override;
229  void (**floatfunc)(vtkInterpolationWeights*, int, int, int, float*, int)) override;
231 
235  virtual void BuildKernelLookupTable();
236 
240  virtual void FreeKernelLookupTable();
241 
244  float* KernelLookupTable[3];
245  int KernelSize[3];
248  double BlurFactors[3];
249  double LastBlurFactors[3];
252 
253 private:
255  void operator=(const vtkImageSincInterpolator&) = delete;
256 };
257 
258 #endif
interpolate data values from images
topologically and geometrically regular array of data
Definition: vtkImageData.h:48
perform sinc interpolation on images
void SetWindowFunctionToKaiser()
The window function to use.
virtual void SetWindowFunction(int mode)
The window function to use.
void InternalDeepCopy(vtkAbstractImageInterpolator *obj) override
Copy the interpolator.
double * GetBlurFactors()
Blur the image by widening the windowed sinc kernel by the specified factors for the x,...
virtual const char * GetWindowFunctionAsString()
The window function to use.
void SetWindowFunctionToCosine()
The window function to use.
virtual void BuildKernelLookupTable()
Build the lookup tables used for the interpolation.
void SetWindowFunctionToLanczos()
The window function to use.
void GetBlurFactors(double f[3])
Blur the image by widening the windowed sinc kernel by the specified factors for the x,...
void SetWindowFunctionToBlackmanNuttall3()
The window function to use.
void GetInterpolationFunc(void(**doublefunc)(vtkInterpolationInfo *, const double[3], double *)) override
Get the interpolation functions.
void SetRenormalization(int renormalization)
Turn off renormalization.
void SetWindowFunctionToBlackmanHarris3()
The window function to use.
void SetUseWindowParameter(int val)
Turn this on in order to use SetWindowParameter.
void SetWindowFunctionToBlackmanNuttall4()
The window function to use.
void SetWindowFunctionToNuttall()
The window function to use.
void InternalUpdate() override
Update the interpolator.
void SetAntialiasing(int antialiasing)
Turn on antialiasing.
void FreePrecomputedWeights(vtkInterpolationWeights *&weights) override
Free the precomputed weights.
~vtkImageSincInterpolator() override
void GetInterpolationFunc(void(**floatfunc)(vtkInterpolationInfo *, const float[3], float *)) override
Get the interpolation functions.
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 GetRowInterpolationFunc(void(**doublefunc)(vtkInterpolationWeights *, int, int, int, double *, int)) override
Get the row interpolation functions.
void SetBlurFactors(const double f[3])
Blur the image by widening the windowed sinc kernel by the specified factors for the x,...
void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6], int newExtent[6], vtkInterpolationWeights *&weights) override
If the data is going to be sampled on a regular grid, then the interpolation weights can be precomput...
void SetWindowFunctionToHann()
The window function to use.
int GetWindowFunction()
The window function to use.
virtual void FreeKernelLookupTable()
Free the kernel lookup tables.
void ComputeSupportSize(const double matrix[16], int support[3]) override
Get the support size for use in computing update extents.
void SetWindowFunctionToBlackman()
The window function to use.
static vtkImageSincInterpolator * New()
bool IsSeparable() override
Returns true if the interpolator supports weight precomputation.
void SetWindowParameter(double parm)
Set the alpha parameter for the Kaiser window function.
void SetWindowFunctionToBlackmanHarris4()
The window function to use.
void SetWindowFunctionToHamming()
The window function to use.
void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6], int newExtent[6], vtkInterpolationWeights *&weights) override
If the data is going to be sampled on a regular grid, then the interpolation weights can be precomput...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void GetRowInterpolationFunc(void(**floatfunc)(vtkInterpolationWeights *, int, int, int, float *, int)) override
Get the row interpolation functions.
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:34
@ mode
Definition: vtkX3D.h:253
@ extent
Definition: vtkX3D.h:351
#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
#define VTK_SIZEHINT(...)