Home\Projects\ctr2suf
Computer Graphics Forum (Proceedings of Eurographics 2008), 27(2):155-163
L. Liu[1], C. Bajaj[2], J. O. Deasy[1], D. A. Low[1] and T. Ju[1]
[1]Washington University in St. Louis, USA
[2]University of Texas at Austin, USA

Abstract


Building surfaces from cross-section curves has wide applications including bio-medical modeling. Previous work in this area has mostly focused on connecting simple closed curves on parallel cross- sections. Here we consider the more general problem where input data may lie on non-parallel cross- sections and consist of curve networks that represent the segmentation of the underlying object by different material or tissue types (e.g., skin, muscle, bone, etc.) on each cross-section. The desired output is a surface network that models both the exterior surface and the internal partitioning of the object. We introduce an algorithm that is capable of handling curve networks of arbitrary shape and topology on cross-section planes with arbitrary orientations. Our algorithm is simple to implement and is guaranteed to produce a closed surface network that interpolates the curve network on each cross-section. Our method is demonstrated on both synthetic and bio-medical examples.
A gallery of input curve networks and output surfaces reconstructed by our method.

Download


Input

  .contour file format.
    It starts with number of planes, followed by each plane. For each plane, it has parameters for the plane, number of contour vertices, number of contour edges, all the vertices represented as their locations and all the edges represented as its composition and material configuration.
    More specificially, a detailed description is as follows in line by line fashion:

File formatFormat explanation
#planes(t) first line, number of planes, it is t
a[0] b[0] c[0] d[0] parameter for the first plane, the plane is a[0]x + b[0]y + c[0]z = d[0]
#vers_1(m) #edges(n) number of contour vertices and number of edges on the plane, m and n respectively
v[0]_x v[0]_y v[0]_z the first vertex's location
v[1]_x v[1]_y v[1]_z the second vertex's location
.
.
.
other vertices
v[m-1]_x v[m-1]_y v[m-1]_z last vertex's location
e[0]_v_ind1 e[0]_v_ind2 e[0]_m_left e[0]_m_right the first and second edge's configuration, its two endpoints' index in above vertex array, its material index on the left and right
side, they are explained more later.
e[1]_v_ind1 e[1]_v_ind2 e[1]_m_left e[1]_m_right
.
.
.
other edges
e[n-1]_v_ind1 e[n-1]_v_ind2 e[n-1]_m_left e[n-1]_m_right last edge's configuration
.
.
.
other planes in the same format
a[t-1] b[t-1] c[t-1] d[t-1] last plane
...... last plane's vertex and edge info in the same format
    Note:
  1.     (1) No comments are allowed. Only 1 space is allowed between two numbers
  2.     (2) All indicies start from 0.
  3.     (3) Contours on one plane must be saved in one plane. Saving them twice in two planes with the same plane parameters does not work.
  4.     (4) When program takes in this format, it will do preprocessing of the data to compute the intersection points between two contour planes, and check the consistency of the data, such as valide material configuration.
To better illustrate the edge's materials, below shows one example of a slice in picture and its representation in the file.
The illustrative picture:
Vertex with its index 2
Edge with its index 4
Material with index 2
Material with index 1
Material with index 0
The corresponding plane in the file:
Vertex is represented as its location.
Edge is represented as: vertex_index1 vertex_index2 Material_left Material_right.
In file Explanation
0 0 1 -1 z = -1
7 7 7 vertices, 7 edges
0 1 -1 vertex 0 position
0.5 0.75 -1 vertex 1 position
1 1 -1 vertex 2 position
1 0 -1 vertex 3 position
0 0 -1 vertex 4 position
0.25 0.25 -1 vertex 5 position
0.75 0.25 -1 vertex 6 position
0 2 2 1 edge 0 composition,   ver0 to ver2, left mat 2, right 1
1 5 0 1 other edges
3 2 1 2
1 6 1 0
5 6 0 1
0 4 1 2
4 3 1 2
Edge's left and right:

Left picture illustrates the edge's left and right.
Place down the plane with normal pointing upwards. Based on the order of the two endpoints, the edge has its direction(red arrow in the picture), look along the direction, left side is the edge's left.
In the example above, normal of the slice points towards us.
  .CtrGraph file format.
    It starts with number of planes, followed by each plane. For each plane, it has parameters for the plane, number of contour vertices, number of contour edges, all the vertices represented as their locations and all the edges represented as its composition and material configuration.
    More specificially, a detailed description is as follows:
