ImFusion SDK 4.3
VertebraDissectionAlgorithm Class Reference

#include <SpinePlugin/include/ImFusion/Spine/VertebraDissectionAlgorithm.h>

Algorithm for extracting structures of interest from an instance of SpineData The structures are extracted by performing a deformable mesh registration of a template structure onto the given input SpineData. More...

+ Inheritance diagram for VertebraDissectionAlgorithm:

Detailed Description

Algorithm for extracting structures of interest from an instance of SpineData The structures are extracted by performing a deformable mesh registration of a template structure onto the given input SpineData.

The template spine must already have the relevant faces labeled in order to perform the extraction.

Public Member Functions

 VertebraDissectionAlgorithm (SpineData &inSpine, SpineData &spineTemplate)
 
void compute () override
 Computes output spine, its end plates and disc meshes using the functions documented below.
 
void computeTransformedSpine (Progress *p)
 Compute the output SpineData instance using both the input and template one.
 
void computeEndPlates (Progress *p)
 Compute superior and inferior end plates for all vertebrae.
 
void computeDiscMeshes (Progress *p)
 Computes the disc meshes for all vertebra pairs The resulting meshes are attached to their respective vertebrae in the output SpineData instance.
 
OwningDataList takeOutput () override
 Return any new Data that was created by the Algorithm during the last call to compute().
 
- Public Member Functions inherited from Algorithm
 Algorithm ()
 Default constructor will registers a single "compute" action that calls compute() and returns status().
 
virtual void setProgress (Progress *progress)
 Sets a Progress interface the algorithm can use to notify observers about its computing progress.
 
Progressprogress () const
 Returns the progress interface if set.
 
virtual int status () const
 Indicates the status of the last call to compute().
 
virtual bool survivesDataDeletion (const Data *) const
 Indicates whether the algorithm can handle (partial) deletion of the specified data, by default this checks whether the data is in the input list.
 
const FactoryInfofactoryInfo () const
 Returns the record describing how this Algorithm was instantiated by the AlgorithmFactory.
 
void setFactoryInfo (const FactoryInfo &value)
 Sets the record describing how this Algorithm was instantiated by the AlgorithmFactory.
 
Status runAction (const std::string &id)
 Run the action with name id if it exists.
 
const std::vector< Action > & actions ()
 Get a mapping from Action id to Action as registered in this algorithm.
 
- Public Member Functions inherited from Configurable
virtual void configure (const Properties *p)
 Configure this object instance by de-serializing the given Properties.
 
virtual void configuration (Properties *p) const
 Serialize the current object configuration into the given Properties object.
 
virtual void configureDefaults ()
 Retrieve the properties of this object, replaces values with their defaults and sets it again.
 
void registerParameter (ParameterBase *param)
 Register the given Parameter or SubProperty, so that it will be configured during configure()/configuration().
 
void unregisterParameter (const ParameterBase *param)
 Remove the given Parameter or SubProperty from the list of registered parameters.
 
 Configurable (const Configurable &rhs)
 
 Configurable (Configurable &&rhs) noexcept
 
Configurableoperator= (const Configurable &)
 
Configurableoperator= (Configurable &&) noexcept
 

Static Public Member Functions

static bool createCompatible (DataList dl, Algorithm **alg)
 
static std::unique_ptr< PointCloudgetEndPlate (const AnatomicalStructure &anatStruct, unsigned int relevantFaceLabel, double ransacThreshold, vec4 &outPlane)
 Given an anatomical structure (vertebra or sacrum), extracts the vertices of faces with the specified face label, and performs a RANSAC plane-fitting on them.
 
static std::unique_ptr< MeshmakeDiscMesh (const PointCloud &inferiorEndPlateAbove, const PointCloud &superiorEndPlateBelow)
 Given two point clouds representing respectively the inferior end plate of the vertebra above, and the superior end plate of the vertebra below, returns the mesh representing the disc space between the two vertebrae.
 
- Static Public Member Functions inherited from Algorithm
static bool createCompatible (const DataList &data, Algorithm **a=nullptr)
 Factory function to check algorithm compatibility with input data and optionally instantiate it.
 

Public Attributes

Parameter< unsigned int > p_faceLabelSuperiorEndPlate = {"faceLabelSuperiorEndPlate", 1, this}
 The end-plate detection requires that the superior and inferior end plates have been marked in the meshes of the 'spineTemplate', and therefore transferred.
 
Parameter< unsigned int > p_faceLabelInferiorEndPlate = {"faceLabelInferiorEndPlate", 2, this}
 
Parameter< double > p_endPlateRansacThreshold = {"endPlateRansacThreshold", 1.0, this}
 Distance in mm to the plate, for a point to be considered part of the end plate.
 
Parameter< double > p_resolution = {"resolution", 1.5, this}
 Resolution used internally in shape registration.
 
