VTK  9.3.0
vtkImageReslice.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
53 #ifndef vtkImageReslice_h
54 #define vtkImageReslice_h
55 
56 #include "vtkImagingCoreModule.h" // For export macro
58 
59 // interpolation mode constants
60 #define VTK_RESLICE_NEAREST VTK_NEAREST_INTERPOLATION
61 #define VTK_RESLICE_LINEAR VTK_LINEAR_INTERPOLATION
62 #define VTK_RESLICE_CUBIC VTK_CUBIC_INTERPOLATION
63 
64 VTK_ABI_NAMESPACE_BEGIN
65 class vtkImageData;
67 class vtkMatrix4x4;
69 class vtkScalarsToColors;
71 
72 class VTKIMAGINGCORE_EXPORT vtkImageReslice : public vtkThreadedImageAlgorithm
73 {
74 public:
75  static vtkImageReslice* New();
77 
78  void PrintSelf(ostream& os, vtkIndent indent) override;
79 
81 
96  virtual void SetResliceAxes(vtkMatrix4x4*);
97  vtkGetObjectMacro(ResliceAxes, vtkMatrix4x4);
99 
101 
107  void SetResliceAxesDirectionCosines(double x0, double x1, double x2, double y0, double y1,
108  double y2, double z0, double z1, double z2);
109  void SetResliceAxesDirectionCosines(const double x[3], const double y[3], const double z[3])
110  {
111  this->SetResliceAxesDirectionCosines(x[0], x[1], x[2], y[0], y[1], y[2], z[0], z[1], z[2]);
112  }
113  void SetResliceAxesDirectionCosines(const double xyz[9])
114  {
115  this->SetResliceAxesDirectionCosines(
116  xyz[0], xyz[1], xyz[2], xyz[3], xyz[4], xyz[5], xyz[6], xyz[7], xyz[8]);
117  }
118  void GetResliceAxesDirectionCosines(double x[3], double y[3], double z[3]);
119  void GetResliceAxesDirectionCosines(double xyz[9])
120  {
121  this->GetResliceAxesDirectionCosines(&xyz[0], &xyz[3], &xyz[6]);
122  }
124  {
125  this->GetResliceAxesDirectionCosines(this->ResliceAxesDirectionCosines);
126  return this->ResliceAxesDirectionCosines;
127  }
129 
131 
137  void SetResliceAxesOrigin(double x, double y, double z);
138  void SetResliceAxesOrigin(const double xyz[3])
139  {
140  this->SetResliceAxesOrigin(xyz[0], xyz[1], xyz[2]);
141  }
142  void GetResliceAxesOrigin(double xyz[3]);
144  {
145  this->GetResliceAxesOrigin(this->ResliceAxesOrigin);
146  return this->ResliceAxesOrigin;
147  }
149 
151 
161  vtkGetObjectMacro(ResliceTransform, vtkAbstractTransform);
163 
165 
175  vtkGetObjectMacro(InformationInput, vtkImageData);
177 
179 
186  vtkSetMacro(TransformInputSampling, vtkTypeBool);
187  vtkBooleanMacro(TransformInputSampling, vtkTypeBool);
188  vtkGetMacro(TransformInputSampling, vtkTypeBool);
190 
192 
197  vtkSetMacro(AutoCropOutput, vtkTypeBool);
198  vtkBooleanMacro(AutoCropOutput, vtkTypeBool);
199  vtkGetMacro(AutoCropOutput, vtkTypeBool);
201 
203 
206  vtkSetMacro(Wrap, vtkTypeBool);
207  vtkGetMacro(Wrap, vtkTypeBool);
208  vtkBooleanMacro(Wrap, vtkTypeBool);
210 
212 
216  vtkSetMacro(Mirror, vtkTypeBool);
217  vtkGetMacro(Mirror, vtkTypeBool);
218  vtkBooleanMacro(Mirror, vtkTypeBool);
220 
222 
232  vtkSetMacro(Border, vtkTypeBool);
233  vtkGetMacro(Border, vtkTypeBool);
234  vtkBooleanMacro(Border, vtkTypeBool);
236 
238 
243  vtkSetMacro(BorderThickness, double);
244  vtkGetMacro(BorderThickness, double);
246 
250  vtkSetClampMacro(InterpolationMode, int, VTK_RESLICE_NEAREST, VTK_RESLICE_CUBIC);
251  vtkGetMacro(InterpolationMode, int);
252  void SetInterpolationModeToNearestNeighbor() { this->SetInterpolationMode(VTK_RESLICE_NEAREST); }
253  void SetInterpolationModeToLinear() { this->SetInterpolationMode(VTK_RESLICE_LINEAR); }
254  void SetInterpolationModeToCubic() { this->SetInterpolationMode(VTK_RESLICE_CUBIC); }
255  virtual const char* GetInterpolationModeAsString();
257 
259 
266 
268 
274  vtkSetClampMacro(SlabMode, int, VTK_IMAGE_SLAB_MIN, VTK_IMAGE_SLAB_SUM);
275  vtkGetMacro(SlabMode, int);
276  void SetSlabModeToMin() { this->SetSlabMode(VTK_IMAGE_SLAB_MIN); }
277  void SetSlabModeToMax() { this->SetSlabMode(VTK_IMAGE_SLAB_MAX); }
278  void SetSlabModeToMean() { this->SetSlabMode(VTK_IMAGE_SLAB_MEAN); }
279  void SetSlabModeToSum() { this->SetSlabMode(VTK_IMAGE_SLAB_SUM); }
280  virtual const char* GetSlabModeAsString();
282 
284 
287  vtkSetMacro(SlabNumberOfSlices, int);
288  vtkGetMacro(SlabNumberOfSlices, int);
290 
292 
297  vtkSetMacro(SlabTrapezoidIntegration, vtkTypeBool);
298  vtkBooleanMacro(SlabTrapezoidIntegration, vtkTypeBool);
299  vtkGetMacro(SlabTrapezoidIntegration, vtkTypeBool);
301 
303 
312  vtkSetMacro(SlabSliceSpacingFraction, double);
313  vtkGetMacro(SlabSliceSpacingFraction, double);
315 
317 
321  vtkSetMacro(Optimization, vtkTypeBool);
322  vtkGetMacro(Optimization, vtkTypeBool);
323  vtkBooleanMacro(Optimization, vtkTypeBool);
325 
327 
334  vtkSetMacro(ScalarShift, double);
335  vtkGetMacro(ScalarShift, double);
337 
339 
346  vtkSetMacro(ScalarScale, double);
347  vtkGetMacro(ScalarScale, double);
349 
351 
361  vtkSetMacro(OutputScalarType, int);
362  vtkGetMacro(OutputScalarType, int);
364 
366 
369  vtkSetVector4Macro(BackgroundColor, double);
370  vtkGetVector4Macro(BackgroundColor, double);
372 
374 
377  void SetBackgroundLevel(double v) { this->SetBackgroundColor(v, v, v, v); }
378  double GetBackgroundLevel() { return this->GetBackgroundColor()[0]; }
380 
382 
386  virtual void SetOutputSpacing(double x, double y, double z);
387  virtual void SetOutputSpacing(const double a[3]) { this->SetOutputSpacing(a[0], a[1], a[2]); }
388  vtkGetVector3Macro(OutputSpacing, double);
391 
393 
402  virtual void SetOutputDirection(double xx, double xy, double xz, double yx, double yy, double yz,
403  double zx, double zy, double zz);
404  virtual void SetOutputDirection(const double a[9])
405  {
406  this->SetOutputDirection(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
407  }
408  vtkGetVector3Macro(OutputDirection, double);
411 
413 
417  virtual void SetOutputOrigin(double x, double y, double z);
418  virtual void SetOutputOrigin(const double a[3]) { this->SetOutputOrigin(a[0], a[1], a[2]); }
419  vtkGetVector3Macro(OutputOrigin, double);
422 
424 
428  virtual void SetOutputExtent(int a, int b, int c, int d, int e, int f);
429  virtual void SetOutputExtent(const int a[6])
430  {
431  this->SetOutputExtent(a[0], a[1], a[2], a[3], a[4], a[5]);
432  }
433  vtkGetVector6Macro(OutputExtent, int);
436 
438 
448  vtkSetMacro(OutputDimensionality, int);
449  vtkGetMacro(OutputDimensionality, int);
451 
456  vtkMTimeType GetMTime() override;
457 
462 
464 
472  void SetInterpolate(int t)
473  {
474  if (t && !this->GetInterpolate())
475  {
476  this->SetInterpolationModeToLinear();
477  }
478  else if (!t && this->GetInterpolate())
479  {
480  this->SetInterpolationModeToNearestNeighbor();
481  }
482  }
483  void InterpolateOn() { this->SetInterpolate(1); }
484  void InterpolateOff() { this->SetInterpolate(0); }
485  int GetInterpolate() { return (this->GetInterpolationMode() != VTK_RESLICE_NEAREST); }
487 
489 
497 
499 
503  vtkSetMacro(GenerateStencilOutput, vtkTypeBool);
504  vtkGetMacro(GenerateStencilOutput, vtkTypeBool);
505  vtkBooleanMacro(GenerateStencilOutput, vtkTypeBool);
507 
509 
516 
517 protected:
519  ~vtkImageReslice() override;
520 
522  double ResliceAxesDirectionCosines[9];
523  double ResliceAxesOrigin[3];
532  int SlabMode;
536  double ScalarShift;
537  double ScalarScale;
539  double BackgroundColor[4];
540  double OutputDirection[9];
541  double OutputOrigin[3];
542  double OutputSpacing[3];
543  int OutputExtent[6];
555 
558 
564 
569  virtual int ConvertScalarInfo(int& scalarType, int& numComponents);
570 
579  virtual void ConvertScalars(void* inPtr, void* outPtr, int inputType, int inputNumComponents,
580  int count, int idX, int idY, int idZ, int threadId);
581 
582  void ConvertScalarsBase(void* inPtr, void* outPtr, int inputType, int inputNumComponents,
583  int count, int idX, int idY, int idZ, int threadId)
584  {
585  this->ConvertScalars(
586  inPtr, outPtr, inputType, inputNumComponents, count, idX, idY, idZ, threadId);
587  }
588 
595 
597  vtkInformation* inInfo, const double outDirection[9], double bounds[6]);
598  void AllocateOutputData(vtkImageData* output, vtkInformation* outInfo, int* uExtent) override;
604  vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData, int ext[6],
605  int id) override;
608 
610  vtkAbstractTransform* GetOptimizedTransform() { return this->OptimizedTransform; }
611 
612 private:
613  vtkImageReslice(const vtkImageReslice&) = delete;
614  void operator=(const vtkImageReslice&) = delete;
615 };
616 
617 VTK_ABI_NAMESPACE_END
618 #endif
interpolate data values from images
superclass for all geometric transformations
Proxy object to connect input/output ports.
vtkAlgorithmOutput * GetOutputPort()
Definition: vtkAlgorithm.h:509
general representation of visualization data
Definition: vtkDataObject.h:64
Detect and break reference loops.
topologically and geometrically regular array of data
Definition: vtkImageData.h:52
Reslices a volume along a new set of axes.
void InterpolateOff()
Convenient methods for switching between nearest-neighbor and linear interpolation.
void SetResliceAxesDirectionCosines(const double x[3], const double y[3], const double z[3])
Specify the direction cosines for the ResliceAxes (i.e.
virtual void SetOutputOrigin(const double a[3])
Set the origin for the output data.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void ReportReferences(vtkGarbageCollector *) override
Report object referenced by instances of this class.
int FillInputPortInformation(int port, vtkInformation *info) override
These method should be reimplemented by subclasses that have more than a single input or single outpu...
double * GetResliceAxesOrigin()
Specify the origin for the ResliceAxes (i.e.
virtual void SetOutputExtent(int a, int b, int c, int d, int e, int f)
Set the extent for the output data.
void SetResliceAxesDirectionCosines(const double xyz[9])
Specify the direction cosines for the ResliceAxes (i.e.
virtual const char * GetInterpolationModeAsString()
vtkTypeBool Wrap
vtkTypeBool TransformInputSampling
void GetAutoCroppedOutputBounds(vtkInformation *inInfo, const double outDirection[9], double bounds[6])
virtual void SetResliceTransform(vtkAbstractTransform *)
Set a transform to be applied to the resampling grid that has been defined via the ResliceAxes and th...
vtkTypeBool Border
int RequestInformationBase(vtkInformationVector **, vtkInformationVector *)
For derived classes, this should be called at the very end of RequestInformation() to ensure that var...
void SetResliceAxesDirectionCosines(double x0, double x1, double x2, double y0, double y1, double y2, double z0, double z1, double z2)
Specify the direction cosines for the ResliceAxes (i.e.
vtkTypeBool HasConvertScalars
This should be set to 1 by derived classes that override the ConvertScalars method.
static vtkImageReslice * New()
void SetSlabModeToMean()
Set the slab mode, for generating thick slices.
void InterpolateOn()
Convenient methods for switching between nearest-neighbor and linear interpolation.
void SetResliceAxesOrigin(double x, double y, double z)
Specify the origin for the ResliceAxes (i.e.
void SetResliceAxesOrigin(const double xyz[3])
Specify the origin for the ResliceAxes (i.e.
virtual void ConvertScalars(void *inPtr, void *outPtr, int inputType, int inputNumComponents, int count, int idX, int idY, int idZ, int threadId)
This should be overridden by derived classes that operate on the interpolated data before it is place...
void GetResliceAxesDirectionCosines(double xyz[9])
Specify the direction cosines for the ResliceAxes (i.e.
virtual void SetOutputExtent(const int a[6])
Set the extent for the output data.
virtual void SetOutputOrigin(double x, double y, double z)
Set the origin for the output data.
vtkTypeBool Optimization
int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Subclasses can reimplement this method to collect information from their inputs and set information f...
void SetOutputSpacingToDefault()
Set the voxel spacing for the output data.
virtual void SetOutputDirection(const double a[9])
Set the direction for the output data.
void SetStencilOutput(vtkImageStencilData *stencil)
Get the output stencil.
void ThreadedRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, int ext[6], int id) override
If the subclass does not define an Execute method, then the task will be broken up,...
double * GetResliceAxesDirectionCosines()
Specify the direction cosines for the ResliceAxes (i.e.
void SetInterpolationModeToCubic()
virtual void SetOutputDirection(double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz)
Set the direction for the output data.
vtkAlgorithmOutput * GetStencilOutputPort()
Get the output stencil.
int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Subclasses can reimplement this method to translate the update extent requests from each output port ...
double SlabSliceSpacingFraction
vtkTypeBool Mirror
int GetInterpolate()
Convenient methods for switching between nearest-neighbor and linear interpolation.
void GetResliceAxesOrigin(double xyz[3])
Specify the origin for the ResliceAxes (i.e.
void SetSlabModeToMin()
Set the slab mode, for generating thick slices.
vtkImageStencilData * GetStencilOutput()
Get the output stencil.
virtual void SetOutputSpacing(const double a[3])
Set the voxel spacing for the output data.
double GetBackgroundLevel()
Set background grey level (for single-component images).
vtkImageStencilData * GetStencil()
Use a stencil to limit the calculations to a specific region of the output.
virtual int ConvertScalarInfo(int &scalarType, int &numComponents)
This should be overridden by derived classes that operate on the interpolated data before it is place...
~vtkImageReslice() override
void SetOutputDirectionToDefault()
Set the direction for the output data.
void AllocateOutputData(vtkImageData *output, vtkInformation *outInfo, int *uExtent) override
Allocate the output data.
void SetSlabModeToMax()
Set the slab mode, for generating thick slices.
vtkAbstractTransform * OptimizedTransform
vtkTypeBool SlabTrapezoidIntegration
vtkMatrix4x4 * IndexMatrix
vtkMTimeType GetMTime() override
When determining the modified time of the filter, this check the modified time of the transform and m...
vtkTypeBool AutoCropOutput
vtkTypeBool GenerateStencilOutput
virtual const char * GetSlabModeAsString()
Set the slab mode, for generating thick slices.
vtkMatrix4x4 * ResliceAxes
vtkAbstractTransform * GetOptimizedTransform()
virtual void SetOutputSpacing(double x, double y, double z)
Set the voxel spacing for the output data.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void ConvertScalarsBase(void *inPtr, void *outPtr, int inputType, int inputNumComponents, int count, int idX, int idY, int idZ, int threadId)
vtkAbstractTransform * ResliceTransform
virtual void SetInterpolator(vtkAbstractImageInterpolator *sampler)
Set the interpolator to use.
virtual void SetResliceAxes(vtkMatrix4x4 *)
This method is used to set up the axes for the output voxels.
vtkAbstractImageInterpolator * Interpolator
virtual vtkAbstractImageInterpolator * GetInterpolator()
Set the interpolator to use.
void SetInterpolationModeToNearestNeighbor()
vtkMatrix4x4 * GetIndexMatrix(vtkInformation *inInfo, vtkInformation *outInfo)
void SetOutputExtentToDefault()
Set the extent for the output data.
void SetInterpolate(int t)
Convenient methods for switching between nearest-neighbor and linear interpolation.
void GetResliceAxesDirectionCosines(double x[3], double y[3], double z[3])
Specify the direction cosines for the ResliceAxes (i.e.
vtkImageData * InformationInput
vtkImageData * AllocateOutputData(vtkDataObject *, vtkInformation *) override
Allocate the output data.
void SetBackgroundLevel(double v)
Set background grey level (for single-component images).
void SetOutputOriginToDefault()
Set the origin for the output data.
virtual void SetInformationInput(vtkImageData *)
Set a vtkImageData from which the default Spacing, Origin, and WholeExtent of the output will be copi...
void SetInterpolationModeToLinear()
int FillOutputPortInformation(int port, vtkInformation *info) override
These method should be reimplemented by subclasses that have more than a single input or single outpu...
void SetStencilData(vtkImageStencilData *stencil)
Use a stencil to limit the calculations to a specific region of the output.
void SetSlabModeToSum()
Set the slab mode, for generating thick slices.
efficient description of an image stencil
a simple class to control print indentation
Definition: vtkIndent.h:38
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:40
Superclass for mapping scalar values to colors.
Generic filter that has one input.
@ info
Definition: vtkX3D.h:376
@ port
Definition: vtkX3D.h:447
int vtkTypeBool
Definition: vtkABI.h:64
#define VTK_RESLICE_CUBIC
#define VTK_RESLICE_NEAREST
#define VTK_RESLICE_LINEAR
#define VTK_IMAGE_SLAB_MAX
#define VTK_IMAGE_SLAB_MIN
#define VTK_IMAGE_SLAB_SUM
#define VTK_IMAGE_SLAB_MEAN
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
#define VTK_SIZEHINT(...)