Assignment 2: View Transformation

Name: Wing Ho (Howard) Leung


My face is scanned using the Minolta Vivid 700 Scanner. 

Data conversion:

The starter code is modified to be used in PC Windows Platform. The Inventor format of the 3D model is extracted and converted to a rectangular array of depth and r, g, b values. The resulting image and the depth map are shown below:


Depth Map


After using the starter code to convert the data from the Inventor format to the rectangular array of depth and RGB, the remaining part is implemented in Matlab. I approximate the pixel's shape in the new image as a single pixel. This approach gives me holes on the resulting image. The time to generate one view is about 1 min on a Pentium II 450MHz computer.

The visibility algorithm is also implemented.  First the desired center of projection is projected onto the original image plane.  Then depending on the sign of w, and considering the 9 cases for each w, it is first decided whether there should be 1/2/4 sheets and then the enumeration order of the facet (in my case a pixel) is determined.

Generation of new views:

The following rows are the new views resulted from the moving the camera to different locations. From the images it can be seen that when digitizing the image, the part below the nose appears flat. Therefore a big gap can be seen in between the nose and mouth. The views provide better 3D visual effects when viewd from the top.

The following demonstrates the zooming of the frontal view.




It can be seen that when the picture is zoomed out, there are discontinuities. Smoothing can be applied to the picture to reduce this effect.

Future improvement and Extension:

If I have more time, there are several places for further improvement. For example, some hole-filling algorithm can be applied to fill out the gaps. Besides, it will be faster to generate the output if I use C instead of Matlab for the implementation.