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
64VTK_ABI_NAMESPACE_BEGIN
65class vtkImageData;
67class vtkMatrix4x4;
71
72class VTKIMAGINGCORE_EXPORT vtkImageReslice : public vtkThreadedImageAlgorithm
73{
74public:
77
78 void PrintSelf(ostream& os, vtkIndent indent) override;
79
81
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]);
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
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
517protected:
520
522 double ResliceAxesDirectionCosines[9];
523 double ResliceAxesOrigin[3];
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;
606 int FillInputPortInformation(int port, vtkInformation* info) override;
607 int FillOutputPortInformation(int port, vtkInformation* info) override;
608
610 vtkAbstractTransform* GetOptimizedTransform() { return this->OptimizedTransform; }
611
612private:
613 vtkImageReslice(const vtkImageReslice&) = delete;
614 void operator=(const vtkImageReslice&) = delete;
615};
616
617VTK_ABI_NAMESPACE_END
618#endif
interpolate data values from images
superclass for all geometric transformations
Proxy object to connect input/output ports.
vtkAlgorithmOutput * GetOutputPort()
general representation of visualization data
Detect and break reference loops.
topologically and geometrically regular array of data
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.
vtkImageStencilData * GetStencil()
Use a stencil to limit the calculations to a specific region of the output.
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...
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.
vtkTypeBool TransformInputSampling
void GetAutoCroppedOutputBounds(vtkInformation *inInfo, const double outDirection[9], double bounds[6])
double * GetResliceAxesOrigin()
Specify the origin for the ResliceAxes (i.e.
virtual void SetResliceTransform(vtkAbstractTransform *)
Set a transform to be applied to the resampling grid that has been defined via the ResliceAxes and th...
int RequestInformationBase(vtkInformationVector **, vtkInformationVector *)
For derived classes, this should be called at the very end of RequestInformation() to ensure that var...
virtual const char * GetInterpolationModeAsString()
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.
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,...
vtkImageStencilData * GetStencilOutput()
Get the output stencil.
virtual vtkAbstractImageInterpolator * GetInterpolator()
Set the interpolator to use.
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.
int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Subclasses can reimplement this method to translate the update extent requests from each output port ...
double SlabSliceSpacingFraction
vtkImageData * AllocateOutputData(vtkDataObject *, vtkInformation *) override
Allocate the output data.
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.
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).
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
vtkMatrix4x4 * ResliceAxes
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 in response to a REQUEST_DATA request from the executive.
static vtkImageReslice * New()
void ConvertScalarsBase(void *inPtr, void *outPtr, int inputType, int inputNumComponents, int count, int idX, int idY, int idZ, int threadId)
double * GetResliceAxesDirectionCosines()
Specify the direction cosines for the ResliceAxes (i.e.
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
vtkAlgorithmOutput * GetStencilOutputPort()
Get the output stencil.
void SetInterpolationModeToNearestNeighbor()
void SetOutputExtentToDefault()
Set the extent for the output data.
virtual const char * GetSlabModeAsString()
Set the slab mode, for generating thick slices.
void SetInterpolate(int t)
Convenient methods for switching between nearest-neighbor and linear interpolation.
vtkAbstractTransform * GetOptimizedTransform()
void GetResliceAxesDirectionCosines(double x[3], double y[3], double z[3])
Specify the direction cosines for the ResliceAxes (i.e.
vtkMatrix4x4 * GetIndexMatrix(vtkInformation *inInfo, vtkInformation *outInfo)
vtkImageData * InformationInput
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
Superclass for mapping scalar values to colors.
Generic filter that has one input.
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(...)