next up previous
Next: Results Up: Implementation Previous: Calibration

Rendering

The author used a modified version of the simple light field sample generator written in OpenGL by Georg Petschnigg. The application keeps track of an array of projection and pose matrices corresponding to a camera's intrinsic and extrinsic parameters. At each frame, the application iterates through each camera's set of parameters and applies them to the world. Then it samples the plenoptic function as a 2D image. As mentioned above, the author chose to render hexagonal composite images using the same hexagonal dimensions as Isaksen et al., for 300 dpi printers. In this way, hexagonal composite images can be printed on a 300 dpi printer and viewed in the traditional technique of autostereoscopic displays. Each image resolution is 248x216, which is sampled 8 times larger than the pixel coverage of a single lenslet when pixels are printed at 300 dpi. This effectively supersamples the angular domain of each lenslet. The image is then down-sampled using a box filter to 31x27, where it is multiplied by a hexagonal mask. The final cropped image is then composited next to adjacent haxagonal images to produce a final, composite image. Orginally, the author had implemented this process using multiple files, each file holding a 248x216 image. The files were generated in Windows 2000 and sent over to a Linux OS to convert to tiff and to warp and composite. This process took about an hour to render an image. Most the time came from moving large quantites of small-sized files back and forth. Each frame held about 2500 lenslet images, which is very hard on the Windows file system, for a single directory. A second method was adopted which takes subimages and process them all in memory, so compositing and cropping was performed quickly - reducing frame rendering time to about 15 minutes per frame. Section 5 discusses some further approaches to accelerating the rendering time by taking advantage of hardware fill rates. Computing the intrinsics of each camera is performed in a straightforward manner using the following relation: 1 unit = 1 pixel = 0.0033333 inches. The pixel to inch relation follows from assuming a 300 dpi display. Since each camera in OpenGL is modeled as a pinhole camera, setting the focal plane doesn't have much importance. In any case, the near plane is set at the focal distance (0.12 in) and the far plane is set at close to infinity. The original FOV used was 40 degrees, computed using techniques from Section 2.2.2. However, this sized FOV creates a halo around the images. The halo comes from lenslets that can see edges of the centered object due to a larger FOV. In theory, a fully calibrated display would not exhibit such behavior, but any slight deviation will cause rays that normally miss the object to actually hit it near its silhouette edges, hence causing a halo. The author also tried out other degrees for the FOV: 10, 20, 30. With 10 degrees FOV, the projected image is very crisp, but exhibits little to no parallax. In the worst case, the FOV is infinitely small, causing the entire lenslet array to act as an orthographic camera, which has no parallax as the camera translates. At 30 degrees, the image is slightly crisper, with noticeable haloing effects. At 20 degress the halo effects are not very noticeable, but parallax can still be seen as the observer moves around.
next up previous
Next: Results Up: Implementation Previous: Calibration
Billy Chen 2002-06-10