#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 | InputPointType |
using | MatrixType = typename SolverTraits::MatrixType |
using | OutputCoordinateType |
using | OutputMeshType = TOutputMesh |
using | OutputPointIdentifier |
using | OutputPointType |
using | OutputQEIterator |
using | OutputQEPrimal |
using | OutputVectorType |
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 |
![]() | |
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 | InputCoordinateType = typename InputMeshType::CoordinateType |
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 | OutputCoordinateType = typename OutputMeshType::CoordinateType |
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> |
![]() | |
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> |
![]() | |
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 |
![]() | |
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 |
![]() | |
using | ConstPointer = SmartPointer<const Self> |
using | Pointer = SmartPointer<Self> |
using | Self = Object |
using | Superclass = 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, OutputCoordinateType> |
using | CoefficientMapConstIterator = typename CoefficientMapType::const_iterator |
using | CoefficientMapType = std::unordered_map<OutputQEPrimal *, OutputCoordinateType, 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, OutputCoordinateType> |
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 } |
![]() | |
TimeStamp | m_OutputInformationMTime {} |
bool | m_Updating {} |
![]() | |
std::atomic< int > | m_ReferenceCount {} |
Additional Inherited Members | |
![]() | |
static Pointer | New () |
![]() | |
static Pointer | New () |
![]() | |
static Pointer | New () |
![]() | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool val) |
![]() | |
static void | BreakOnError () |
static Pointer | New () |
![]() | |
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 229 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 228 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 226 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 225 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 214 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 213 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::InputMeshType = TInputMesh |
Input types.
Definition at line 131 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::InputPointType |
Definition at line 57 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::MatrixType = typename SolverTraits::MatrixType |
Definition at line 149 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::OutputCoordinateType |
Definition at line 83 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
|
protected |
Definition at line 209 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 211 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 210 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::OutputMeshType = TOutputMesh |
Output types.
Definition at line 137 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::OutputPointIdentifier |
Definition at line 89 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::OutputPointType |
Definition at line 88 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::OutputQEIterator |
Definition at line 92 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::OutputQEPrimal |
Definition at line 90 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
using itk::QuadEdgeMeshToQuadEdgeMeshFilter< TInputMesh, TOutputMesh >::OutputVectorType |
Definition at line 91 of file itkQuadEdgeMeshToQuadEdgeMeshFilter.h.
using itk::LaplacianDeformationQuadEdgeMeshFilter< TInputMesh, TOutputMesh, TSolverTraits >::Pointer = SmartPointer<Self> |
Definition at line 125 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 233 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 232 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 231 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
Referenced by GetNameOfClass().
|
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 |
Return the name of this class as a string. Used by the object factory (implemented in New()) to instantiate objects of a named type. Also used for debugging and other output information.
Reimplemented from itk::LightObject.
Reimplemented in itk::LaplacianDeformationQuadEdgeMeshFilterWithHardConstraints< TInputMesh, TOutputMesh, TSolverTraits >, and itk::LaplacianDeformationQuadEdgeMeshFilterWithSoftConstraints< TInputMesh, TOutputMesh, TSolverTraits >.
References LaplacianDeformationQuadEdgeMeshFilter().
|
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::LightObject.
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.
References m_CoefficientsMethod, and itk::Object::Modified().
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 243 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 237 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 240 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
Referenced by SetCoefficientsMethod().
|
protected |
Definition at line 236 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 235 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 238 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
protected |
Definition at line 242 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.
|
staticconstexpr |
Definition at line 145 of file itkLaplacianDeformationQuadEdgeMeshFilter.h.