Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkOrientedImageDataResample.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
4 Queen's University, Kingston, ON, Canada. All Rights Reserved.
5
6 See COPYRIGHT.txt
7 or http://www.slicer.org/copyright/copyright.txt for details.
8
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14
15 This file was originally developed by Csaba Pinter, PerkLab, Queen's University
16 and was supported through the Applied Cancer Research Unit program of Cancer Care
17 Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care
18
19==============================================================================*/
20
21#ifndef __vtkOrientedImageDataResample_h
22#define __vtkOrientedImageDataResample_h
23
24// Segmentation includes
25#include "vtkSegmentationCoreConfigure.h"
26
27// VTK includes
28#include "vtkObject.h"
29
30// std includes
31#include <vector>
32#include <cmath> // for fabs
33
34class vtkImageData;
35class vtkMatrix4x4;
37class vtkTransform;
38class vtkAbstractTransform;
39
41class vtkSegmentationCore_EXPORT vtkOrientedImageDataResample : public vtkObject
42{
43public:
45 vtkTypeMacro(vtkOrientedImageDataResample,vtkObject);
46
47 enum
48 {
51 OPERATION_MASKING
52 };
53
61 static bool ResampleOrientedImageToReferenceGeometry(vtkOrientedImageData* inputImage, vtkMatrix4x4* referenceGeometryMatrix, vtkOrientedImageData* outputImage, bool linearInterpolation=false);
62
72 static bool ResampleOrientedImageToReferenceOrientedImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* referenceImage, vtkOrientedImageData* outputImage, bool linearInterpolation=false, bool padImage=false, vtkAbstractTransform* inputImageTransform=nullptr, double backgroundValue=0);
73
82 static void TransformOrientedImage(vtkOrientedImageData* image, vtkAbstractTransform* transform, bool geometryOnly=false, bool alwaysResample=false, bool linearInterpolation=false, double backgroundColor[4]=nullptr);
83
87 static bool MergeImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* imageToAppend, vtkOrientedImageData* outputImage, int operation,
88 const int extent[6]=nullptr, double maskThreshold = 0, double fillValue = 1, bool *outputModified=nullptr);
89
94 static bool ModifyImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* modifierImage, int operation,
95 const int extent[6] = nullptr, double maskThreshold = 0, double fillValue = 1);
96
98 static bool CopyImage(vtkOrientedImageData* imageToCopy, vtkOrientedImageData* outputImage, const int extent[6]=nullptr);
99
101 static void PrintImageInformation(vtkImageData* imageData, ostream& os, vtkIndent indent);
102
105 static void FillImage(vtkImageData* image, double fillValue, const int extent[6]=nullptr);
106
107public:
109 static bool CalculateEffectiveExtent(vtkOrientedImageData* image, int effectiveExtent[6], double threshold = 0.0);
110
114
117
121
124 static void TransformExtent(const int inputExtent[6], vtkAbstractTransform* inputToOutputTransform, int outputExtent[6]);
125
128 static void TransformBounds(const double inputBounds[6], vtkAbstractTransform* inputToOutputTransform, double outputBounds[6]);
129
131 static void TransformOrientedImageDataBounds(vtkOrientedImageData* image, vtkAbstractTransform* transform, double transformedBounds[6]);
132
136 static bool IsEqual(vtkMatrix4x4* lhs, vtkMatrix4x4* rhs);
137
139 static bool AreEqualWithTolerance(double a, double b) { return fabs(a - b) < 0.0001; };
140
142 static bool GetTransformBetweenOrientedImages(vtkOrientedImageData* image1, vtkOrientedImageData* image2, vtkTransform* image1ToImage2Transform);
143
145 static bool PadImageToContainImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* containedImage, vtkOrientedImageData* outputImage, const int extent[6]);
147 static bool PadImageToContainImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* containedImage, vtkOrientedImageData* outputImage);
148
154 static bool IsTransformLinear(vtkAbstractTransform* transform, vtkTransform* linearTransform);
155
157 static bool DoesTransformMatrixContainShear(vtkMatrix4x4* matrix);
158
165 static bool ApplyImageMask(vtkOrientedImageData* input, vtkOrientedImageData* mask, double fillValue, bool notMask = false);
166
174 static void GetLabelValuesInMask(std::vector<int>& labelValues, vtkOrientedImageData* binaryLabelmap, vtkOrientedImageData* mask,
175 const int extent[6]=nullptr, int maskThreshold = 0);
176
183 static bool IsLabelInMask(vtkOrientedImageData* binaryLabelmap, vtkOrientedImageData* mask,
184 int extent[6]=nullptr, int maskThreshold=0);
185
194
199 static int IsImageScalarTypeValid(vtkImageData* image);
200
204 static int GetSmallestIntegerTypeForSegmentationScalarRange(double scalarRange[2]);
205
209 static bool CastSegmentationToSmallestIntegerType(vtkImageData* image);
210
215 static bool CastSegmentationToSmallestIntegerType(vtkImageData* image, double scalarRange[2]);
216
220 static void CastImageForValue(vtkImageData* image, double value);
221
222protected:
225
226private:
228 void operator=(const vtkOrientedImageDataResample&) = delete;
229};
230
231#endif
Utility functions for resampling oriented image data.
static bool CopyImage(vtkOrientedImageData *imageToCopy, vtkOrientedImageData *outputImage, const int extent[6]=nullptr)
Copy image with clipping to the specified extent.
static bool ResampleOrientedImageToReferenceOrientedImage(vtkOrientedImageData *inputImage, vtkOrientedImageData *referenceImage, vtkOrientedImageData *outputImage, bool linearInterpolation=false, bool padImage=false, vtkAbstractTransform *inputImageTransform=nullptr, double backgroundValue=0)
static void CastImageForValue(vtkImageData *image, double value)
static bool MergeImage(vtkOrientedImageData *inputImage, vtkOrientedImageData *imageToAppend, vtkOrientedImageData *outputImage, int operation, const int extent[6]=nullptr, double maskThreshold=0, double fillValue=1, bool *outputModified=nullptr)
static void TransformOrientedImage(vtkOrientedImageData *image, vtkAbstractTransform *transform, bool geometryOnly=false, bool alwaysResample=false, bool linearInterpolation=false, double backgroundColor[4]=nullptr)
static bool CastSegmentationToSmallestIntegerType(vtkImageData *image, double scalarRange[2])
static bool CastSegmentationToSmallestIntegerType(vtkImageData *image)
static bool IsEqual(vtkMatrix4x4 *lhs, vtkMatrix4x4 *rhs)
static bool DoGeometriesMatchIgnoreOrigin(vtkOrientedImageData *image1, vtkOrientedImageData *image2)
static void PrintImageInformation(vtkImageData *imageData, ostream &os, vtkIndent indent)
Prints image information. Does not print lots of irrelevant information that default PrintSelf would ...
static bool PadImageToContainImage(vtkOrientedImageData *inputImage, vtkOrientedImageData *containedImage, vtkOrientedImageData *outputImage, const int extent[6])
Pad an image to entirely contain another image using custom extent to contain.
static bool ResampleOrientedImageToReferenceGeometry(vtkOrientedImageData *inputImage, vtkMatrix4x4 *referenceGeometryMatrix, vtkOrientedImageData *outputImage, bool linearInterpolation=false)
~vtkOrientedImageDataResample() override
static bool ApplyImageMask(vtkOrientedImageData *input, vtkOrientedImageData *mask, double fillValue, bool notMask=false)
static bool DoesTransformMatrixContainShear(vtkMatrix4x4 *matrix)
Determine if a transform matrix contains shear.
static void GetLabelValuesInMask(std::vector< int > &labelValues, vtkOrientedImageData *binaryLabelmap, vtkOrientedImageData *mask, const int extent[6]=nullptr, int maskThreshold=0)
static int GetSmallestIntegerTypeForSegmentationScalarRange(double scalarRange[2])
static bool ModifyImage(vtkOrientedImageData *inputImage, vtkOrientedImageData *modifierImage, int operation, const int extent[6]=nullptr, double maskThreshold=0, double fillValue=1)
static void FillImage(vtkImageData *image, double fillValue, const int extent[6]=nullptr)
static bool DoExtentsMatch(vtkOrientedImageData *image1, vtkOrientedImageData *image2)
Determine if extents of two oriented image data objects match.
static void TransformExtent(const int inputExtent[6], vtkAbstractTransform *inputToOutputTransform, int outputExtent[6])
static int IsImageScalarTypeValid(vtkImageData *image)
static bool AreEqualWithTolerance(double a, double b)
Compare two floating point numbers within tolerance.
static bool PadImageToContainImage(vtkOrientedImageData *inputImage, vtkOrientedImageData *containedImage, vtkOrientedImageData *outputImage)
Pad an image to entirely contain another image.
static vtkOrientedImageDataResample * New()
static bool IsTransformLinear(vtkAbstractTransform *transform, vtkTransform *linearTransform)
static bool GetTransformBetweenOrientedImages(vtkOrientedImageData *image1, vtkOrientedImageData *image2, vtkTransform *image1ToImage2Transform)
Calculate transform between two oriented image data.
static bool DoGeometriesMatch(vtkOrientedImageData *image1, vtkOrientedImageData *image2)
static void TransformBounds(const double inputBounds[6], vtkAbstractTransform *inputToOutputTransform, double outputBounds[6])
static void TransformOrientedImageDataBounds(vtkOrientedImageData *image, vtkAbstractTransform *transform, double transformedBounds[6])
Transform bounds of oriented image data using a linear or non-linear transform.
static bool IsLabelInMask(vtkOrientedImageData *binaryLabelmap, vtkOrientedImageData *mask, int extent[6]=nullptr, int maskThreshold=0)
static bool CalculateEffectiveExtent(vtkOrientedImageData *image, int effectiveExtent[6], double threshold=0.0)
Calculate effective extent of an image: the IJK extent where non-zero voxels are located.
Image data containing orientation information.