Slicer  4.11
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
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 
33 class vtkImageData;
34 class vtkMatrix4x4;
36 class vtkTransform;
37 class vtkAbstractTransform;
38 
41 class vtkSegmentationCore_EXPORT vtkOrientedImageDataResample : public vtkObject
42 {
43 public:
44  static vtkOrientedImageDataResample *New();
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 
107 public:
109  static bool CalculateEffectiveExtent(vtkOrientedImageData* image, int effectiveExtent[6], double threshold = 0.0);
110 
113  static bool DoGeometriesMatch(vtkOrientedImageData* image1, vtkOrientedImageData* image2);
114 
116  static bool DoExtentsMatch(vtkOrientedImageData* image1, vtkOrientedImageData* image2);
117 
120  static bool DoGeometriesMatchIgnoreOrigin(vtkOrientedImageData* image1, vtkOrientedImageData* image2);
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 
189  static void CastImageForValue(vtkOrientedImageData* image, double value);
190 
191 protected:
193  ~vtkOrientedImageDataResample() override;
194 
195 private:
197  void operator=(const vtkOrientedImageDataResample&) = delete;
198 };
199 
200 #endif
Utility functions for resampling oriented image data.
static bool AreEqualWithTolerance(double a, double b)
Compare two floating point numbers within tolerance.
Image data containing orientation information.