Contents

1.2 - Standardising Facial Representation

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).


refinement process
Figure 1 : Mesh refinement process.



NB texture is taken care of by the C3D function StdCamera.world2pixel(Point3d) function which gets the 2D coordinate in the jpg file(s) corresponding to the 3D surface point (if intermediate faces are required to be saved then corrections to texture have to be made using this function at each addition and movement of new vertices). Jpg images of size 576x768 pixels, resolution 72 pixels/inch are used for the texture.
The smoothing algorithm used is that described in [12]. This applies a smoothing filter on the mesh using a bandpass filter with parameters kPB = 0.1 and = 0.6307 as suggested therein. The other parameter is derived from the equation

Figure 2 compares the results for the above face with the original C3D vrml face. From the profile view it is evident that the shape of the lips and nose are more detailed in the new representation. The jaw/chin seems to be slightly narrower (this could just be an effect of the viewer as it looks ok when using "3D Exploration" but perhaps another 2 landmarks half way between chin and jaw corners might be wise. See Chapter on Future work for details of possible improvements/changes to starting mesh)



Figure 2 : Comparison of facial representations - faces on the left of each pair of images are from the original C3D vrml face (voxel size set to 0.005 in vrml generation, 7236 vertices, 14073 triangles, {+1434 vertices, 2012 triangles, around perimeter} vrml file size: 1,021KB); the faces on the right of each pair are those resulting from the algorithm described above (2801 vertices, 5504 triangles, vrml file size: 257KB); the size of the jpg used for texture mapping in both is 31KB. (see link1 (1MB) and link2 (257KB) - to see texture on model you'll need to download the jpg file Lee_Sonserai01.wrl0.jpg and put it in same place as the vrml file)

Contents

[home] [scientific research] [art/photos] [poems] [music] [links] [email me] [home]

[frames] [no frames]