mirror of https://github.com/CGAL/cgal
parent
0cb55dfd8d
commit
9045c762dd
|
|
@ -9,7 +9,7 @@
|
|||
\cgalPkgPicture{sma-pkg-small.png}
|
||||
|
||||
\cgalPkgSummaryBegin
|
||||
\cgalPkgAuthors{Pierre Alliez, Lingjie Zhu}
|
||||
\cgalPkgAuthors{Pierre Alliez, David Cohen-Steiner, Lingjie Zhu}
|
||||
\cgalPkgDesc{This package implements the Variational Shape Approximation method to approximate an input surface triangle mesh by a simpler indexed face set or polyhedral surface mesh. The algorithm proceeds by iterative clustering of triangles, the clustering process being initialized either randomly, incrementally or hierarchically. The API is flexible and can be extended to user-defined error metrics.}
|
||||
\cgalPkgManuals{Chapter_Triangulated_Surface_Mesh_Approximation,PkgTSMA}
|
||||
\cgalPkgSummaryEnd
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ namespace CGAL {
|
|||
\anchor Chapter_Triangulated_Surface_Mesh_Approximation
|
||||
|
||||
\cgalAutoToc
|
||||
\authors Pierre Alliez, Lingjie Zhu
|
||||
\authors Pierre Alliez, David Cohen-Steiner, Lingjie Zhu
|
||||
|
||||
\section sma_introduction Introduction
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ Figure \cgalFigureRef{iterations} depicts several Lloyd clustering iterations on
|
|||
Discrete Lloyd iterations on the plane-sphere model with planar proxies and the \f$ \mathcal{L}^{2,1} \f$ metric: (left) random seeding of 6 proxies; (center) after one iteration; (right) after 8 iterations, the regions settle. The red lines depict the proxy normals drawn at the seed facets.
|
||||
\cgalFigureEnd
|
||||
|
||||
On the right side of the figure is the fitting error curve at each iteration. After 8 iterations, the error barely changes. Based on this observation, we assume that the clustering converges if the error change of current iteration to the last one is less than a threshold (indicated by two green dash lines).
|
||||
We plot the fitting error against each iteration. After 8 iterations, the error barely changes. Based on this observation, we consider that the clustering converges if the error change between the current and previous iteration is lower than a user-specifed threshold (indicated by two green dash lines).
|
||||
|
||||
\subsection sma_seeding Seeding
|
||||
|
||||
|
|
@ -50,13 +50,13 @@ Each proxy is always associated with a <em>seed</em> triangle facet in the input
|
|||
|
||||
\subsubsection sma_method Method
|
||||
|
||||
To start the clustering iterations, we need a set of initial proxies. Starting from a single partition fitted with one proxy initialized from the first facet of the input mesh, we add more and more proxies to drive the error down gradually. Usually, after adding some proxies, we perform several inner clustering iterations, which is referred as <em>relaxation</em> in seeding.
|
||||
To start the clustering iterations, we need a set of initial proxies. Starting from a single partition fitted with one proxy initialized from the first facet of the input mesh, we add more and more proxies to drive the error down gradually. After adding some proxies, we perform several inner clustering iterations, which is referred as <em>relaxation</em> in seeding.
|
||||
|
||||
Suppose we have a clustering of \f$n\f$ partitions with errors \f$ \{E_k\}_{k=1\cdots n} \f$, and we want \f$m\f$ more proxies, the package provides 3 different seeding methods:
|
||||
Assume a clustering of \f$n\f$ partitions with errors \f$ \{E_k\}_{k=1\cdots n} \f$, and we want \f$m\f$ more proxies. We provide 3 different seeding methods:
|
||||
- <b>Random</b>. \f$m\f$ seed facets are picked randomly on the surface.
|
||||
- <b>Incremental</b>. Each new proxy is initialized from a facet of the worse region matching the largest approximation error. The facet itself is chosen as the one realizing the largest error in its region.
|
||||
- <b>Hierarchical</b>. \f$m\f$ seed facets are dispatched within the current partition, where each partition is refined with a number of proxies chosen in accordance to their fitting error:
|
||||
- calculate total error \f$ E_{total} \f$, then average error \f$ E_{avg} = E_{total} / m \f$ (hoping that each new proxy shares the same amount of error)
|
||||
- calculate total error \f$ E_{total} \f$, then average error \f$ E_{avg} = E_{total} / m \f$ (assuming that each new proxy shares the same amount of error)
|
||||
- sort errors \f$ \{E_{min},\cdots,E_{max}\} \f$
|
||||
- from \f$ E_{min} \f$ to \f$ E_{max} \f$, we diffuse the error <em>hierarchically</em> one after another. More specifically, the number of proxies added to the \f$k\f$th region is proportional to its error given by the formula:
|
||||
\f[ nb\_to\_add\_k = rounded\_to\_nearest\_integer(E_k / E_{avg}), \f]
|
||||
|
|
@ -279,7 +279,7 @@ The \f$ \mathcal{L}^{2,1} \f$ is numerically superior to \f$ \mathcal{L}^2 \f$ i
|
|||
|
||||
\section sma_history Design and Implementation History
|
||||
|
||||
This package is the result of the work of Lingjie Zhu during the 2017 season of the Google Summer of Code, mentored by Pierre Alliez. The code is based on an initial research code written by Pierre Alliez at Inria in 2003, for a paper published at the ACM SIGGRAPH conference in 2004 \cgalCite{cgal:cad-vsa-04}.
|
||||
This package is the result of the work of Lingjie Zhu during the 2017 season of the Google Summer of Code, mentored by Pierre Alliez. The code is based on an initial research code written by Pierre Alliez at Inria in 2003, for a paper published at the ACM SIGGRAPH conference in 2004, authored by David Cohen-Steiner, Pierre Alliez and Mathieu Desbrun \cgalCite{cgal:cad-vsa-04}.
|
||||
|
||||
*/
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue