template<class TInputMesh, class TOutputMesh, class TSolverTraits>
class itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >
(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:
- their own way to compute Laplacian by the means of m_CoefficientsMethod
- Laplacian order by the means of m_Order (according to the literature for m_Order > 3, it can becomes numerically unstable)
- one normalization per vertex based on the local area on the mesh (MIXED_AREA)
- Sparser solver used by the mean of the template parameter TSolverTraits
- Template Parameters
-
For details, see https://www.insight-journal.org/browse/publication/890
Definition at line 116 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
void | ComputeLaplacianMatrix (MatrixType &ioL) |
|
OutputCoordRepType | ComputeMixedArea (OutputQEPrimal *iQE1, OutputQEPrimal *iQE2) |
|
OutputCoordRepType | ComputeMixedAreaForGivenVertex (OutputPointIdentifier iId) |
|
virtual void | ComputeVertexIdMapping () |
|
void | FillMatrix (MatrixType &iM, VectorType &iBx, VectorType &iBy, VectorType &iBz) |
|
void | FillMatrixRow (OutputPointIdentifier iId, unsigned int iDegree, OutputCoordRepType iWeight, RowType &ioRow) |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
void | SolveLinearSystems (const MatrixType &iM, const VectorType &iBx, const VectorType &iBy, const VectorType &iBz, VectorType &oX, VectorType &oY, VectorType &oZ) |
|
|
| LaplacianDeformationQuadEdgeMeshFilter () |
|
| ~LaplacianDeformationQuadEdgeMeshFilter () override=default |
|
virtual void | CopyInputMeshToOutputMesh () |
|
virtual void | CopyInputMeshToOutputMeshCellData () |
|
virtual void | CopyInputMeshToOutputMeshCells () |
|
virtual void | CopyInputMeshToOutputMeshEdgeCells () |
|
virtual void | CopyInputMeshToOutputMeshFieldData () |
|
virtual void | CopyInputMeshToOutputMeshGeometry () |
|
virtual void | CopyInputMeshToOutputMeshPointData () |
|
virtual void | CopyInputMeshToOutputMeshPoints () |
|
| QuadEdgeMeshToQuadEdgeMeshFilter () |
|
| ~QuadEdgeMeshToQuadEdgeMeshFilter () override=default |
|
void | CopyInputMeshToOutputMeshCellData () |
|
void | CopyInputMeshToOutputMeshCellLinks () |
|
void | CopyInputMeshToOutputMeshCells () |
|
void | CopyInputMeshToOutputMeshPointData () |
|
void | CopyInputMeshToOutputMeshPoints () |
|
| MeshToMeshFilter () |
|
| ~MeshToMeshFilter () override=default |
|
void | GenerateInputRequestedRegion () override |
|
| MeshSource () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~MeshSource () override=default |
|
virtual void | AddInput (DataObject *input) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | AddOutput (DataObject *output) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | GenerateData () |
|
virtual void | GenerateInputRequestedRegion () |
|
virtual void | GenerateOutputInformation () |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () const |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (const DataObjectIdentifierType &) const |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
DataObjectPointerArraySizeType | MakeIndexFromInputName (const DataObjectIdentifierType &name) const |
|
DataObjectPointerArraySizeType | MakeIndexFromOutputName (const DataObjectIdentifierType &name) const |
|
DataObjectIdentifierType | MakeNameFromInputIndex (DataObjectPointerArraySizeType idx) const |
|
DataObjectIdentifierType | MakeNameFromOutputIndex (DataObjectPointerArraySizeType idx) const |
|
virtual void | PopBackInput () |
|
virtual void | PopFrontInput () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ProcessObject () |
|
virtual void | PropagateResetPipeline () |
|
virtual void | PushBackInput (const DataObject *input) |
|
virtual void | PushFrontInput (const DataObject *input) |
|
virtual void | ReleaseInputs () |
|
virtual void | RemoveInput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveInput (DataObjectPointerArraySizeType) |
|
virtual void | RemoveOutput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveOutput (DataObjectPointerArraySizeType idx) |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
virtual void | RestoreInputReleaseDataFlags () |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetNthInput (DataObjectPointerArraySizeType idx, DataObject *input) |
|
virtual void | SetNthOutput (DataObjectPointerArraySizeType idx, DataObject *output) |
|
void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
|
void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual void | SetOutput (const DataObjectIdentifierType &name, DataObject *output) |
|
virtual void | SetPrimaryInput (DataObject *object) |
|
virtual void | SetPrimaryOutput (DataObject *object) |
|
void | SetRequiredInputNames (const NameArray &) |
|
virtual void | VerifyInputInformation () const |
|
virtual void | VerifyPreconditions () const |
|
| ~ProcessObject () override |
|
DataObject * | GetInput (DataObjectPointerArraySizeType idx) |
|
const DataObject * | GetInput (DataObjectPointerArraySizeType idx) const |
|
DataObject * | GetPrimaryInput () |
|
const DataObject * | GetPrimaryInput () const |
|
virtual void | SetPrimaryInputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryInputName () const |
|
DataObject * | GetOutput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetOutput (const DataObjectIdentifierType &key) const |
|
virtual void | SetPrimaryOutputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryOutputName () const |
|
DataObject * | GetOutput (DataObjectPointerArraySizeType i) |
|
const DataObject * | GetOutput (DataObjectPointerArraySizeType i) const |
|
DataObject * | GetPrimaryOutput () |
|
const DataObject * | GetPrimaryOutput () const |
|
virtual bool | GetThreaderUpdateProgress () const |
|
virtual void | ThreaderUpdateProgressOn () |
|
virtual void | SetThreaderUpdateProgress (bool arg) |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
|
| ~Object () override |
|
virtual LightObject::Pointer | InternalClone () const |
|
| LightObject () |
|
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
|
virtual void | PrintSelf (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|