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://doi.org/10.54294/s91axg
Definition at line 116 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
| void | ClearConstraints () |
| |
| bool | GetDisplacement (OutputPointIdentifier vId, OutputVectorType &oV) const |
| |
| virtual const char * | GetNameOfClass () const |
| |
| void | SetCoefficientsMethod (CoefficientsComputationType *iMethod) |
| |
| void | SetConstrainedNode (OutputPointIdentifier vId, const OutputPointType &iP) |
| |
| void | SetDisplacement (OutputPointIdentifier vId, const OutputVectorType &iV) |
| |
|
| virtual void | SetOrder (unsigned int _arg) |
| |
| virtual unsigned int | GetOrder () |
| |
|
| virtual void | SetAreaComputationType (const AreaEnum _arg) |
| |
| virtual AreaEnum | GetAreaComputationType () |
| |
| virtual::itk::LightObject::Pointer | CreateAnother () const |
| |
| const InputMeshType * | GetInput () const |
| |
| const InputMeshType * | GetInput (unsigned int idx) const |
| |
| void | SetInput (const InputMeshType *input) |
| |
| OutputMeshType * | GetOutput () |
| |
| OutputMeshType * | GetOutput (unsigned int idx) |
| |
| virtual void | GraftNthOutput (unsigned int idx, DataObject *graft) |
| |
| virtual void | GraftOutput (const DataObjectIdentifierType &key, DataObject *graft) |
| |
| virtual void | GraftOutput (DataObject *graft) |
| |
| void | SetOutput (TOutputMesh *output) |
| |
| virtual void | SetOutput (const DataObjectIdentifierType &name, DataObject *output) |
| |
| DataObjectPointer | MakeOutput (DataObjectPointerArraySizeType idx) override |
| |
| virtual DataObjectPointer | MakeOutput (const DataObjectIdentifierType &) |
| |
| virtual void | AbortGenerateDataOff () |
| |
| virtual void | AbortGenerateDataOn () |
| |
| virtual void | EnlargeOutputRequestedRegion (DataObject *output) |
| |
| virtual const bool & | GetAbortGenerateData () const |
| |
| DataObjectPointerArray | GetIndexedInputs () |
| |
| DataObjectPointerArray | GetIndexedOutputs () |
| |
| NameArray | GetInputNames () const |
| |
| DataObjectPointerArray | GetInputs () |
| |
| MultiThreaderBase * | GetMultiThreader () const |
| |
| DataObjectPointerArraySizeType | GetNumberOfIndexedInputs () const |
| |
| DataObjectPointerArraySizeType | GetNumberOfIndexedOutputs () const |
| |
| DataObjectPointerArraySizeType | GetNumberOfInputs () const |
| |
| DataObjectPointerArraySizeType | GetNumberOfOutputs () const |
| |
| virtual DataObjectPointerArraySizeType | GetNumberOfValidRequiredInputs () const |
| |
| NameArray | GetOutputNames () const |
| |
| DataObjectPointerArray | GetOutputs () |
| |
| virtual float | GetProgress () const |
| |
| NameArray | GetRequiredInputNames () const |
| |
| bool | HasInput (const DataObjectIdentifierType &key) const |
| |
| bool | HasOutput (const DataObjectIdentifierType &key) const |
| |
| void | IncrementProgress (float increment) |
| |
| virtual void | PrepareOutputs () |
| |
| virtual void | PropagateRequestedRegion (DataObject *output) |
| |
| virtual void | ResetPipeline () |
| |
| virtual void | SetAbortGenerateData (bool _arg) |
| |
| void | SetMultiThreader (MultiThreaderBase *threader) |
| |
| virtual void | Update () |
| |
| virtual void | UpdateLargestPossibleRegion () |
| |
| virtual void | UpdateOutputData (DataObject *output) |
| |
| virtual void | UpdateOutputInformation () |
| |
| void | UpdateProgress (float progress) |
| |
| virtual void | SetReleaseDataFlag (bool val) |
| |
| virtual bool | GetReleaseDataFlag () const |
| |
| void | ReleaseDataFlagOn () |
| |
| void | ReleaseDataFlagOff () |
| |
| virtual void | SetReleaseDataBeforeUpdateFlag (bool _arg) |
| |
| virtual const bool & | GetReleaseDataBeforeUpdateFlag () const |
| |
| virtual void | ReleaseDataBeforeUpdateFlagOn () |
| |
| virtual void | ReleaseDataBeforeUpdateFlagOff () |
| |
| | itkVirtualSetClampMacro (NumberOfWorkUnits, ThreadIdType, 1, ITK_MAX_THREADS) |
| |
| virtual const ThreadIdType & | GetNumberOfWorkUnits () const |
| |
| unsigned long | AddObserver (const EventObject &event, Command *cmd) const |
| |
| unsigned long | AddObserver (const EventObject &event, std::function< void(const EventObject &)> function) const |
| |
| virtual void | DebugOff () const |
| |
| virtual void | DebugOn () const |
| |
| Command * | GetCommand (unsigned long tag) |
| |
| bool | GetDebug () const |
| |
| MetaDataDictionary & | GetMetaDataDictionary () |
| |
| const MetaDataDictionary & | GetMetaDataDictionary () const |
| |
| virtual ModifiedTimeType | GetMTime () const |
| |
| virtual const TimeStamp & | GetTimeStamp () const |
| |
| bool | HasObserver (const EventObject &event) const |
| |
| void | InvokeEvent (const EventObject &) |
| |
| void | InvokeEvent (const EventObject &) const |
| |
| virtual void | Modified () const |
| |
| void | Register () const override |
| |
| void | RemoveAllObservers () |
| |
| void | RemoveObserver (unsigned long tag) const |
| |
| void | SetDebug (bool debugFlag) const |
| |
| void | SetReferenceCount (int) override |
| |
| void | UnRegister () const noexcept override |
| |
| void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
| |
| void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
| |
| virtual void | SetObjectName (std::string _arg) |
| |
| virtual const std::string & | GetObjectName () const |
| |
| Pointer | Clone () const |
| |
| virtual void | Delete () |
| |
| virtual int | GetReferenceCount () const |
| |
| void | Print (std::ostream &os, Indent indent=0) const |
| |
|
| void | ComputeLaplacianMatrix (MatrixType &ioL) |
| |
| OutputCoordinateType | ComputeMixedArea (OutputQEPrimal *iQE1, OutputQEPrimal *iQE2) |
| |
| OutputCoordinateType | ComputeMixedAreaForGivenVertex (OutputPointIdentifier iId) |
| |
| virtual void | ComputeVertexIdMapping () |
| |
| void | FillMatrix (MatrixType &iM, VectorType &iBx, VectorType &iBy, VectorType &iBz) |
| |
| void | FillMatrixRow (OutputPointIdentifier iId, unsigned int iDegree, OutputCoordinateType 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 ()=default |
| |
| | ~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 | 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 | 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 | ThreaderUpdateProgressOff () |
| |
| virtual void | SetThreaderUpdateProgress (bool arg) |
| |
| | Object () |
| |
| bool | PrintObservers (std::ostream &os, Indent indent) const |
| |
| 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 | PrintTrailer (std::ostream &os, Indent indent) const |
| |
| virtual | ~LightObject () |
| |