# A Comprehensive Survey of Isocontouring Methods: Applications, Limitations and Perspectives
## 4 Surface Nets Algorithms  
The surface nets algorithm was first presented by [PERSON] in [45] for the creation of a globally smooth surface model from a set of three-dimensional data points. The method is commonly used in computer graphics, e.g., medical imaging, and computational geometry to create smooth surfaces from binary segmented data. The advantage of this  
Figure 8: Calculation of intersection points for each triangle \(k\in\mathbf{K}\) from [39]. Figure 7: Basic approach of the RooTri() function from [39]: \(\copyright\) three-dimensional point cloud \(\mathcal{P}\) and defined contour level, \(\copyright\) projection of the point cloud onto the original plane to obtain the set \(\mathcal{P}^{\prime}\), \(\copyright\) Delaunay triangulation of the point cloud to receive triangle set \(\mathbf{K}\), \(\copyright\) re-adding the \(z\)-component to each triangle vertex \(k\in\mathbf{K}\). method is its simplicity and effectiveness, which makes it a popular choice for the creation of surface models from structured three-dimensional point clouds, such as binary-segmented MRI or CT image volumes. However, it may not always produce the most accurate or detailed meshes, especially in regions with complex geometry or high curvature. Overall, this method follows a similar approach to the marching cubes algorithm in the initial steps. Nevertheless, the two methods differ with regard to the exact determination of the surface area within a cube. The basic idea of the surface nets algorithm is to link the surface nodes of the binary-segmented volume and relax the node positions within a given dimension in such a way that a smooth surface is generated. The linked surface nodes form the surface nets. To generate the surface net, the first step is to find the surface nodes in the data. To do this, the three-dimensional point cloud is first divided into cubes with eight voxels each. If all eight voxels have the same binary value, this means that the cube is either completely inside or outside the object. If at least one voxel has a different binary value from its neighbors, then the surface travels through this cube. A node is placed in the centroid of all cubes through which the surface travels and connected to the node in the neighboring surface cubes to create the surface net; see Figure 9a. One node can thereby have up to six connections. The positions of the nodes of the surface net are then iteratively relaxed so that an energy measure in the links is reduced. Here, the energy \(E\) is determined in [46] by the sum of the length of the connections between the nodes within a surface net, as shown in Equation (9). \[E=\sum_{n}\lVert(x_{1},y_{1},z_{1})-(x_{2},y_{2},z_{2})\rVert \tag{9}\]  
In this connection, \((x_{1},y_{1},z_{1})\) and \((x_{2},y_{2},z_{2})\) describe the two linked nodes and \(n\) represents all links within a surface net. Subsequently, the total energy is reduced by reducing the length of all links in a surface net and a local minimum of energy is achieved by moving the nodes to a position between two neighboring nodes, as shown in Equation (10) for node \(i\). \[(x_{i},y_{i},z_{i})=\frac{1}{N_{i}}\left(\sum_{j=1}^{N_{i}}x_{j},\,\sum_{j=1}^ {N_{i}}y_{j},\,\sum_{j=1}^{N_{i}}z_{j}\right) \tag{10}\]  
The number of neighboring links for node \(i\) is described here via \(N_{i}\). However, a node can only be moved within the surface cube in which it was defined, in order to remain true to the original segmentation; see Figure 9b. This makes it possible to reduce the aliasing and terracing artifacts on the surface. In contrast to the marching cubes algorithm, the surfaces in the surface nets algorithm are not drawn arbitrarily through the surface cubes, which have identical elements at the opposite corners. In marching cubes, there are two different ways in which the surface can run through the cube, which leads to topologically different surfaces; see Figure 9f, \(g\). One of the two possibilities is chosen arbitrarily.