Next: Results
Up: Implementation
Previous: Calibration
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: Results
Up: Implementation
Previous: Calibration
Billy Chen
2002-06-10