FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
MultigridGradientVectorFlow.hpp
Go to the documentation of this file.
1 #ifndef MULTIGRID_GRADIENT_VECTOR_FLOW_HPP_
2 #define MULTIGRID_GRADIENT_VECTOR_FLOW_HPP_
3 
4 #include "FAST/ProcessObject.hpp"
5 
6 namespace fast {
7 
8 class Image;
9 
10 class FAST_EXPORT MultigridGradientVectorFlow : public ProcessObject {
12  public:
13  void setIterations(uint iterations);
14  void setMuConstant(float mu);
15  float getMuConstant() const;
21  void set16bitStorageFormat();
25  void set32bitStorageFormat();
26  private:
28  void execute();
29  void execute3DGVF(std::shared_ptr<Image> input, std::shared_ptr<Image> output, uint iterations);
30 
31  float mMu;
32  uint mIterations;
33  bool mUse16bitFormat;
34  cl::Program mProgram;
35 
36  cl::Image3D initSolutionToZero(Vector3ui size, int imageType, int bufferSize);
37  void gaussSeidelSmoothing(
38  cl::Image3D &v,
39  cl::Image3D &r,
40  cl::Image3D &sqrMag,
41  int iterations,
42  Vector3ui size,
43  float mu,
44  float spacing,
45  int imageType,
46  int bufferSize
47  );
48  cl::Image3D restrictVolume(
49  cl::Image3D &v,
50  Vector3ui newSize,
51  int imageType,
52  int bufferSize
53  );
54  cl::Image3D prolongateVolume(
55  cl::Image3D &v_l,
56  cl::Image3D &v_l_p1,
57  Vector3ui size,
58  int imageType,
59  int bufferSize
60  );
61  cl::Image3D prolongateVolume2(
62  cl::Image3D &v_l_p1,
63  Vector3ui size,
64  int imageType,
65  int bufferSize
66  );
67  cl::Image3D residual(
68  cl::Image3D &r,
69  cl::Image3D &v,
70  cl::Image3D &sqrMag,
71  float mu,
72  float spacing,
73  Vector3ui size,
74  int imageType,
75  int bufferSize
76  );
77  void multigridVcycle(
78  cl::Image3D &r_l,
79  cl::Image3D &v_l,
80  cl::Image3D &sqrMag,
81  int l,
82  int v1,
83  int v2,
84  int l_max,
85  float mu,
86  float spacing,
87  Vector3ui size,
88  int imageType,
89  int bufferSize
90  );
91  cl::Image3D computeNewResidual(
92  cl::Image3D &f,
93  cl::Image3D &vectorField,
94  float mu,
95  float spacing,
96  int component,
97  Vector3ui size,
98  int imageType,
99  int bufferSize
100  );
101  cl::Image3D fullMultigrid(
102  cl::Image3D &r_l,
103  cl::Image3D &sqrMag,
104  int l,
105  int v0,
106  int v1,
107  int v2,
108  int l_max,
109  float mu,
110  float spacing,
111  Vector3ui size,
112  int imageType,
113  int bufferSize
114  );
115 };
116 
117 } // end namespace fast
118 
119 #endif
fast
Definition: AffineTransformation.hpp:7
FAST_OBJECT
#define FAST_OBJECT(className)
Definition: Object.hpp:9
ProcessObject.hpp
fast::MultigridGradientVectorFlow
Definition: MultigridGradientVectorFlow.hpp:10
uint
unsigned int uint
Definition: DataTypes.hpp:16
fast::ProcessObject
Definition: ProcessObject.hpp:22
fast::Vector3ui
Eigen::Matrix< uint, 3, 1 > Vector3ui
Definition: DataTypes.hpp:35