FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
MeanValueCoordinatesModel.hpp
Go to the documentation of this file.
1 #ifndef MEAN_VALUE_COORDINATES_MODEL_HPP
2 #define MEAN_VALUE_COORDINATES_MODEL_HPP
3 
6 #include "FAST/Data/Mesh.hpp"
7 
8 
9 namespace fast {
10 
11 class Image;
12 
13 class FAST_EXPORT MeanValueCoordinatesModel : public ShapeModel {
15  public:
16  void loadMeshes(std::string surfaceMeshFilename, std::string controlMeshFilename);
17  void loadMeshes(Mesh::pointer surfaceMesh, Mesh::pointer controlMesh);
18  Shape::pointer getShape(VectorXf state);
19  MatrixXf getStateTransitionMatrix1();
20  MatrixXf getStateTransitionMatrix2();
21  MatrixXf getStateTransitionMatrix3();
22  MatrixXf getProcessErrorMatrix();
23  VectorXf getInitialState(std::shared_ptr<Image> image);
24  std::vector<MatrixXf> getMeasurementVectors(VectorXf state, Shape::pointer shape);
25  void initializeShapeToImageCenter();
26  void setInitialScaling(float x, float y, float z);
27  void setInitialTranslation(float x, float y, float z);
28  void setLocalProcessError(float error);
29  void setGlobalProcessError(float error);
30  private:
32  VectorXf getState(Vector3f translation, Vector3f scale, Vector3f rotation);
33  void assertLoadedMeshes();
34  void setNormalizedWeight(
35  const int vertexNr,
36  const int triangleNr,
37  const int triangleVertexNr,
38  float weight
39  );
40  float getNormalizedWeight(const int vertexNr, const int triangleNr, const int triangleVertexNr);
41  float getNormalizedWeight(const uint vertexNr, const uint i);
42  void setNormalizedWeightPerNode(
43  const uint vertexNr,
44  const uint controlNodeNr
45  );
46  std::vector<MeshVertex> getDeformedVertices(const std::vector<Vector3f>& displacements);
47  std::vector<MeshVertex> getOriginalVertices();
48 
49  Mesh::pointer mSurfaceMesh;
50  Mesh::pointer mControlMesh;
51  std::unordered_map<uint, std::vector<uint>> mModelVertexTrianglesMap;
52  std::unordered_map<uint, std::vector<uint>> mControlVertexTrianglesMap;
53  Vector3f mCentroid;
54 
55  std::unique_ptr<float[]> mNormalizedWeights;
56  std::unique_ptr<float[]> mNormalizedWeightsPerNode;
57 
58  uint mStateSize;
59  MatrixXf mA1;
60  MatrixXf mA2;
61  MatrixXf mA3;
62  MatrixXf mProcessErrorMatrix;
63 
64  bool mInitializeShapeToImageCenter;
65  Vector3f mInitialScaling;
66  Vector3f mInitialTranslation;
67  float mLocalProcessError;
68  float mGlobalProcessError;
69 
70 };
71 
72 } // end namespace fast
73 
74 #endif
fast::ShapeModel
Definition: ShapeModel.hpp:16
fast::MeanValueCoordinatesModel
Definition: MeanValueCoordinatesModel.hpp:13
fast
Definition: AffineTransformation.hpp:7
FAST_OBJECT
#define FAST_OBJECT(className)
Definition: Object.hpp:9
fast::Object::pointer
std::shared_ptr< Object > pointer
Definition: Object.hpp:36
Shape.hpp
ShapeModel.hpp
fast::DataObject::pointer
std::shared_ptr< DataObject > pointer
Definition: DataObject.hpp:16
uint
unsigned int uint
Definition: DataTypes.hpp:16
Mesh.hpp