We have produced a Java class called Mesh, which is used to represent the faces in terms of 3D points,
triangles and texture coordinates corresponding to one or more jpg files. This is similar to the representation
in VRML files, which are widespread in research and on the internet. Various other classes and functions for the
Mesh class have been written in order to implement the following algorithm (details of the code are given in the
appendices).
The algorithm for fitting our standard "mesh" to a C3D face (see Figure 1):
(i) load a vrml version of the C3D face into a program which enables the manual placement of "landmarks"
i.e. points projected onto planes of triangulated surface. (A program written by June Mao in the Faraday
lab was used for this).
(ii) mark the face at anatomically and geometrically predictable points - 50 used here (with a view to
extension to forensic facial reconstruction of skulls, some of the identifiable positions mentioned in [11]
were used, plus such easily identifiable points as the corners of eyes and mouth - see figure 1.
(iii) triangulate these landmarks (provided landmarks are placed in predetermined order this
just involves reading triangle information from file and setting the mesh's triangles field to
this).
(iv) use the range map data (containing dense surface information), which is generated by the C3D capture device,
to move/clip these original landmarks onto the surface (algorithm for this involves iteratively expanding and contract
ing a ball around each landmark in turn until the ball contains only one point corresponding to the range map data -
then move the landmark to this point).
(v) refine this mesh by joining up the midpoints of each triangle.
(vi) clip points to surface i.e. do (iv) again.
(vii) apply a smoothing algorithm (see section 3.4.1)
(viii) repeat steps (v) to (vii) another two times, smoothing again once or twice at the end if necessary
(i.e. some faces have more accurate range map data than others).