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 =========================================================================*/
60 #ifndef vtkImageSincInterpolator_h
61 #define vtkImageSincInterpolator_h
62 
64 #include "vtkImagingCoreModule.h" // For export macro
65 
66 #define VTK_LANCZOS_WINDOW 0
67 #define VTK_KAISER_WINDOW 1
68 #define VTK_COSINE_WINDOW 2
69 #define VTK_HANN_WINDOW 3
70 #define VTK_HAMMING_WINDOW 4
71 #define VTK_BLACKMAN_WINDOW 5
72 #define VTK_BLACKMAN_HARRIS3 6
73 #define VTK_BLACKMAN_HARRIS4 7
74 #define VTK_NUTTALL_WINDOW 8
75 #define VTK_BLACKMAN_NUTTALL3 9
76 #define VTK_BLACKMAN_NUTTALL4 10
77 #define VTK_SINC_KERNEL_SIZE_MAX 32
78 
79 class vtkImageData;
81 
82 class VTKIMAGINGCORE_EXPORT vtkImageSincInterpolator : public vtkAbstractImageInterpolator
83 {
84 public:
87  void PrintSelf(ostream& os, vtkIndent indent) override;
88 
90 
98  virtual void SetWindowFunction(int mode);
99  void SetWindowFunctionToLanczos() { this->SetWindowFunction(VTK_LANCZOS_WINDOW); }
100  void SetWindowFunctionToKaiser() { this->SetWindowFunction(VTK_KAISER_WINDOW); }
101  void SetWindowFunctionToCosine() { this->SetWindowFunction(VTK_COSINE_WINDOW); }
102  void SetWindowFunctionToHann() { this->SetWindowFunction(VTK_HANN_WINDOW); }
103  void SetWindowFunctionToHamming() { this->SetWindowFunction(VTK_HAMMING_WINDOW); }
104  void SetWindowFunctionToBlackman() { this->SetWindowFunction(VTK_BLACKMAN_WINDOW); }
105  void SetWindowFunctionToBlackmanHarris3() { this->SetWindowFunction(VTK_BLACKMAN_HARRIS3); }
106  void SetWindowFunctionToBlackmanHarris4() { this->SetWindowFunction(VTK_BLACKMAN_HARRIS4); }
107  void SetWindowFunctionToNuttall() { this->SetWindowFunction(VTK_NUTTALL_WINDOW); }
108  void SetWindowFunctionToBlackmanNuttall3() { this->SetWindowFunction(VTK_BLACKMAN_NUTTALL3); }
109  void SetWindowFunctionToBlackmanNuttall4() { this->SetWindowFunction(VTK_BLACKMAN_NUTTALL4); }
110  int GetWindowFunction() { return this->WindowFunction; }
111  virtual const char* GetWindowFunctionAsString();
113 
121  void SetWindowHalfWidth(int n);
122  int GetWindowHalfWidth() { return this->WindowHalfWidth; }
123 
128  void SetUseWindowParameter(int val);
129  void UseWindowParameterOn() { this->SetUseWindowParameter(1); }
130  void UseWindowParameterOff() { this->SetUseWindowParameter(0); }
131  int GetUseWindowParameter() { return this->UseWindowParameter; }
132 
141  void SetWindowParameter(double parm);
142  double GetWindowParameter() { return this->WindowParameter; }
143 
150  void ComputeSupportSize(const double matrix[16], int support[3]) override;
151 
153 
161  void SetBlurFactors(double x, double y, double z);
162  void SetBlurFactors(const double f[3]) { this->SetBlurFactors(f[0], f[1], f[2]); }
163  void GetBlurFactors(double f[3])
164  {
165  f[0] = this->BlurFactors[0];
166  f[1] = this->BlurFactors[1];
167  f[2] = this->BlurFactors[2];
168  }
169  double* GetBlurFactors() VTK_SIZEHINT(3) { return this->BlurFactors; }
171 
182  void SetAntialiasing(int antialiasing);
183  void AntialiasingOn() { this->SetAntialiasing(1); }
184  void AntialiasingOff() { this->SetAntialiasing(0); }
185  int GetAntialiasing() { return this->Antialiasing; }
186 
194  void SetRenormalization(int renormalization);
195  void RenormalizationOn() { this->SetRenormalization(1); }
196  void RenormalizationOff() { this->SetRenormalization(0); }
197  int GetRenormalization() { return this->Renormalization; }
198 
203  bool IsSeparable() override;
204 
206 
216  void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6], int newExtent[6],
217  vtkInterpolationWeights*& weights) override;
218  void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6], int newExtent[6],
219  vtkInterpolationWeights*& weights) override;
221 
226 
227 protected:
230 
234  void InternalUpdate() override;
235 
240 
242 
246  void (**doublefunc)(vtkInterpolationInfo*, const double[3], double*)) override;
248  void (**floatfunc)(vtkInterpolationInfo*, const float[3], float*)) override;
250 
252 
256  void (**doublefunc)(vtkInterpolationWeights*, int, int, int, double*, int)) override;
258  void (**floatfunc)(vtkInterpolationWeights*, int, int, int, float*, int)) override;
260 
264  virtual void BuildKernelLookupTable();
265 
269  virtual void FreeKernelLookupTable();
270 
273  float* KernelLookupTable[3];
274  int KernelSize[3];
277  double BlurFactors[3];
278  double LastBlurFactors[3];
281 
282 private:
284  void operator=(const vtkImageSincInterpolator&) = delete;
285 };
286 
287 #endif
interpolate data values from images
topologically and geometrically regular array of data
Definition: vtkImageData.h:157
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:113
@ 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(...)