uncalibrated_photometric_stereo — Reconstruct a surface from several, differently illuminated images.
uncalibrated_photometric_stereo can be used to extract high-frequency
surface details from a given object with no prior knowledge about the
illumination, geometry and reflectance of the object. This operator is related
photometric_stereo but doesn't depend on a calibrated setup.
However, for sensible results an orthographic projection is assumed.
Under this constraint, the surface normals and light directions can be obtained up to a Generalized Bas-Relief (GBR) ambiguity by computing a singular value decomposition (SVD) of the image data matrix, imposing that its rank is 3.
The operator requires at least three images of the same object, taken with a static, non-moving camera and different lighting directions for each image. For best results, the object should exhibit Lambertian reflection properties, no inter-reflection or shadow castings.
→object (byte / uint2)
The Result type.
Default value: 'all'
List of values: , 'albedo', 'all', 'gradient', 'normal_field', 'normalized_gradient'
* read severally illuminated images FName := 'photometric_stereo/pharma_braille_0' + [1:4] + '.png' read_image(Images, FName) * extract surface normals, gradients and albedo from images uncalibrated_photometric_stereo(Images, NormalField, Gradient, Albedo, 'all') derivate_vector_field (Gradient, Result, 0.1, 'mean_curvature') reconstruct_height_field_from_gradient (Gradient, HeightField, 'poisson', , )
uncalibrated_photometric_stereo returns the
NormalField for the given images as well as the appropriate
gradients for each pixel and the
Albedo of the object.