3D imaging technique
Photometric stereo is a technique in computer vision for estimating the surface normals of objects by observing that object under different lighting conditions (photometry). It is based on the fact that the amount of light reflected by a surface is dependent on the orientation of the surface in relation to the light source and the observer. By measuring the amount of light reflected into a camera, the space of possible surface orientations is limited. Given enough light sources from different angles, the surface orientation may be constrained to a single orientation or even overconstrained.
The technique was originally introduced by Woodham in 1980. The special case where the data is a single image is known as shape from shading, and was analyzed by B. K. P. Horn in 1989. Photometric stereo has since been generalized to many other situations, including extended light sources and non-Lambertian surface finishes. Current research aims to make the method work in the presence of projected shadows, highlights, and non-uniform lighting.
Photometric stereo is widely used in various fields, ranging from archaeology to quality control. It is now integrated into widely used open-source software, such as Meshroom.
Basic Method.
Under Woodham's original assumptions — Lambertian reflectance, known point-like distant light sources, and uniform albedo — the problem can be solved by inverting the linear equation formula_1, where formula_2 is a (known) vector of formula_3 observed intensities, formula_4 is the (unknown) surface normal, and formula_5 is a (known) formula_6 matrix of normalized light directions.
This model can easily be extended to surfaces with non-uniform albedo, while keeping the problem linear. Taking an albedo reflectivity of formula_7, the formula for the reflected light intensity becomes:
formula_8
If formula_5 is square (there are exactly 3 lights) and non-singular, it can be inverted, giving:
formula_10
Since the normal vector is known to have length 1, formula_7 must be the length of the vector formula_12, and formula_4 is the normalised direction of that vector.
If formula_5 is not square (there are more than 3 lights), a generalisation of the inverse can be obtained using the Moore–Penrose pseudoinverse, by simply multiplying both sides with formula_15 giving:
formula_16
formula_17
After which the normal vector and albedo can be solved as described above.
Non-Lambertian surfaces.
The classical photometric stereo problem concerns itself only with Lambertian surfaces, with perfectly diffuse reflection. This is unrealistic for many types of materials, especially metals, glass and smooth plastics, and will lead to aberrations in the resulting normal vectors.
Many methods have been developed to lift this assumption. In this section, a few of these are listed.
Specular reflections.
Historically, in computer graphics, the commonly used model to render surfaces started with Lambertian surfaces and progressed first to include simple specular reflections. Computer vision followed a similar course with photometric stereo. Specular reflections were among the first deviations from the Lambertian model. These are a few adaptations that have been developed.
General BRDFs and beyond.
According to the Bidirectional reflectance distribution function (BRDF) model, a surface may distribute the amount of light it receives in any outward direction. This is the most general known model for opaque surfaces. Some techniques have been developed to model (almost) general BRDFs. In practice, all of these require many light sources to obtain reliable data. These are methods in which surfaces with general BRDFs can be measured.
Some progress has been made towards modelling an even more general surfaces, such as Spatially Varying Bidirectional Distribution Functions (SVBRDF), Bidirectional surface scattering reflectance distribution functions (BSSRDF), and accounting for interreflections. However, such methods are still fairly restrictive in photometric stereo. Better results have been achieved with structured light.
References.
 ;templatestyles src="Reflist/styles.css" / ;