VTK  9.2.5
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 =========================================================================*/
66 #ifndef vtkImageSincInterpolator_h
67 #define vtkImageSincInterpolator_h
68 
70 #include "vtkImagingCoreModule.h" // For export macro
71 
72 #define VTK_LANCZOS_WINDOW 0
73 #define VTK_KAISER_WINDOW 1
74 #define VTK_COSINE_WINDOW 2
75 #define VTK_HANN_WINDOW 3
76 #define VTK_HAMMING_WINDOW 4
77 #define VTK_BLACKMAN_WINDOW 5
78 #define VTK_BLACKMAN_HARRIS3 6
79 #define VTK_BLACKMAN_HARRIS4 7
80 #define VTK_NUTTALL_WINDOW 8
81 #define VTK_BLACKMAN_NUTTALL3 9
82 #define VTK_BLACKMAN_NUTTALL4 10
83 #define VTK_SINC_KERNEL_SIZE_MAX 32
84 
85 class vtkImageData;
87 
88 class VTKIMAGINGCORE_EXPORT vtkImageSincInterpolator : public vtkAbstractImageInterpolator
89 {
90 public:
93  void PrintSelf(ostream& os, vtkIndent indent) override;
94 
96 
104  virtual void SetWindowFunction(int mode);
105  void SetWindowFunctionToLanczos() { this->SetWindowFunction(VTK_LANCZOS_WINDOW); }
106  void SetWindowFunctionToKaiser() { this->SetWindowFunction(VTK_KAISER_WINDOW); }
107  void SetWindowFunctionToCosine() { this->SetWindowFunction(VTK_COSINE_WINDOW); }
108  void SetWindowFunctionToHann() { this->SetWindowFunction(VTK_HANN_WINDOW); }
109  void SetWindowFunctionToHamming() { this->SetWindowFunction(VTK_HAMMING_WINDOW); }
110  void SetWindowFunctionToBlackman() { this->SetWindowFunction(VTK_BLACKMAN_WINDOW); }
111  void SetWindowFunctionToBlackmanHarris3() { this->SetWindowFunction(VTK_BLACKMAN_HARRIS3); }
112  void SetWindowFunctionToBlackmanHarris4() { this->SetWindowFunction(VTK_BLACKMAN_HARRIS4); }
113  void SetWindowFunctionToNuttall() { this->SetWindowFunction(VTK_NUTTALL_WINDOW); }
114  void SetWindowFunctionToBlackmanNuttall3() { this->SetWindowFunction(VTK_BLACKMAN_NUTTALL3); }
115  void SetWindowFunctionToBlackmanNuttall4() { this->SetWindowFunction(VTK_BLACKMAN_NUTTALL4); }
116  int GetWindowFunction() { return this->WindowFunction; }
117  virtual const char* GetWindowFunctionAsString();
119 
127  void SetWindowHalfWidth(int n);
128  int GetWindowHalfWidth() { return this->WindowHalfWidth; }
129 
134  void SetUseWindowParameter(int val);
135  void UseWindowParameterOn() { this->SetUseWindowParameter(1); }
136  void UseWindowParameterOff() { this->SetUseWindowParameter(0); }
137  int GetUseWindowParameter() { return this->UseWindowParameter; }
138 
147  void SetWindowParameter(double parm);
148  double GetWindowParameter() { return this->WindowParameter; }
149 
156  void ComputeSupportSize(const double matrix[16], int support[3]) override;
157 
159 
167  void SetBlurFactors(double x, double y, double z);
168  void SetBlurFactors(const double f[3]) { this->SetBlurFactors(f[0], f[1], f[2]); }
169  void GetBlurFactors(double f[3])
170  {
171  f[0] = this->BlurFactors[0];
172  f[1] = this->BlurFactors[1];
173  f[2] = this->BlurFactors[2];
174  }
175  double* GetBlurFactors() VTK_SIZEHINT(3) { return this->BlurFactors; }
177 
188  void SetAntialiasing(int antialiasing);
189  void AntialiasingOn() { this->SetAntialiasing(1); }
190  void AntialiasingOff() { this->SetAntialiasing(0); }
191  int GetAntialiasing() { return this->Antialiasing; }
192 
200  void SetRenormalization(int renormalization);
201  void RenormalizationOn() { this->SetRenormalization(1); }
202  void RenormalizationOff() { this->SetRenormalization(0); }
203  int GetRenormalization() { return this->Renormalization; }
204 
209  bool IsSeparable() override;
210 
212 
222  void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6], int newExtent[6],
223  vtkInterpolationWeights*& weights) override;
224  void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6], int newExtent[6],
225  vtkInterpolationWeights*& weights) override;
227 
232 
233 protected:
236 
240  void InternalUpdate() override;
241 
246 
248 
252  void (**doublefunc)(vtkInterpolationInfo*, const double[3], double*)) override;
254  void (**floatfunc)(vtkInterpolationInfo*, const float[3], float*)) override;
256 
258 
262  void (**doublefunc)(vtkInterpolationWeights*, int, int, int, double*, int)) override;
264  void (**floatfunc)(vtkInterpolationWeights*, int, int, int, float*, int)) override;
266 
270  virtual void BuildKernelLookupTable();
271 
275  virtual void FreeKernelLookupTable();
276 
279  float* KernelLookupTable[3];
280  int KernelSize[3];
283  double BlurFactors[3];
284  double LastBlurFactors[3];
287 
288 private:
290  void operator=(const vtkImageSincInterpolator&) = delete;
291 };
292 
293 #endif
interpolate data values from images
topologically and geometrically regular array of data
Definition: vtkImageData.h:163
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:119
@ 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(...)