- Public Attributes inherited from Algorithm
Signal signalOutputChanged
 Signal should be emitted by Algorithms when their output/result has changed.
 
Signal signalParametersChanged
 Signal should be emitted by Algorithms when their parameter configuration has changed.
 
- Public Attributes inherited from Configurable
Signal signalParametersChanged
 Emitted whenever one of the registered Parameters' or SubPropertys' signalValueChanged signal was emitted.
 

Static Protected Member Functions

static std::vector< std::pair< OrientedVertebra *, OrientedVertebra * > > getAdjacentVertebraPairs (SpineData &spine)
 
static std::vector< vec3 > getVerticesOfFaceLabel (const Mesh &mesh, unsigned int faceLabel)
 

Protected Attributes

SpineDatam_inSpine
 
SpineDatam_spineTemplate
 
std::unique_ptr< SpineDatam_outputSpine
 
- Protected Attributes inherited from Algorithm
std::string m_name
 Algorithm name.
 
Progressm_progress = nullptr
 Non-owing pointer to a progress interface. May be a nullptr.
 
FactoryInfo m_factoryInfo = {}
 Record describing how this algorithm was instantiated by the AlgorithmFactory.
 
int m_status = Status::Unknown
 Algorithm status after last call to compute()
 
std::vector< Actionm_actions
 Map of key given by the id of the action, of the available actions of this algorithm.
 
- Protected Attributes inherited from Configurable
std::vector< Paramm_params
 List of all registered Parameter and SubProperty instances.
 

Additional Inherited Members

- Public Types inherited from Algorithm
enum  Status {
  Unknown = -1 , Success = 0 , Error = 1 , InvalidInput ,
  IncompleteInput , OutOfMemoryHost , OutOfMemoryGPU , UnsupportedGPU ,
  UnknownAction , AbortedByUser , User = 1000
}
 Status codes. More...
 
- Protected Member Functions inherited from Algorithm
void loadDefaults ()
 
void registerAction (const std::string &id, const std::string &guiName, const std::function< Algorithm::Status(void)> &action)
 Register an action to be run via runAction.
 
template<typename D>
void registerAction (const std::string &id, const std::string &guiName, Algorithm::Status(D::*action)(void))
 Template version of runAction that can be used with a pointer to a member function.
 
void registerAction (const Action &action)
 Register an action.
 

Member Function Documentation

◆ compute()

void compute ( )
overridevirtual

Computes output spine, its end plates and disc meshes using the functions documented below.

Implements Algorithm.

◆ computeTransformedSpine()

void computeTransformedSpine ( Progress * p)

Compute the output SpineData instance using both the input and template one.

The output SpineData is a copy of the input one, with the face labels transferred from the template one using a deformable mesh registration.

◆ computeEndPlates()

void computeEndPlates ( Progress * p)

Compute superior and inferior end plates for all vertebrae.

The resulting point clouds are attached to their respective vertebrae in the output SpineData instance.

◆ computeDiscMeshes()

void computeDiscMeshes ( Progress * p)

Computes the disc meshes for all vertebra pairs The resulting meshes are attached to their respective vertebrae in the output SpineData instance.

Only the lower disc is attached to each vertebra.

◆ getEndPlate()

static std::unique_ptr< PointCloud > getEndPlate ( const AnatomicalStructure & anatStruct,
unsigned int relevantFaceLabel,
double ransacThreshold,
vec4 & outPlane )
static

Given an anatomical structure (vertebra or sacrum), extracts the vertices of faces with the specified face label, and performs a RANSAC plane-fitting on them.

The face label should represent either the faces of the top end plate, or the bottom end plate. Returns the list of points belonging to the plane.

◆ makeDiscMesh()

static std::unique_ptr< Mesh > makeDiscMesh ( const PointCloud & inferiorEndPlateAbove,
const PointCloud & superiorEndPlateBelow )
static

Given two point clouds representing respectively the inferior end plate of the vertebra above, and the superior end plate of the vertebra below, returns the mesh representing the disc space between the two vertebrae.

The mesh is generated using poisson reconstruction.

◆ takeOutput()

OwningDataList takeOutput ( )
overridevirtual

Return any new Data that was created by the Algorithm during the last call to compute().

The default implementation will return an empty list.

Note
Since ownership of the data is transferred, you can call this method only once between calls to compute().

Reimplemented from Algorithm.

Member Data Documentation

◆ p_faceLabelSuperiorEndPlate

Parameter<unsigned int> p_faceLabelSuperiorEndPlate = {"faceLabelSuperiorEndPlate", 1, this}

The end-plate detection requires that the superior and inferior end plates have been marked in the meshes of the 'spineTemplate', and therefore transferred.

The p_faceLabelSuperiorEndPlate and p_faceLabelInferiorEndPlate parameters can be used to indicate which face labels should be used for the vertex extraction.


The documentation for this class was generated from the following file:
Search Tab / S to search, Esc to close