VTK  9.2.6
vtkAbstractImageInterpolator.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkAbstractImageInterpolator.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=========================================================================*/
33#ifndef vtkAbstractImageInterpolator_h
34#define vtkAbstractImageInterpolator_h
35
36#include "vtkImagingCoreModule.h" // For export macro
37#include "vtkObject.h"
38
45
46class vtkDataObject;
47class vtkImageData;
48class vtkDataArray;
51
52class VTKIMAGINGCORE_EXPORT vtkAbstractImageInterpolator : public vtkObject
53{
54public:
56 void PrintSelf(ostream& os, vtkIndent indent) override;
57
61 virtual void Initialize(vtkDataObject* data);
62
66 virtual void ReleaseData();
67
73
79 virtual void Update();
80
88 double Interpolate(double x, double y, double z, int component);
89
97 bool Interpolate(const double point[3], double* value);
98
102 void SetOutValue(double outValue);
103 double GetOutValue() { return this->OutValue; }
104
110 void SetTolerance(double tol);
111 double GetTolerance() { return this->Tolerance; }
112
119 void SetComponentOffset(int offset);
120 int GetComponentOffset() { return this->ComponentOffset; }
121
128 void SetComponentCount(int count);
129 int GetComponentCount() { return this->ComponentCount; }
130
135 int ComputeNumberOfComponents(int inputComponents);
136
143
145
150 void InterpolateIJK(const double point[3], double* value);
151 void InterpolateIJK(const float point[3], float* value);
153
155
161 bool CheckBoundsIJK(const double x[3]);
162 bool CheckBoundsIJK(const float x[3]);
164
166
174 void SetBorderModeToClamp() { this->SetBorderMode(VTK_IMAGE_BORDER_CLAMP); }
175 void SetBorderModeToRepeat() { this->SetBorderMode(VTK_IMAGE_BORDER_REPEAT); }
176 void SetBorderModeToMirror() { this->SetBorderMode(VTK_IMAGE_BORDER_MIRROR); }
177 vtkImageBorderMode GetBorderMode() { return this->BorderMode; }
180
188 void SetSlidingWindow(bool x);
189 void SlidingWindowOn() { this->SetSlidingWindow(true); }
190 void SlidingWindowOff() { this->SetSlidingWindow(false); }
191 bool GetSlidingWindow() { return this->SlidingWindow; }
192
199 virtual void ComputeSupportSize(const double matrix[16], int support[3]) = 0;
200
207 virtual bool IsSeparable() = 0;
208
210
220 virtual void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6],
221 int checkExtent[6], vtkInterpolationWeights*& weights);
222 virtual void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6],
223 int checkExtent[6], vtkInterpolationWeights*& weights);
225
230
232
238 void InterpolateRow(
239 vtkInterpolationWeights*& weights, int xIdx, int yIdx, int zIdx, double* value, int n);
240 void InterpolateRow(
241 vtkInterpolationWeights*& weights, int xIdx, int yIdx, int zIdx, float* value, int n);
243
245
248 vtkGetVector3Macro(Spacing, double);
250
252
255 vtkGetVector3Macro(Origin, double);
257
259
262 vtkGetVector6Macro(Extent, int);
264
265protected:
268
272 virtual void InternalUpdate() = 0;
273
278
280
284 void (**doublefunc)(vtkInterpolationInfo*, const double[3], double*));
286 void (**floatfunc)(vtkInterpolationInfo*, const float[3], float*));
288
290
294 void (**doublefunc)(vtkInterpolationWeights*, int, int, int, double*, int));
296 void (**floatfunc)(vtkInterpolationWeights*, int, int, int, float*, int));
298
300
304 void (**doublefunc)(vtkInterpolationWeights*, int, int, int, double*, int));
306 void (**floatfunc)(vtkInterpolationWeights*, int, int, int, float*, int));
308
310 double StructuredBoundsDouble[6];
311 float StructuredBoundsFloat[6];
312 int Extent[6];
313 double Spacing[3];
314 double Origin[3];
315 double OutValue;
316 double Tolerance;
321
322 // information needed by the interpolator funcs
324
325 void (*InterpolationFuncDouble)(
326 vtkInterpolationInfo* info, const double point[3], double* outPtr);
327 void (*InterpolationFuncFloat)(vtkInterpolationInfo* info, const float point[3], float* outPtr);
328
329 void (*RowInterpolationFuncDouble)(
330 vtkInterpolationWeights* weights, int idX, int idY, int idZ, double* outPtr, int n);
331 void (*RowInterpolationFuncFloat)(
332 vtkInterpolationWeights* weights, int idX, int idY, int idZ, float* outPtr, int n);
333
334private:
336 void operator=(const vtkAbstractImageInterpolator&) = delete;
337};
338
339inline void vtkAbstractImageInterpolator::InterpolateIJK(const double point[3], double* value)
340{
341 this->InterpolationFuncDouble(this->InterpolationInfo, point, value);
342}
343
344inline void vtkAbstractImageInterpolator::InterpolateIJK(const float point[3], float* value)
345{
346 this->InterpolationFuncFloat(this->InterpolationInfo, point, value);
347}
348
350{
351 const double* bounds = this->StructuredBoundsDouble;
352 return !((x[0] < bounds[0]) || (x[0] > bounds[1]) || (x[1] < bounds[2]) || (x[1] > bounds[3]) ||
353 (x[2] < bounds[4]) || (x[2] > bounds[5]));
354}
355
357{
358 const float* bounds = this->StructuredBoundsFloat;
359 return !((x[0] < bounds[0]) || (x[0] > bounds[1]) || (x[1] < bounds[2]) || (x[1] > bounds[3]) ||
360 (x[2] < bounds[4]) || (x[2] > bounds[5]));
361}
362
364 vtkInterpolationWeights*& weights, int xIdx, int yIdx, int zIdx, double* value, int n)
365{
366 this->RowInterpolationFuncDouble(weights, xIdx, yIdx, zIdx, value, n);
367}
368
370 vtkInterpolationWeights*& weights, int xIdx, int yIdx, int zIdx, float* value, int n)
371{
372 this->RowInterpolationFuncFloat(weights, xIdx, yIdx, zIdx, value, n);
373}
374
375#endif
interpolate data values from images
virtual void Update()
Update the interpolator.
void SetBorderMode(vtkImageBorderMode mode)
The border mode (default: clamp).
virtual void PrecomputeWeightsForExtent(const float matrix[16], const int extent[6], int checkExtent[6], vtkInterpolationWeights *&weights)
If the data is going to be sampled on a regular grid, then the interpolation weights can be precomput...
void(* InterpolationFuncDouble)(vtkInterpolationInfo *info, const double point[3], double *outPtr)
virtual void ComputeSupportSize(const double matrix[16], int support[3])=0
Get the support size for use in computing update extents.
virtual bool IsSeparable()=0
True if the interpolation is separable, which means that the weights can be precomputed in order to a...
void SetBorderModeToClamp()
The border mode (default: clamp).
~vtkAbstractImageInterpolator() override
int ComputeNumberOfComponents(int inputComponents)
Compute the number of output components based on the ComponentOffset, ComponentCount,...
void SetComponentCount(int count)
This method specifies the number of components to extract.
virtual void GetRowInterpolationFunc(void(**floatfunc)(vtkInterpolationWeights *, int, int, int, float *, int))
Get the row interpolation functions.
virtual void GetSlidingWindowFunc(void(**doublefunc)(vtkInterpolationWeights *, int, int, int, double *, int))
Get the sliding window interpolation functions.
void SetComponentOffset(int offset)
This method specifies which component of the input will be interpolated, or if ComponentCount is also...
virtual void ReleaseData()
Release any data stored by the interpolator.
void SetSlidingWindow(bool x)
Enable sliding window for separable kernels.
virtual void Initialize(vtkDataObject *data)
Initialize the interpolator with the data that you wish to interpolate.
bool CheckBoundsIJK(const double x[3])
Check an x,y,z point to see if it is within the bounds for the structured coords of the image.
virtual void PrecomputeWeightsForExtent(const double matrix[16], const int extent[6], int checkExtent[6], vtkInterpolationWeights *&weights)
If the data is going to be sampled on a regular grid, then the interpolation weights can be precomput...
void SetBorderModeToMirror()
The border mode (default: clamp).
double Interpolate(double x, double y, double z, int component)
Get the result of interpolating the specified component of the input data, which should be set to zer...
vtkImageBorderMode GetBorderMode()
The border mode (default: clamp).
void InterpolateRow(vtkInterpolationWeights *&weights, int xIdx, int yIdx, int zIdx, double *value, int n)
Get a row of samples, using the weights that were precomputed by PrecomputeWeightsForExtent.
void SetOutValue(double outValue)
The value to return when the point is out of bounds.
void(* RowInterpolationFuncDouble)(vtkInterpolationWeights *weights, int idX, int idY, int idZ, double *outPtr, int n)
void(* InterpolationFuncFloat)(vtkInterpolationInfo *info, const float point[3], float *outPtr)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void GetSlidingWindowFunc(void(**floatfunc)(vtkInterpolationWeights *, int, int, int, float *, int))
Get the sliding window interpolation functions.
int GetNumberOfComponents()
Get the number of components that will be returned when Interpolate() is called.
virtual void FreePrecomputedWeights(vtkInterpolationWeights *&weights)
Free the weights that were provided by PrecomputeWeightsForExtent.
void DeepCopy(vtkAbstractImageInterpolator *obj)
Copy the interpolator.
virtual void GetRowInterpolationFunc(void(**doublefunc)(vtkInterpolationWeights *, int, int, int, double *, int))
Get the row interpolation functions.
virtual void InternalDeepCopy(vtkAbstractImageInterpolator *obj)=0
Subclass-specific copy.
virtual void GetInterpolationFunc(void(**doublefunc)(vtkInterpolationInfo *, const double[3], double *))
Get the interpolation functions.
void SetBorderModeToRepeat()
The border mode (default: clamp).
void(* RowInterpolationFuncFloat)(vtkInterpolationWeights *weights, int idX, int idY, int idZ, float *outPtr, int n)
virtual void InternalUpdate()=0
Subclass-specific updates.
virtual void GetInterpolationFunc(void(**floatfunc)(vtkInterpolationInfo *, const float[3], float *))
Get the interpolation functions.
void InterpolateIJK(const double point[3], double *value)
A version of Interpolate that takes structured coords instead of data coords.
const char * GetBorderModeAsString()
The border mode (default: clamp).
bool Interpolate(const double point[3], double *value)
Sample the input data.
void SetTolerance(double tol)
The tolerance to apply when checking whether a point is out of bounds.
abstract superclass for arrays of numeric data
general representation of visualization data
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:40
abstract base class for most VTK objects
Definition vtkObject.h:63