ITK
6.0.0
Insight Toolkit
|
#include <itkLaplacianDeformationQuadEdgeMeshFilter.h>
(abstract) base class for laplacian surface mesh deformation.
Laplacian mesh deformation offers the ability to deform 3D surface mesh while preserving local details.
Laplacian-based approaches represent the surface by the so-called differential coordinates or Laplacian coordinates \( \boldsymbol{ \delta }_i \). These coordinates are obtained by applying the Laplacian operator to the mesh vertices:
\[ \boldsymbol{ \delta }_i = \Delta_{S}( \boldsymbol{ p }_i ) = - H_i \cdot \boldsymbol{ n_i } \]
where \(H_i\) is the mean curvature \( ( \kappa_1 + \kappa_2 ) \) at the vertex \(v_i\).
The deformation can be formulated by minimizing the difference from the input surface coordinates \(\delta_i\). With a continuous formulation, this would lead to the minimization of the following energy:
\[ \min_{\boldsymbol{p'}} \int_{\Omega} \| \boldsymbol{\Delta p'} - \boldsymbol{\delta} \| du dv \]
The Euler-Lagrange equation derived:
\[ \Delta^2 \boldsymbol{p'} = \Delta \boldsymbol{\delta} \]
When considering the input surface as the parameter domain, the Laplace operator turns out into the Laplace-Beltrami operator \( \Delta_S \):
\[ L^2 \boldsymbol{p'} = L \boldsymbol{ \delta } \]
which can be separated into 3 coordinate components.
Then users can add positional constraints on some vertices:
\[ \boldsymbol{p'}_j = \boldsymbol{c}_j \]
If output positions must exactly match set constraints, see LaplacianDeformationQuadEdgeMeshFilterWithHardConstraints. Else see LaplacianDeformationQuadEdgeMeshFilterWithSoftConstraints
To make the deformation as generic as possible, user can provide/choose:
TInputMesh | Input Mesh Type |
TOutputMesh | Output Mesh Type |
TSolverTraits | Linear Sparse Solver Traits see VNLIterativeSparseSolverTraits and VNLSparseLUSolverTraits |
For details, see https://doi.org/10.54294/s91axg
Definition at line 116 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
Classes | |
struct | HashOutputQEPrimal |
struct | Triple |
Public Types | |
using | AreaEnum = LaplacianDeformationQuadEdgeMeshFilterEnums::Area |
using | CoefficientsComputationType = MatrixCoefficients< OutputMeshType > |
using | ConstPointer = SmartPointer< const Self > |
using | InputMeshType = TInputMesh |
using | MatrixType = typename SolverTraits::MatrixType |
using | OutputMeshType = TOutputMesh |
using | Pointer = SmartPointer< Self > |
using | Self = LaplacianDeformationQuadEdgeMeshFilter |
using | SolverTraits = TSolverTraits |
using | Superclass = QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh > |
using | TriangleType = TriangleHelper< OutputPointType > |
using | ValueType = typename SolverTraits::ValueType |
using | VectorType = typename SolverTraits::VectorType |
Public Types inherited from itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh > | |
using | ConstPointer = SmartPointer< const Self > |
using | InputCellDataContainer = typename InputMeshType::CellDataContainer |
using | InputCellsContainerConstIterator = typename InputMeshType::CellsContainerConstIterator |
using | InputCellsContainerConstPointer = typename InputMeshType::CellsContainerConstPointer |
using | InputCellTraits = typename InputMeshType::CellTraits |
using | InputCoordRepType = typename InputMeshType::CoordRepType |
using | InputEdgeCellType = typename InputMeshType::EdgeCellType |
using | InputMeshConstPointer = typename InputMeshType::ConstPointer |
using | InputMeshPointer = typename InputMeshType::Pointer |
using | InputMeshType = TInputMesh |
using | InputPointDataContainer = typename InputMeshType::PointDataContainer |
using | InputPointDataContainerConstPointer = typename InputPointDataContainer::ConstPointer |
using | InputPointIdentifier = typename InputMeshType::PointIdentifier |
using | InputPointIdList = typename InputMeshType::PointIdList |
using | InputPointsContainerConstIterator = typename InputMeshType::PointsContainerConstIterator |
using | InputPointsContainerConstPointer = typename InputMeshType::PointsContainerConstPointer |
using | InputPointsIdInternalIterator = typename InputCellTraits::PointIdInternalIterator |
using | InputPointType = typename InputMeshType::PointType |
using | InputPolygonCellType = typename InputMeshType::PolygonCellType |
using | InputQEIterator = typename InputQEPrimal::IteratorGeom |
using | InputQEPrimal = typename InputMeshType::QEPrimal |
using | InputVectorType = typename InputMeshType::VectorType |
using | OutputCellDataContainer = typename OutputMeshType::CellDataContainer |
using | OutputCoordRepType = typename OutputMeshType::CoordRepType |
using | OutputMeshConstPointer = typename OutputMeshType::ConstPointer |
using | OutputMeshPointer = typename OutputMeshType::Pointer |
using | OutputMeshType = TOutputMesh |
using | OutputPointDataContainer = typename OutputMeshType::PointDataContainer |
using | OutputPointIdentifier = typename OutputMeshType::PointIdentifier |
using | OutputPointsContainerConstPointer = typename OutputMeshType::PointsContainerConstPointer |
using | OutputPointsContainerIterator = typename OutputMeshType::PointsContainerIterator |
using | OutputPointsContainerPointer = typename OutputMeshType::PointsContainerPointer |
using | OutputPointType = typename OutputMeshType::PointType |
using | OutputQEIterator = typename OutputQEPrimal::IteratorGeom |
using | OutputQEPrimal = typename OutputMeshType::QEPrimal |
using | OutputVectorType = typename OutputMeshType::VectorType |
using | Pointer = SmartPointer< Self > |
using | Self = QuadEdgeMeshToQuadEdgeMeshFilter |
using | Superclass = MeshToMeshFilter< TInputMesh, TOutputMesh > |
Public Types inherited from itk::MeshToMeshFilter< TInputMesh, TOutputMesh > | |
using | ConstPointer = SmartPointer< const Self > |
using | InputMeshPointer = typename InputMeshType::Pointer |
using | InputMeshType = TInputMesh |
using | OutputMeshPointer = typename OutputMeshType::Pointer |
using | OutputMeshType = TOutputMesh |
using | Pointer = SmartPointer< Self > |
using | Self = MeshToMeshFilter |
using | Superclass = MeshSource< TOutputMesh > |
Public Types inherited from itk::MeshSource< TOutputMesh > | |
using | ConstPointer = SmartPointer< const Self > |
using | DataObjectIdentifierType = Superclass::DataObjectIdentifierType |
using | DataObjectPointer = DataObject::Pointer |
using | OutputMeshPointer = typename OutputMeshType::Pointer |
using | OutputMeshType = TOutputMesh |
using | Pointer = SmartPointer< Self > |
using | Self = MeshSource |
using | Superclass = ProcessObject |
using | DataObjectPointerArraySizeType = ProcessObject::DataObjectPointerArraySizeType |
Public Types inherited from itk::ProcessObject | |
using | ConstPointer = SmartPointer< const Self > |
using | DataObjectIdentifierType = DataObject::DataObjectIdentifierType |
using | DataObjectPointer = DataObject::Pointer |
using | DataObjectPointerArray = std::vector< DataObjectPointer > |
using | DataObjectPointerArraySizeType = DataObjectPointerArray::size_type |
using | MultiThreaderType = MultiThreaderBase |
using | NameArray = std::vector< DataObjectIdentifierType > |
using | Pointer = SmartPointer< Self > |
using | Self = ProcessObject |
using | Superclass = Object |
Public Types inherited from itk::Object | |
using | ConstPointer = SmartPointer< const Self > |
using | Pointer = SmartPointer< Self > |
using | Self = Object |
using | Superclass = LightObject |
Public Types inherited from itk::LightObject | |
using | ConstPointer = SmartPointer< const Self > |
using | Pointer = SmartPointer< Self > |
using | Self = LightObject |
Static Public Attributes | |
static constexpr unsigned int | InputPointDimension = InputMeshType::PointDimension |
static constexpr unsigned int | OutputPointDimension = OutputMeshType::PointDimension |
Protected Types | |
using | AreaMapConstIterator = typename AreaMapType::const_iterator |
using | AreaMapType = std::unordered_map< OutputPointIdentifier, OutputCoordRepType > |
using | CoefficientMapConstIterator = typename CoefficientMapType::const_iterator |
using | CoefficientMapType = std::unordered_map< OutputQEPrimal *, OutputCoordRepType, HashOutputQEPrimal > |
using | ConstraintMapConstIterator = typename ConstraintMapType::const_iterator |
using | ConstraintMapType = std::unordered_map< OutputPointIdentifier, OutputVectorType > |
using | OutputMapPointIdentifier = std::unordered_map< OutputPointIdentifier, OutputPointIdentifier > |
using | OutputMapPointIdentifierConstIterator = typename OutputMapPointIdentifier::const_iterator |
using | OutputMapPointIdentifierIterator = typename OutputMapPointIdentifier::iterator |
using | RowConstIterator = typename RowType::const_iterator |
using | RowIterator = typename RowType::iterator |
using | RowType = std::unordered_map< OutputPointIdentifier, OutputCoordRepType > |
Protected Attributes | |
AreaEnum | m_AreaComputationType { AreaEnum::NONE } |
CoefficientMapType | m_CoefficientMap {} |
CoefficientsComputationType * | m_CoefficientsMethod {} |
ConstraintMapType | m_Constraints {} |
OutputMapPointIdentifier | m_InternalMap {} |
AreaMapType | m_MixedAreaMap {} |
unsigned int | m_Order { 1 } |
Protected Attributes inherited from itk::ProcessObject | |
TimeStamp | m_OutputInformationMTime {} |
bool | m_Updating {} |
Protected Attributes inherited from itk::LightObject | |
std::atomic< int > | m_ReferenceCount {} |
Additional Inherited Members | |
Static Public Member Functions inherited from itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh > | |
static Pointer | New () |
Static Public Member Functions inherited from itk::MeshToMeshFilter< TInputMesh, TOutputMesh > | |
static Pointer | New () |
Static Public Member Functions inherited from itk::MeshSource< TOutputMesh > | |
static Pointer | New () |
Static Public Member Functions inherited from itk::Object | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool val) |
Static Public Member Functions inherited from itk::LightObject | |
static void | BreakOnError () |
static Pointer | New () |
Static Protected Member Functions inherited from itk::ProcessObject | |
template<typename TSourceObject > | |
static void | MakeRequiredOutputs (TSourceObject &sourceObject, const DataObjectPointerArraySizeType numberOfRequiredOutputs) |
static constexpr float | progressFixedToFloat (uint32_t fixed) |
static uint32_t | progressFloatToFixed (float f) |
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::AreaEnum = LaplacianDeformationQuadEdgeMeshFilterEnums::Area |
Definition at line 188 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 231 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 230 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 228 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 227 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::CoefficientsComputationType = MatrixCoefficients<OutputMeshType> |
Definition at line 152 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::ConstPointer = SmartPointer<const Self> |
Definition at line 126 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 216 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 215 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::InputMeshType = TInputMesh |
Input types.
Definition at line 131 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::MatrixType = typename SolverTraits::MatrixType |
Definition at line 149 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 211 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 213 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 212 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::OutputMeshType = TOutputMesh |
Output types.
Definition at line 137 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::Pointer = SmartPointer<Self> |
Definition at line 125 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 235 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 234 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 233 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::Self = LaplacianDeformationQuadEdgeMeshFilter |
Basic types.
Definition at line 123 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::SolverTraits = TSolverTraits |
Definition at line 147 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::Superclass = QuadEdgeMeshToQuadEdgeMeshFilter<TInputMesh, TOutputMesh> |
Definition at line 124 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::TriangleType = TriangleHelper<OutputPointType> |
Definition at line 163 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::ValueType = typename SolverTraits::ValueType |
Definition at line 148 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::VectorType = typename SolverTraits::VectorType |
Definition at line 150 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Default constructor
|
overrideprotecteddefault |
Default constructor
void itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::ClearConstraints | ( | ) |
Clear all constraints added by the means of SetConstrainedNode or SetDisplacement.
|
protected |
|
protected |
|
protected |
|
protectedvirtual |
|
protected |
Fill matrix iM and vectors Bx, m_By and m_Bz depending on if one vertex is on the border or not.
|
protected |
|
virtual |
Set/Get the area normalization type
bool itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::GetDisplacement | ( | OutputPointIdentifier | vId, |
OutputVectorType & | oV | ||
) | const |
Get the displacement vector oV for the vertex vId. Returns true if the vertex vId is a constraint, else false.
|
overridevirtual |
Reimplemented from itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >.
Reimplemented in itk::LaplacianDeformationQuadEdgeMeshFilterWithHardConstraints< TInputMesh, TOutputMesh, TSolverTraits >, and itk::LaplacianDeformationQuadEdgeMeshFilterWithSoftConstraints< TInputMesh, TOutputMesh, TSolverTraits >.
|
virtual |
Set/Get the Laplacian order
|
overrideprotectedvirtual |
Methods invoked by Print() to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from itk::MeshSource< TOutputMesh >.
Reimplemented in itk::LaplacianDeformationQuadEdgeMeshFilterWithHardConstraints< TInputMesh, TOutputMesh, TSolverTraits >, and itk::LaplacianDeformationQuadEdgeMeshFilterWithSoftConstraints< TInputMesh, TOutputMesh, TSolverTraits >.
|
virtual |
Set/Get the area normalization type
|
inline |
Set the coefficient method to compute the Laplacian matrix of the input mesh
Definition at line 156 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
void itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::SetConstrainedNode | ( | OutputPointIdentifier | vId, |
const OutputPointType & | iP | ||
) |
Constrain vertex vId to the given location iP
void itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::SetDisplacement | ( | OutputPointIdentifier | vId, |
const OutputVectorType & | iV | ||
) |
Set the displacement vector iV for the vertex vId
|
virtual |
Set/Get the Laplacian order
|
protected |
Solve linear systems : \( iM \cdot oX = iBx \) and \( iM \cdot oY = iBy \) and \( iM \cdot oZ = iBz \).
[in] | iM | |
[in] | iBx | |
[in] | iBy | |
[in] | iBz | |
[out] | oX | |
[out] | oY | |
[out] | oZ |
|
staticconstexpr |
Definition at line 134 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 245 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 239 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 242 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 238 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 237 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 240 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 244 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
staticconstexpr |
Definition at line 145 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.