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 {
52 };
53
62 vtkMatrix4x4* referenceGeometryMatrix,
63 vtkOrientedImageData* outputImage,
64 bool linearInterpolation = false);
65
76 vtkOrientedImageData* referenceImage,
77 vtkOrientedImageData* outputImage,
78 bool linearInterpolation = false,
79 bool padImage = false,
80 vtkAbstractTransform* inputImageTransform = nullptr,
81 double backgroundValue = 0);
82
92 vtkAbstractTransform* transform,
93 bool geometryOnly = false,
94 bool alwaysResample = false,
95 bool linearInterpolation = false,
96 double backgroundColor[4] = nullptr);
97
101 static bool MergeImage(vtkOrientedImageData* inputImage,
102 vtkOrientedImageData* imageToAppend,
103 vtkOrientedImageData* outputImage,
104 int operation,
105 const int extent[6] = nullptr,
106 double maskThreshold = 0,
107 double fillValue = 1,
108 bool* outputModified = nullptr);
109
114 static bool ModifyImage(vtkOrientedImageData* inputImage,
115 vtkOrientedImageData* modifierImage,
116 int operation,
117 const int extent[6] = nullptr,
118 double maskThreshold = 0,
119 double fillValue = 1);
120
122 static bool CopyImage(vtkOrientedImageData* imageToCopy, vtkOrientedImageData* outputImage, const int extent[6] = nullptr);
123
125 static void PrintImageInformation(vtkImageData* imageData, ostream& os, vtkIndent indent);
126
129 static void FillImage(vtkImageData* image, double fillValue, const int extent[6] = nullptr);
130
131public:
133 static bool CalculateEffectiveExtent(vtkOrientedImageData* image, int effectiveExtent[6], double threshold = 0.0);
134
138
141
145
148 static void TransformExtent(const int inputExtent[6], vtkAbstractTransform* inputToOutputTransform, int outputExtent[6]);
149
152 static void TransformBounds(const double inputBounds[6], vtkAbstractTransform* inputToOutputTransform, double outputBounds[6]);
153
155 static void TransformOrientedImageDataBounds(vtkOrientedImageData* image, vtkAbstractTransform* transform, double transformedBounds[6]);
156
160 static bool IsEqual(vtkMatrix4x4* lhs, vtkMatrix4x4* rhs);
161
163 static bool AreEqualWithTolerance(double a, double b) { return fabs(a - b) < 0.0001; };
164
166 static bool GetTransformBetweenOrientedImages(vtkOrientedImageData* image1, vtkOrientedImageData* image2, vtkTransform* image1ToImage2Transform);
167
169 static bool PadImageToContainImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* containedImage, vtkOrientedImageData* outputImage, const int extent[6]);
171 static bool PadImageToContainImage(vtkOrientedImageData* inputImage, vtkOrientedImageData* containedImage, vtkOrientedImageData* outputImage);
172
178 static bool IsTransformLinear(vtkAbstractTransform* transform, vtkTransform* linearTransform);
179
181 static bool DoesTransformMatrixContainShear(vtkMatrix4x4* matrix);
182
189 static bool ApplyImageMask(vtkOrientedImageData* input, vtkOrientedImageData* mask, double fillValue, bool notMask = false);
190
198 static void GetLabelValuesInMask(std::vector<int>& labelValues,
199 vtkOrientedImageData* binaryLabelmap,
201 const int extent[6] = nullptr,
202 int maskThreshold = 0);
203
210 static bool IsLabelInMask(vtkOrientedImageData* binaryLabelmap, vtkOrientedImageData* mask, int extent[6] = nullptr, int maskThreshold = 0);
211
220
225 static int IsImageScalarTypeValid(vtkImageData* image);
226
231 static int GetSmallestIntegerTypeForSegmentationScalarRange(double scalarRange[2]);
232
236 static bool CastSegmentationToSmallestIntegerType(vtkImageData* image);
237
242 static bool CastSegmentationToSmallestIntegerType(vtkImageData* image, double scalarRange[2]);
243
247 static void CastImageForValue(vtkImageData* image, double value);
248
249protected:
252
253private:
255 void operator=(const vtkOrientedImageDataResample&) = delete;
256};
257
258#endif
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.