Michael Holroyd

Hey! This site is old.
Visit http://meekohi.com/Holroyd10 instead.

back to index
Office: Small Hall
e-mail: meekohi@cs.virginia.edu
AIM: meekohi

A Coaxial Optical Scanner for Synchronous Acquisition of
3D Geometry and Surface Reflectance

Michael Holroyd
University of Virginia
Jason Lawrence
University of Virginia
Todd Zickler
Harvard University

main result
We present a novel optical setup and processing pipeline for measuring the 3D geometry and spatially-varying surface reflectance of physical objects. Central to our design is a digital camera and a high frequency spatially-modulated light source aligned to share a common focal point and optical axis. Pairs of such devices allow capturing a sequence of images from which precise measurements of geometry and reflectance can be recovered. Our approach is enabled by two technical contributions: a new active multiview stereo algorithm and an analysis of light descattering that has important implications for image-based reflectometry. We show that the geometry measured by our scanner is accurate to within 50 microns at a resolution of roughly 200 microns and that the reflectance agrees with reference data to within 5.5%. Additionally, we present an image relighting application and show renderings that agree very well with reference images at light and view positions far from those that were initially measured.

    author  = {Michael Holroyd and Jason Lawrence and Todd Zickler},
    title   = {A Coaxial Optical Scanner for Synchronous Acquisition of {3D} Geometry and Surface Reflectance},
    journal = {ACM Transactions on Graphics (Proceedings of SIGGRAPH 2010)},
    year    = {2010}
(16.6 MB)
Supplemental Tech Report:
A radiometric analysis of projected sinusodial
illumination for opaque surfaces

(600 KB)
SIGGRAPH Powerpoint
[zip] (43 MB)



If you have questions or are interested in some other data from this project please e-mail Michael Holroyd.
For example, you might prefer the raw BRDF measurements obtained at each vertex, or individual 2.5D scans.

bird.ply (24MB)
bird.fac (35MB)
frog.ply (10MB)
frog.fac (15MB)
cat.ply (7MB)
cat.fac (18MB)

Each object has a .ply file that contains the triangle mesh, as well as a .fac file that contains linear blending weights for each vertex and a small set of basis BRDFs. The basis BRDFs are represented as regularly sampled single variable functions of the angle between the surface normal and half-angle vector.

The .fac file starts with a single ASCII line header with 3 integers.

M: The number of vertices (the same number as is in the .ply file)
N: The number of samples in the basis BRDFs (either 128 or 256)
K: The number of basis BRDFs (either 3 or 6)

Next is a block of 3*K*M binary floating point numbers that represent the blending weights. The whole thing is split into a block for each pixel, which is split into a block for each color channel, which has the K blending weights in it. In other words access it with: weights[3*K*pixelIdx + K*colorIdx + basisIdx]

Finally, there is a block of 3*K*N binary floating point numbers that represent the K basis BRDFs each sampled regularly in the halfangle. Access them with basis[3*(N*basisIdx + angleIdx) + colorIdx] where angleIdx = N * 2 * acos(n dot h) / pi;

Note that the .ply file also contains a color at each vertex, which is just the average color over the N sampled directions. Mostly this is just useful for testing and doesn't actually correspond to the diffuse albedo.

Sample code for reading files: