A Photometric Approach for Estimating Normals and Tangents

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


This paper presents a novel technique for acquiring the shape of real-world objects with complex isotropic and anisotropic reflectance. Our method estimates the local normal and tangent vectors at each pixel in a reference view from a sequence of images taken under varying point lighting. We show that for many real-world materials and a restricted set of light positions, the 2D slice of the BRDF obtained by fixing the local view direction is symmetric under reflections of the halfway vector across the normal-tangent and normal-binormal planes. Based on this analysis, we develop an optimization that estimates the local surface frame by identifying these planes of symmetry in the measured BRDF. As with other photometric methods, a key benefit of our approach is that the input is easy to acquire and is less sensitive to calibration errors than stereo or multi-view techniques. Unlike prior work, our approach allows estimating the surface tangent in the case of anisotropic reflectance. We confirm the accuracy and reliability of our approach with analytic and measured data, present several normal and tangent fields acquired with our technique, and demonstrate applications to image relighting and appearance editing.


A Photometric Approach for Estimating Normals and Tangents

    author  = {Michael Holroyd and Jason Lawrence and Greg Humphreys and Todd Zickler},
    title   = {A Photometric Approach for Estimating Normals and Tangents},
    journal = {ACM Transactions on Graphics (Proceedings of SIGGRAPH Asia 2008)},
    year    = {2008},
    volume  = {27},
    number  = {5}


Each dataset includes an ascii *.header file with the following format:

light1_x light1_y light1_z
light2_x light2_y light2_z
light1512_x light1512_y light1512_z

The *.dat file is a binary file of (1512 x 1024 x 1024) 32-bit floating point numbers. This file stores the acquired monochromatic images in pixel order to make reading more efficient. In other words, the first values in the file are [pixel 0,0 with light1] [pixel 0,0 with light2] ..., and to recover a full image illuminated by light1 you would use every 1512th value.

  • Lightsource positions are not normalized
  • On 32-bit systems fseek() might fail for files this large.

We have also included our results from the paper for comparison in *.n and *.t files below. These are binary files with (3 x 1024 x 1024) 32-bit floating point numbers in each, ordered x1 y1 z1 x2 y2 z2 ...