ÿþ<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Staircase-Aware Smoothing of Medical Surface Meshes</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="./data/style.css" type="text/css" charset="utf-8" /> <link rel="shortcut icon" href="./data/favicon.ico" type="image/x-icon"/> <link rel="icon" href="./data/favicon.ico" type="image/x-icon"/> </head> <body> <div class="content"> <div class="header"> <div class="images"> <img src="./data/header.png" alt="Header" height="291" width="700" /> </div> </div> <div class="box" id="menu_bar"> <div class="upper_left_corner"></div> <div class="upper_edge"></div> <div class="upper_right_corner"></div> <div class="outter_content_area"> <div class="inner_content_area"> <div class="menu_bar"> <p> <a href="./index.html#overview">overview</a> <a href="./index.html#views">views</a> <a href="./index.html#parameters">parameters</a> <a href="./index.html#download">download</a> <a href="./docs/Index.html" target="_blank">code documentation</a> </p> </div> </div> </div> <div class="lower_left_corner"></div> <div class="lower_edge"></div> <div class="lower_right_corner"></div> </div> <div class="spacer"></div> <div class="box" id="overview"> <div class="upper_left_corner"></div> <div class="upper_edge"></div> <div class="upper_right_corner"></div> <div class="outter_content_area"> <div class="inner_content_area"> <div style="margin: 12px 20px 9px;"> <h1>staircase-aware smoothing of medical surface meshes</h1> <p style="padding: 0px 0px 20px 0px"> This is an implementation staircase-aware mesh smoothing as proposed in the paper <a href="http://diglib.eg.org/EG/DL/WS/VCBM/VCBM10/083-090.pdf.abstract.pdf;internal&action=action.digitallibrary.ShowPaperAbstract" target="_blank">"Staircase-Aware Smoothing of Medical Surface Meshes"</a> by Tobias Mönch, Simon Adler, and Bernhard Preim. </p> <p> Generally, artifacts caused by noise and the discrete scan resolution can be reduced at several stages of the mesh generation process by using interpolation or smoothing methods. There exist numerous approaches to perform smoothing on the output mesh itself using a smoothing filter such as the Laplacian filter. Unfortunately, applying the filter uniformly to each vertex of the mesh also reduces small and possibly crucial features of the original data set and leads to volume shrinkage. As precision and resemblance to the real anatomy are vital for tasks such as preoperative surgical planning, it is important to create a mesh that is both accurate in shape and size and preserves all preservable features while removing all distracting artifacts. </p> <p> Therefore, Mönch et al. propose the use of non-uniform filtering by calculating per-vertex smoothing weights according to the vertices' proximity to an artifact edge based on their normal vectors and the direction of the image stack. Since the resolution of the volume data gathered in the image acquisition process is usually considerably smaller in the image stack direction than inside the slices itself, staircase and plateau artifacts will occur in the triangulation process (Marching Cubes) whenever the object shape changes between two consecutive slices such that no continuous transition can be reconstructed. Thus, the side faces of the staircase artifacts will be parallel to the image stack direction while the faces on top of it will be orthogonal to it. In other words, for perfectly vertical faces, the dot product of the face's normal vector and the image stack direction will be 0, for horizontal faces it will be 1. </p> <p style="padding: 0px 0px 20px 0px"> Using this face orientation relative to the image stack direction, Mönch et al. calculate an orientation change per vertex, which can be used to classify vertices at the edge of artifacts, because they will have incident faces with both parallel and orthogonal orientation. With this identification of edge vertices, all vertices can be weighted according to their proximity to an edge vertex in order to smooth not only the edge itself, but also the neighborhood. The result is a weight that can be multiplied with the weighting factor of every common smoothing filter, making it very useful for practice. According to this weight, non-uniform smoothing can be performed on the mesh such that vertices in the surrounding of artifacts will be strongly smoothed, while all features of non-artifact regions are preserved. </p> <div class="imagesShadowed"> <img src="./data/roughness.png" alt="surface roughness" height="480" width="700" /> </div> <p> To demonstrate this technique, the proposed algorithm has been implemented in a .NET Framework 4.0 application using OpenGL via OpenTK for the rendering of the results. Wavefront Object (*.obj) mesh files can be imported and both uniform Laplacian smoothing and non-uniform staircase-aware smoothing can be applied to the mesh. The smoothed results can then be exported. </p> <p> For easy comparison of the results of both smoothing methods as well as to visualize intermediate results of the implemented algorithm, several views can be juxtaposed. As an example, the screenshot above shows the surface roughness (calculated from a mean curvature estimation) for the original mesh (left) and the result of staircase-aware smoothing (right). </p> </div> </div> </div> <div class="lower_left_corner"></div> <div class="lower_edge"></div> <div class="lower_right_corner"></div> </div> <div class="box" id="views"> <div class="upper_left_corner"></div> <div class="upper_edge"></div> <div class="upper_right_corner"></div> <div class="outter_content_area"> <div class="inner_content_area"> <div style="margin: 12px 20px 9px;"> <h1>views</h1> <div class="imagesShadowed" style="padding: 20px 20px 0px 20px"> <img src="./data/original_mesh.png" alt="original mesh" height="212" width="200" /> <img src="./data/original_face_orientations.png" alt="face orientations" height="212" width="200" /> <img src="./data/original_vertex_orientations.png" alt="vertex orientations" height="212" width="200" /> </div> <div class="imagesShadowed" style="padding: 0px 20px 40px 20px"> <img src="./data/original_distances.png" alt="distances to artifacts" height="212" width="200" /> <img src="./data/original_weights.png" alt="smoothing weights" height="212" width="200" /> <img src="./data/original_roughness.png" alt="surface roughness" height="212" width="200" /> </div> <p> <b>Original mesh</b> - The unprocessed, diffuse shaded input mesh. The model used for this example, lungs.obj, is included in the <a href="./index.html#download">download</a> below. </p> <p> <b>Attribute: Face orientations</b> - Per-face orientations relative to the stack orientation calculated as <i>1 - dot(face orientation, stack orientation)</i>. </p> <p> <b>Attribute: Vertex orientation changes</b> - Per-vertex orientation changes based on the highest orientation change of adjacent faces relative to the stack orientation. </p> <p> <b>Attribute: Distance to artifacts</b> - Per-vertex topological distance to the closest artifact vertex in the mesh. An artifact vertex is defined as a vertex which has an orientation change greater than a predefined threshold. </p> <p> <b>Attribute: Vertex smoothing weights</b> - Per-vertex staircase-aware smoothing weights based on the minimum distance of each vertex to an artifact vertex. </p> <p style="padding: 0px 0px 40px 0px"> <b>Attribute: Surface roughness</b> - Per-vertex roughness estimation of the mesh calculated as <i>1 - mean curvature</i>. </p> <div class="imagesShadowed"> <img src="./data/uniform_mesh.png" alt="uniformly smoothed mesh" height="212" width="200" /> <img src="./data/uniform_distance.png" alt="distance to the original mesh" height="212" width="200" /> <img src="./data/uniform_roughness.png" alt="surface roughness" height="212" width="200" /> </div> <p> <b>Uniform Laplace Smoothing</b> - Diffuse shaded result of uniform Laplacian smoothing. Additionally, the approximate volume shrinkage relative to the original mesh is displayed. </p> <p> <b>Attribute: Difference to original mesh</b> - Per-vertex normalized local distance to the original mesh to visualize the difference between the meshes. </p> <p style="padding: 0px 0px 40px 0px"> <b>Attribute: Surface roughness</b> - Per-vertex roughness estimation of the mesh calculated as <i>1 - mean curvature</i>. </p> <div class="imagesShadowed"> <img src="./data/nonuniform_mesh.png" alt="staircase-aware smoothed mesh" height="212" width="200" /> <img src="./data/nonuniform_distance.png" alt="distance to the original mesh" height="212" width="200" /> <img src="./data/nonuniform_roughness.png" alt="surface roughness" height="212" width="200" /> </div> <p> <b>Staircase-aware Smoothing</b> - Diffuse shaded result of staircase-aware smoothing. Additionally, the approximate volume shrinkage relative to the original mesh is displayed. </p> <p> <b>Attribute: Difference to original mesh</b> - Per-vertex normalized local distance to the original mesh to visualize the difference between the meshes. </p> <p> <b>Attribute: Surface roughness</b> - Per-vertex roughness estimation of the mesh calculated as <i>1 - mean curvature</i>. </p> </div> </div> </div> <div class="lower_left_corner"></div> <div class="lower_edge"></div> <div class="lower_right_corner"></div> </div> <div class="box" id="parameters"> <div class="upper_left_corner"></div> <div class="upper_edge"></div> <div class="upper_right_corner"></div> <div class="outter_content_area"> <div class="inner_content_area"> <div style="margin: 12px 20px 9px;"> <h1>parameters</h1> <p> <b>Stack orientation</b> - The stack orientation is the most important parameter for the staircase artifact detection. The alignment of slices in the image stack prior to the triangulation and mesh creation specifies the orientation of plateau and staircase artifacts, so a wrong definition of this orientation leads to undesired results. It is specified as a three-dimensional vector which is normalized in the application before usage. </p> <p style="padding: 0px 0px 20px 0px"> For a better understanding of the relation between the stack orientation and the face orientations, the stack orientation can be displayed. </p> <p> <b>Staircase artifact detection</b> - In the paper by Mönch et al., two parameters are introduced to control the quality of the artifact detection. </p> <p> To consider only vertices as artifact vertices which have a high orientation change, the <b>orientation change threshold</b> is used. The orientation change is a value between 0 and 1, where 0 indicates that all adjacent faces of a vertex have the exact same orientation and 1 indicates that at the vertex, the surface orientation changes by 90 degrees. Therefore, a higher threshold selects only hard edges, whereas a smaller threshold also includes smoother edges. </p> <p style="padding: 0px 0px 20px 0px"> After the artifact vertices are detected, the minimum distance of each vertex to an artifact vertex and a smoothing weight based on this distance are calculated. In order to avoid smoothing of vertices very far away from any artifact region, the <b>distance threshold</b> is used to limit the distance to a specific range between 0 and 1. The distances are scaled such that 1 is the highest topological distance of any vertex of the mesh to an artifact, whereas an artifact vertex itself has a distance of 0. Therefore, a lower threshold restricts smoothing to regions close to artifacts. </p> <p> <b>Smoothing</b> - Laplacian smoothing moves each vertex a bit into the direction of the centroid of all adjacent vertices. Therefore, a <b>Laplace smoothing weight</b> has to be specified to control the strength of this vertex displacement. For a smooth mesh, the process is iterated a few times, thus the <b>number of iterations</b> is required, too. </p> <p> When using non-uniform smoothing based on per-vertex smoothing weights, it might be desirable to define a <b>minimum smoothing weight</b> such that the whole mesh is uniformly smoothed and additional smoothing is performed at the artifact regions. </p> </div> </div> </div> <div class="lower_left_corner"></div> <div class="lower_edge"></div> <div class="lower_right_corner"></div> </div> <div class="box" id="download"> <div class="upper_left_corner"></div> <div class="upper_edge"></div> <div class="upper_right_corner"></div> <div class="outter_content_area"> <div class="inner_content_area"> <div style="margin: 12px 20px 9px;"> <h1>download</h1> <p> <a href="./data/StaircaseAwareSmoothing.zip">Download the source code, binaries for Windows, and sample data sets (19.2 MB).</a> </p> <p> The data sets have been retrieved from <a href="http://pubimage.hcuge.ch:8080/" target="_blank">http://pubimage.hcuge.ch:8080/</a>. </p> <p style="padding: 0px 0px 20px 0px"> Please note that the application requires the <a href="http://www.microsoft.com/en-us/download/details.aspx?id=17113" target="_blank">.NET Framework 4.0 Client Profile</a> to function properly. </p> <p> <a href="./docs/Index.html" target="_blank">The generated documentation for the code can be found here.</a> </p> </div> </div> </div> <div class="lower_left_corner"></div> <div class="lower_edge"></div> <div class="lower_right_corner"></div> </div> <div class="footer"> <div class="copyright"> <p style="margin: 0; float: right;">Daniel Cornel, 2012</p> </div> </div> </div> </body> </html>