CTL  0.6.1
Computed Tomography Library
volumeresampler.h
Go to the documentation of this file.
1 #ifndef CTL_VOLUMERESAMPLER_H
2 #define CTL_VOLUMERESAMPLER_H
3 
4 #include "img/voxelvolume.h"
5 #include "ocl/openclconfig.h"
6 #include "processing/coordinates.h"
7 #include "processing/range.h"
8 
9 namespace CTL {
10 
11 namespace mat {
12 struct Location;
13 }
14 
15 namespace OCL {
16 
18 {
19 public:
22 
23  explicit VolumeResampler(const VoxelVolume<float>& volume, uint oclDeviceNb = 0);
24  VolumeResampler(const Chunk3D& volume,
25  const SamplingRange& rangeDim1,
26  const SamplingRange& rangeDim2,
27  const SamplingRange& rangeDim3,
28  uint oclDeviceNb = 0);
29 
30  const SamplingRange& rangeDim1() const;
31  const SamplingRange& rangeDim2() const;
32  const SamplingRange& rangeDim3() const;
33 
34  // sampling functions wrapping the result in a volume object
35  Chunk3D resample(const std::vector<float>& samplingPtsDim1,
36  const std::vector<float>& samplingPtsDim2,
37  const std::vector<float>& samplingPtsDim3) const;
38 
39  Chunk3D resample(const std::vector<float>& samplingPtsDim1,
40  const std::vector<float>& samplingPtsDim2,
41  const std::vector<float>& samplingPtsDim3,
42  const mat::Matrix<3, 3>& rotation) const;
43 
44  // resample to true VoxelVolume with voxel size and volume offset information
45  VoxelVolume<float> resample(const VoxelVolume<float>::VoxelSize& targetVoxelSize) const;
46 
48  const mat::Matrix<3, 3>& rotation) const;
49 
50  VoxelVolume<float> resample(const mat::Matrix<3, 3>& rotation) const;
51 
53 
54  // generic sampling functions
55  std::vector<float> sample(const std::vector<Generic3DCoord>& samplingPts) const;
56  std::vector<float> sample(const cl::Buffer& coord3dBuffer) const;
57 
58  void setSamplingRanges(const SamplingRange& rangeDim1,
59  const SamplingRange& rangeDim2,
60  const SamplingRange& rangeDim3);
61 
62  const cl::Image3D& oclVolume() const;
63  VoxelVolume<float> volume() const;
64 
68 
69 private:
71 
72  SamplingRange _rangeDim1;
73  SamplingRange _rangeDim2;
74  SamplingRange _rangeDim3;
75 
76  cl::CommandQueue _q;
77  cl::Kernel* _kernel;
78  cl::Kernel* _kernelSubsetSampler;
79  cl::Image3D _volImage3D;
80  cl::Buffer _range1Buf;
81  cl::Buffer _range2Buf;
82  cl::Buffer _range3Buf;
83 
84  std::array<Range<float>, 3> boundingBox(const mat::Matrix<3, 3>& rotation) const;
85 };
86 
87 VoxelVolume<float> euclidianTransform(const VoxelVolume<float>& volume,
88  const mat::Location& location);
89 VoxelVolume<float> euclidianTransform(const VoxelVolume<float>& volume,
90  const mat::Matrix<3, 3>& rotation,
91  const mat::Matrix<3, 1>& translation);
92 
93 } // namespace OCL
94 } // namespace CTL
95 
97 
100 
101 #endif // CTL_VOLUMERESAMPLER_H
VoxelVolume< float >::Offset volOffset() const
Definition: volumeresampler.cpp:406
Chunk3D resample(const std::vector< float > &samplingPtsDim1, const std::vector< float > &samplingPtsDim2, const std::vector< float > &samplingPtsDim3) const
Definition: volumeresampler.cpp:145
Definition: matrix_utils.h:27
VoxelVolume< float > resampleOnMask(const VoxelVolume< float > &mask) const
Definition: volumeresampler.cpp:272
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
VoxelVolume< float >::Dimensions _volDim
Dimensions of the volume.
Definition: volumeresampler.h:70
VoxelVolume< float >::VoxelSize volVoxSize() const
Definition: volumeresampler.cpp:414
const VoxelVolume< float >::Dimensions & volDim() const
Definition: volumeresampler.cpp:398
Definition: volumeresampler.h:17