VTK  9.2.6
vtkImageReslice.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkImageReslice.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=========================================================================*/
67#ifndef vtkImageReslice_h
68#define vtkImageReslice_h
69
70#include "vtkImagingCoreModule.h" // For export macro
72
73// interpolation mode constants
74#define VTK_RESLICE_NEAREST VTK_NEAREST_INTERPOLATION
75#define VTK_RESLICE_LINEAR VTK_LINEAR_INTERPOLATION
76#define VTK_RESLICE_CUBIC VTK_CUBIC_INTERPOLATION
77
78class vtkImageData;
80class vtkMatrix4x4;
84
85class VTKIMAGINGCORE_EXPORT vtkImageReslice : public vtkThreadedImageAlgorithm
86{
87public:
90
91 void PrintSelf(ostream& os, vtkIndent indent) override;
92
94
110 vtkGetObjectMacro(ResliceAxes, vtkMatrix4x4);
112
114
120 void SetResliceAxesDirectionCosines(double x0, double x1, double x2, double y0, double y1,
121 double y2, double z0, double z1, double z2);
122 void SetResliceAxesDirectionCosines(const double x[3], const double y[3], const double z[3])
123 {
124 this->SetResliceAxesDirectionCosines(x[0], x[1], x[2], y[0], y[1], y[2], z[0], z[1], z[2]);
125 }
126 void SetResliceAxesDirectionCosines(const double xyz[9])
127 {
128 this->SetResliceAxesDirectionCosines(
129 xyz[0], xyz[1], xyz[2], xyz[3], xyz[4], xyz[5], xyz[6], xyz[7], xyz[8]);
130 }
131 void GetResliceAxesDirectionCosines(double x[3], double y[3], double z[3]);
133 {
134 this->GetResliceAxesDirectionCosines(&xyz[0], &xyz[3], &xyz[6]);
135 }
137 {
138 this->GetResliceAxesDirectionCosines(this->ResliceAxesDirectionCosines);
139 return this->ResliceAxesDirectionCosines;
140 }
142
144
150 void SetResliceAxesOrigin(double x, double y, double z);
151 void SetResliceAxesOrigin(const double xyz[3])
152 {
153 this->SetResliceAxesOrigin(xyz[0], xyz[1], xyz[2]);
154 }
155 void GetResliceAxesOrigin(double xyz[3]);
157 {
158 this->GetResliceAxesOrigin(this->ResliceAxesOrigin);
159 return this->ResliceAxesOrigin;
160 }
162
164
174 vtkGetObjectMacro(ResliceTransform, vtkAbstractTransform);
176
178
188 vtkGetObjectMacro(InformationInput, vtkImageData);
190
192
199 vtkSetMacro(TransformInputSampling, vtkTypeBool);
200 vtkBooleanMacro(TransformInputSampling, vtkTypeBool);
201 vtkGetMacro(TransformInputSampling, vtkTypeBool);
203
205
210 vtkSetMacro(AutoCropOutput, vtkTypeBool);
211 vtkBooleanMacro(AutoCropOutput, vtkTypeBool);
212 vtkGetMacro(AutoCropOutput, vtkTypeBool);
214
216
219 vtkSetMacro(Wrap, vtkTypeBool);
220 vtkGetMacro(Wrap, vtkTypeBool);
221 vtkBooleanMacro(Wrap, vtkTypeBool);
223
225
229 vtkSetMacro(Mirror, vtkTypeBool);
230 vtkGetMacro(Mirror, vtkTypeBool);
231 vtkBooleanMacro(Mirror, vtkTypeBool);
233
235
245 vtkSetMacro(Border, vtkTypeBool);
246 vtkGetMacro(Border, vtkTypeBool);
247 vtkBooleanMacro(Border, vtkTypeBool);
249
251
256 vtkSetMacro(BorderThickness, double);
257 vtkGetMacro(BorderThickness, double);
259
263 vtkSetClampMacro(InterpolationMode, int, VTK_RESLICE_NEAREST, VTK_RESLICE_CUBIC);
264 vtkGetMacro(InterpolationMode, int);
265 void SetInterpolationModeToNearestNeighbor() { this->SetInterpolationMode(VTK_RESLICE_NEAREST); }
266 void SetInterpolationModeToLinear() { this->SetInterpolationMode(VTK_RESLICE_LINEAR); }
267 void SetInterpolationModeToCubic() { this->SetInterpolationMode(VTK_RESLICE_CUBIC); }
268 virtual const char* GetInterpolationModeAsString();
270
272
279
281
287 vtkSetClampMacro(SlabMode, int, VTK_IMAGE_SLAB_MIN, VTK_IMAGE_SLAB_SUM);
288 vtkGetMacro(SlabMode, int);
289 void SetSlabModeToMin() { this->SetSlabMode(VTK_IMAGE_SLAB_MIN); }
290 void SetSlabModeToMax() { this->SetSlabMode(VTK_IMAGE_SLAB_MAX); }
291 void SetSlabModeToMean() { this->SetSlabMode(VTK_IMAGE_SLAB_MEAN); }
292 void SetSlabModeToSum() { this->SetSlabMode(VTK_IMAGE_SLAB_SUM); }
293 virtual const char* GetSlabModeAsString();
295
297
300 vtkSetMacro(SlabNumberOfSlices, int);
301 vtkGetMacro(SlabNumberOfSlices, int);
303
305
310 vtkSetMacro(SlabTrapezoidIntegration, vtkTypeBool);
311 vtkBooleanMacro(SlabTrapezoidIntegration, vtkTypeBool);
312 vtkGetMacro(SlabTrapezoidIntegration, vtkTypeBool);
314
316
325 vtkSetMacro(SlabSliceSpacingFraction, double);
326 vtkGetMacro(SlabSliceSpacingFraction, double);
328
330
334 vtkSetMacro(Optimization, vtkTypeBool);
335 vtkGetMacro(Optimization, vtkTypeBool);
336 vtkBooleanMacro(Optimization, vtkTypeBool);
338
340
347 vtkSetMacro(ScalarShift, double);
348 vtkGetMacro(ScalarShift, double);
350
352
359 vtkSetMacro(ScalarScale, double);
360 vtkGetMacro(ScalarScale, double);
362
364
374 vtkSetMacro(OutputScalarType, int);
375 vtkGetMacro(OutputScalarType, int);
377
379
382 vtkSetVector4Macro(BackgroundColor, double);
383 vtkGetVector4Macro(BackgroundColor, double);
385
387
390 void SetBackgroundLevel(double v) { this->SetBackgroundColor(v, v, v, v); }
391 double GetBackgroundLevel() { return this->GetBackgroundColor()[0]; }
393
395
399 virtual void SetOutputSpacing(double x, double y, double z);
400 virtual void SetOutputSpacing(const double a[3]) { this->SetOutputSpacing(a[0], a[1], a[2]); }
401 vtkGetVector3Macro(OutputSpacing, double);
404
406
410 virtual void SetOutputOrigin(double x, double y, double z);
411 virtual void SetOutputOrigin(const double a[3]) { this->SetOutputOrigin(a[0], a[1], a[2]); }
412 vtkGetVector3Macro(OutputOrigin, double);
415
417
421 virtual void SetOutputExtent(int a, int b, int c, int d, int e, int f);
422 virtual void SetOutputExtent(const int a[6])
423 {
424 this->SetOutputExtent(a[0], a[1], a[2], a[3], a[4], a[5]);
425 }
426 vtkGetVector6Macro(OutputExtent, int);
429
431
441 vtkSetMacro(OutputDimensionality, int);
442 vtkGetMacro(OutputDimensionality, int);
444
450
455
457
465 void SetInterpolate(int t)
466 {
467 if (t && !this->GetInterpolate())
468 {
469 this->SetInterpolationModeToLinear();
470 }
471 else if (!t && this->GetInterpolate())
472 {
473 this->SetInterpolationModeToNearestNeighbor();
474 }
475 }
476 void InterpolateOn() { this->SetInterpolate(1); }
477 void InterpolateOff() { this->SetInterpolate(0); }
478 int GetInterpolate() { return (this->GetInterpolationMode() != VTK_RESLICE_NEAREST); }
480
482
490
492
496 vtkSetMacro(GenerateStencilOutput, vtkTypeBool);
497 vtkGetMacro(GenerateStencilOutput, vtkTypeBool);
498 vtkBooleanMacro(GenerateStencilOutput, vtkTypeBool);
500
502
509
510protected:
513
515 double ResliceAxesDirectionCosines[9];
516 double ResliceAxesOrigin[3];
532 double BackgroundColor[4];
533 double OutputOrigin[3];
534 double OutputSpacing[3];
535 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
587 void GetAutoCroppedOutputBounds(vtkInformation* inInfo, double bounds[6]);
588 void AllocateOutputData(vtkImageData* output, vtkInformation* outInfo, int* uExtent) override;
594 vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData, int ext[6],
595 int id) override;
596 int FillInputPortInformation(int port, vtkInformation* info) override;
597 int FillOutputPortInformation(int port, vtkInformation* info) override;
598
600 vtkAbstractTransform* GetOptimizedTransform() { return this->OptimizedTransform; }
601
602private:
603 vtkImageReslice(const vtkImageReslice&) = delete;
604 void operator=(const vtkImageReslice&) = delete;
605};
606
607#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.
int HasConvertScalars
This should be set to 1 by derived classes that override the ConvertScalars method.
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
double * GetResliceAxesOrigin()
Specify the origin for the ResliceAxes (i.e.
void GetAutoCroppedOutputBounds(vtkInformation *inInfo, 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...
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.
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.
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()
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 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:49
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:69
#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:287
#define VTK_SIZEHINT(...)