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
44#ifndef vtkImageReslice_h
45#define vtkImageReslice_h
46
47#include "vtkImagingCoreModule.h" // For export macro
49
50// interpolation mode constants
51#define VTK_RESLICE_NEAREST VTK_NEAREST_INTERPOLATION
52#define VTK_RESLICE_LINEAR VTK_LINEAR_INTERPOLATION
53#define VTK_RESLICE_CUBIC VTK_CUBIC_INTERPOLATION
54
55VTK_ABI_NAMESPACE_BEGIN
56class vtkImageData;
58class vtkMatrix4x4;
62
63class VTKIMAGINGCORE_EXPORT vtkImageReslice : public vtkThreadedImageAlgorithm
64{
65public:
68
69 void PrintSelf(ostream& os, vtkIndent indent) override;
70
72
88 vtkGetObjectMacro(ResliceAxes, vtkMatrix4x4);
90
92
98 void SetResliceAxesDirectionCosines(double x0, double x1, double x2, double y0, double y1,
99 double y2, double z0, double z1, double z2);
100 void SetResliceAxesDirectionCosines(const double x[3], const double y[3], const double z[3])
101 {
102 this->SetResliceAxesDirectionCosines(x[0], x[1], x[2], y[0], y[1], y[2], z[0], z[1], z[2]);
103 }
104 void SetResliceAxesDirectionCosines(const double xyz[9])
105 {
106 this->SetResliceAxesDirectionCosines(
107 xyz[0], xyz[1], xyz[2], xyz[3], xyz[4], xyz[5], xyz[6], xyz[7], xyz[8]);
108 }
109 void GetResliceAxesDirectionCosines(double x[3], double y[3], double z[3]);
111 {
112 this->GetResliceAxesDirectionCosines(&xyz[0], &xyz[3], &xyz[6]);
113 }
115 {
116 this->GetResliceAxesDirectionCosines(this->ResliceAxesDirectionCosines);
117 return this->ResliceAxesDirectionCosines;
118 }
120
122
128 void SetResliceAxesOrigin(double x, double y, double z);
129 void SetResliceAxesOrigin(const double xyz[3])
130 {
131 this->SetResliceAxesOrigin(xyz[0], xyz[1], xyz[2]);
132 }
133 void GetResliceAxesOrigin(double xyz[3]);
135 {
136 this->GetResliceAxesOrigin(this->ResliceAxesOrigin);
137 return this->ResliceAxesOrigin;
138 }
140
142
152 vtkGetObjectMacro(ResliceTransform, vtkAbstractTransform);
154
156
166 vtkGetObjectMacro(InformationInput, vtkImageData);
168
170
177 vtkSetMacro(TransformInputSampling, vtkTypeBool);
178 vtkBooleanMacro(TransformInputSampling, vtkTypeBool);
179 vtkGetMacro(TransformInputSampling, vtkTypeBool);
181
183
188 vtkSetMacro(AutoCropOutput, vtkTypeBool);
189 vtkBooleanMacro(AutoCropOutput, vtkTypeBool);
190 vtkGetMacro(AutoCropOutput, vtkTypeBool);
192
194
197 vtkSetMacro(Wrap, vtkTypeBool);
198 vtkGetMacro(Wrap, vtkTypeBool);
199 vtkBooleanMacro(Wrap, vtkTypeBool);
201
203
207 vtkSetMacro(Mirror, vtkTypeBool);
208 vtkGetMacro(Mirror, vtkTypeBool);
209 vtkBooleanMacro(Mirror, vtkTypeBool);
211
213
223 vtkSetMacro(Border, vtkTypeBool);
224 vtkGetMacro(Border, vtkTypeBool);
225 vtkBooleanMacro(Border, vtkTypeBool);
227
229
234 vtkSetMacro(BorderThickness, double);
235 vtkGetMacro(BorderThickness, double);
237
241 vtkSetClampMacro(InterpolationMode, int, VTK_RESLICE_NEAREST, VTK_RESLICE_CUBIC);
242 vtkGetMacro(InterpolationMode, int);
243 void SetInterpolationModeToNearestNeighbor() { this->SetInterpolationMode(VTK_RESLICE_NEAREST); }
244 void SetInterpolationModeToLinear() { this->SetInterpolationMode(VTK_RESLICE_LINEAR); }
245 void SetInterpolationModeToCubic() { this->SetInterpolationMode(VTK_RESLICE_CUBIC); }
246 virtual const char* GetInterpolationModeAsString();
248
250
257
259
265 vtkSetClampMacro(SlabMode, int, VTK_IMAGE_SLAB_MIN, VTK_IMAGE_SLAB_SUM);
266 vtkGetMacro(SlabMode, int);
267 void SetSlabModeToMin() { this->SetSlabMode(VTK_IMAGE_SLAB_MIN); }
268 void SetSlabModeToMax() { this->SetSlabMode(VTK_IMAGE_SLAB_MAX); }
269 void SetSlabModeToMean() { this->SetSlabMode(VTK_IMAGE_SLAB_MEAN); }
270 void SetSlabModeToSum() { this->SetSlabMode(VTK_IMAGE_SLAB_SUM); }
271 virtual const char* GetSlabModeAsString();
273
275
278 vtkSetMacro(SlabNumberOfSlices, int);
279 vtkGetMacro(SlabNumberOfSlices, int);
281
283
288 vtkSetMacro(SlabTrapezoidIntegration, vtkTypeBool);
289 vtkBooleanMacro(SlabTrapezoidIntegration, vtkTypeBool);
290 vtkGetMacro(SlabTrapezoidIntegration, vtkTypeBool);
292
294
303 vtkSetMacro(SlabSliceSpacingFraction, double);
304 vtkGetMacro(SlabSliceSpacingFraction, double);
306
308
312 vtkSetMacro(Optimization, vtkTypeBool);
313 vtkGetMacro(Optimization, vtkTypeBool);
314 vtkBooleanMacro(Optimization, vtkTypeBool);
316
318
325 vtkSetMacro(ScalarShift, double);
326 vtkGetMacro(ScalarShift, double);
328
330
337 vtkSetMacro(ScalarScale, double);
338 vtkGetMacro(ScalarScale, double);
340
342
352 vtkSetMacro(OutputScalarType, int);
353 vtkGetMacro(OutputScalarType, int);
355
357
360 vtkSetVector4Macro(BackgroundColor, double);
361 vtkGetVector4Macro(BackgroundColor, double);
363
365
368 void SetBackgroundLevel(double v) { this->SetBackgroundColor(v, v, v, v); }
369 double GetBackgroundLevel() { return this->GetBackgroundColor()[0]; }
371
373
377 virtual void SetOutputSpacing(double x, double y, double z);
378 virtual void SetOutputSpacing(const double a[3]) { this->SetOutputSpacing(a[0], a[1], a[2]); }
379 vtkGetVector3Macro(OutputSpacing, double);
382
384
393 virtual void SetOutputDirection(double xx, double xy, double xz, double yx, double yy, double yz,
394 double zx, double zy, double zz);
395 virtual void SetOutputDirection(const double a[9])
396 {
397 this->SetOutputDirection(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
398 }
399 vtkGetVector3Macro(OutputDirection, double);
402
404
408 virtual void SetOutputOrigin(double x, double y, double z);
409 virtual void SetOutputOrigin(const double a[3]) { this->SetOutputOrigin(a[0], a[1], a[2]); }
410 vtkGetVector3Macro(OutputOrigin, double);
413
415
419 virtual void SetOutputExtent(int a, int b, int c, int d, int e, int f);
420 virtual void SetOutputExtent(const int a[6])
421 {
422 this->SetOutputExtent(a[0], a[1], a[2], a[3], a[4], a[5]);
423 }
424 vtkGetVector6Macro(OutputExtent, int);
427
429
439 vtkSetMacro(OutputDimensionality, int);
440 vtkGetMacro(OutputDimensionality, int);
442
448
453
455
463 void SetInterpolate(int t)
464 {
465 if (t && !this->GetInterpolate())
466 {
467 this->SetInterpolationModeToLinear();
468 }
469 else if (!t && this->GetInterpolate())
470 {
471 this->SetInterpolationModeToNearestNeighbor();
472 }
473 }
474 void InterpolateOn() { this->SetInterpolate(1); }
475 void InterpolateOff() { this->SetInterpolate(0); }
476 int GetInterpolate() { return (this->GetInterpolationMode() != VTK_RESLICE_NEAREST); }
478
480
488
490
494 vtkSetMacro(GenerateStencilOutput, vtkTypeBool);
495 vtkGetMacro(GenerateStencilOutput, vtkTypeBool);
496 vtkBooleanMacro(GenerateStencilOutput, vtkTypeBool);
498
500
507
508protected:
511
513 double ResliceAxesDirectionCosines[9];
514 double ResliceAxesOrigin[3];
530 double BackgroundColor[4];
531 double OutputDirection[9];
532 double OutputOrigin[3];
533 double OutputSpacing[3];
534 int OutputExtent[6];
546
549
555
560 virtual int ConvertScalarInfo(int& scalarType, int& numComponents);
561
570 virtual void ConvertScalars(void* inPtr, void* outPtr, int inputType, int inputNumComponents,
571 int count, int idX, int idY, int idZ, int threadId);
572
573 void ConvertScalarsBase(void* inPtr, void* outPtr, int inputType, int inputNumComponents,
574 int count, int idX, int idY, int idZ, int threadId)
575 {
576 this->ConvertScalars(
577 inPtr, outPtr, inputType, inputNumComponents, count, idX, idY, idZ, threadId);
578 }
579
586
588 vtkInformation* inInfo, const double outDirection[9], double bounds[6]);
589 void AllocateOutputData(vtkImageData* output, vtkInformation* outInfo, int* uExtent) override;
595 vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData, int ext[6],
596 int id) override;
597 int FillInputPortInformation(int port, vtkInformation* info) override;
598 int FillOutputPortInformation(int port, vtkInformation* info) override;
599
601 vtkAbstractTransform* GetOptimizedTransform() { return this->OptimizedTransform; }
602
603private:
604 vtkImageReslice(const vtkImageReslice&) = delete;
605 void operator=(const vtkImageReslice&) = delete;
606};
607
608VTK_ABI_NAMESPACE_END
609#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:29
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(...)