Gaussian Curvature Filter on 3D Meshes

In one sentenceGCF smooths and denoises triangle meshes by lowering Gaussian curvature without computing it: each vertex moves far enough to put a neighbour on its tangent plane. One parameter, about 18× faster than Gaussian curvature flow.
The problem
Triangle meshes from 3D scanners and other acquisition pipelines are often noisy, and a noisy mesh has higher Gaussian curvature than its noise-free counterpart. Reducing Gaussian curvature therefore smooths and denoises a mesh, and driving it to zero everywhere gives a developable surface, one that can be flattened onto a plane without distortion and is easy to manufacture.
The classical way to minimize Gaussian curvature is Gaussian curvature flow, and it has two problems. It computes Gaussian curvature explicitly, which implicitly assumes the surface is second-order differentiable, a condition real meshes rarely satisfy. It also needs a small time step to stay numerically stable, so it is slow, and in the paper’s tests the step size had to be tuned per mesh. Dedicated denoising methods, mostly built on vertex or face normals, bring their own difficulty: many manually set parameters and strong prior assumptions, and on models rich in texture they can damage the original features while removing noise.

How it works
The filter rests on one observation. On a developable surface, every point has another point arbitrarily close to it that lies on its tangent plane (Theorem 1 of the paper). So the Gaussian curvature at a vertex can be reduced by moving the vertex until one of its neighbours falls on its tangent plane. If a neighbour already lies there, the vertex does not move. The filter never computes Gaussian curvature itself and needs no second derivatives.

- A neighbour on the tangent plane. On a developable surface such as a cylinder, a cone or a tangent surface, a point x always has a nearby point x0 on its tangent plane. On a discrete mesh that point need not be a vertex, so the filter takes the 1-ring neighbours (the vertices directly connected to it) as candidates and uses one of them as an approximation.
- Domain decomposition. A colouring step (Algorithm 1) gives every vertex a label that none of its neighbours has. Each colour set is updated in turn, so a vertex moves while its 1-ring neighbours stay fixed. This is what keeps the iteration convergent, and the independent sets also make the algorithm easy to parallelise.
- Moving distance without constraint. For vertex vi, compute the distance from each 1-ring neighbour to the tangent plane of vi and take the smallest absolute value as the moving distance |d|.
- Moving distance with constraint. For feature preservation, the normal of each neighbour is also used (the unit cross product of its two adjacent edges). Every edge from vi to a neighbour is projected onto the normal of vi and onto every neighbour normal, 5 edges × 6 normals (the normal of vi and the five neighbour normals) = 30 distances for a five-neighbour ring, and the smallest absolute value is taken. At a vertex on a plane, an edge or a corner, some normal is perpendicular to an edge, so |d| = 0 and the vertex keeps its position.
- Vertex update. The vertex moves to v′ = v + |d|·δ, where δ is the unit vector opposite to the differential coordinate (the vertex minus the centroid of its neighbours), which approximates the reverse normal direction. Boundary vertices are not moved. Repeating this over all colour sets for a set number of iterations, the filter’s only parameter, lowers the Gaussian curvature of the whole mesh.


Results
The paper tests two properties. For Gaussian curvature minimization, it compares the filter with Gaussian curvature flow on the Max Planck head and the Vase, without noise and with noise of 0.3 times the average edge length le. Both projection strategies lower the Gaussian curvature energy faster than the flow. Without the constraint the filter converges after about 10 iterations, but details are lost and the angular error rises again after its first rapid drop; with the constraint it converges after about 40 iterations and keeps details while removing noise. Against the developability method of Stein et al. (SIGGRAPH 2018), both reach similar results on noise-free meshes, with lower energy for the filter. On the noisy bunny the filter reaches a Gaussian curvature energy of 83.48 against 323.21 and an MSAE of 11.86 against 12.59, in 37.90 s against 1571.10 s (Table 2). On the noisy mask, the method of Stein et al. produces a singularity, while the filter does not (Fig. 7).
For denoising, the filter runs 40 iterations and the seven compared optimization- and filter-based methods use their default parameters. Besides the lowest MSAE, it reaches the lowest Gaussian curvature energy of all methods on each of the four meshes; the paper reads the low MSAE as the best preservation of geometric features. On two real scans with unknown noise, an angel and a rabbit, it removes noise while keeping geometric features (Figs. 13 and 14). Without the geometric constraint, the filter can denoise but cannot preserve features. As future work, the authors plan a parallel version of the filter for very large meshes on the GPU.


Cite
@article{tang2020gaussian,
title={Gaussian Curvature Filter on 3D Meshes},
author={Tang, Wenming and Gong, Yuanhao and Liu, Kanglin and Liu, Jun and Pan, Wei and Liu, Bozhi and Qiu, Guoping},
journal={arXiv preprint arXiv:2003.09178},
year={2020}
}