File formatFormat explanation
n #vertices(m) character 'n' and number of vertices: m
v v[0]_x v[0]_y v[0]_z character 'v' and vertex 0 location
v v[1]_x v[1]_y v[1]_z character 'v' and vertex 1 location
v v[2]_x v[2]_y v[2]_z character 'v' and vertex 2 location
.
.
.
v v[m-1]_x v[m-1]_y v[m-1]_z character 'v' and vertex m-1 location
n #planes(t) character 'n' and number of planes
p p[0]_a p[0]_b p[0]_c p[0]_d #edges(n[0]) The first plane: character 'p' and plane parameters, a, b, c, d and the number of contour edges on the plane.
e e[0]_ind1 e[0]_ind1 e[0]_m_left e[0]_m_right each edge information:       character 'e' followed by two vertex indices refering to the ones in the above vertex array, and two materials indices on the left and right. Refer to the above input file format for meaning of the left and right.
e e[1]_ind1 e[1]_ind1 e[1]_m_left e[1]_m_right
.
.
.
e e[n[0]-1]_ind1 e[n[0]-1]_ind1 e[n[0]-1]_m_left e[n[0]-1]_m_right
.
.
.
other planes
p p[t-1]_a p[t-1]_b p[t-1]_c p[t-1]_d #edges(n[t-1]) last plane.
e e[0]_ind1 e[0]_ind1 e[0]_m_left e[0]_m_right
e e[1]_ind1 e[1]_ind1 e[1]_m_left e[1]_m_right
.
.
.
e e[n[t-1]-1]_ind1 e[n[t-1]-1]_ind1 e[n[t-1]-1]_m_left e[n[t-1]-1]_m_right
    Note:
  1.     (1) Single lined comments are allowed!! With character #at the beginning.
  2.     (2) All the beginning characters: n, a, p, e are necessary.
  3.     (3) The contours must be well preprocessed, with all the intersection points among contours precomputed and saved in the vertex list.
  4.     Thanks to Daniel Einstein at Pacific Northwest National Laboratory who suggested this file format and came up with the illustrative figure representation.

Output

  .suf file format.
    It starts with number of vertices and number of faces in the mesh, followed by all the vertices represented as their locations and triangular faces represented as three vertex indices and material indices on positive and negative sides. Finally is the number of contour edges, followed by each contour edge represented as two vertices indices.
    More specificially, a detailed description is as follows:
File formatFormat explanation
#vers(m) #face(n) first line, number of vertices and faces, m and n respectively
v[0]_x v[0]_y v[0]_z vertex 0 location: x y z
v[1]_x v[1]_y v[1]_z vertex 1 location: x y z
.
.
.
other vertices locations
v[m-1]_x v[m-1]_y v[m-1]_z last vertex's location
f[0]_v_ind1 f[0]_v_ind2 f[0]_v_ind3 f[0]_m_positive f[0]_m_negative face 0 configuration, vertices indices in the above array, materials on the positive and negative sides of the face. See below for details.
f[1]_v_ind1 f[1]_v_ind2 f[1]_v_ind3 f[1]_m_positive f[1]_m_negative face 1
.
.
.
other faces
f[n-1]_v_ind1 f[n-1]_v_ind2 f[n-1]_v_ind3 f[n-1]_m_positive f[n-1]_m_negative last face
#Contour_Edges(t) contour edges number: t
ctrE[0]_v_ind1 ctrE[0]_v_ind2 contour edge 0 composition: vertices indices in the vertex array above
ctrE[1]_v_ind1 ctrE[1]_v_ind2 contour edge 1
.
.
.
other contour edges
ctrE[t-1]_v_ind1 ctrE[t-1]_v_ind2 last contour edge
    Note:
  1.     (1) No comments are allowed. Only 1 space is allowed between two numbers
  2.     (2) All indicies start from 0.
  3.     (3) If the surface is manifold, it has two materials: one for interior, the other for exterior; if there is no contour edges, set the contour edges number as 0. Smoothing and refinement can be used if you turn your mesh into the format as described above.
Positive and negative sides of a face:
The left picture shows the face in front and back view. According to the right hand rule, the order of the vetex indices gives the normal direction of the face, which defines the positive side of the face.

Manual

        Step 1: Read in a contour file.

        Step 2: Surface Reconstruction.

        Step 3: Surface Improvement

        Optional: Drag mouse, with left button pressed to rotate, middle button pressed to scale, and right button pressed to translate.