光度立体法,即Photometric Stereo, 最早是由当时在MIT的人工智能实验室的Robert J. Woodham教授在1978年左右提出。他在1979年的论文《Photometric stereo: A reflectance map technique for determining surface orientation from image intensity》,以及1980年的论文《Photometric Method for Determining Surface Orientation from Multiple Images》中比较系统的阐述了整套理论框架。
Woodham在论文中提出三个基本假设。在着三个基本假设下完成整套理论框架的推演。这三个基本假设分别是:
假设相机的投影是正交投影
入射光由远处的单一点光源发出,这样照射到物体表面每一点的光的方向一致,强度一致
物体表面具有朗伯(lambertian)反射特性
方法的大致思路就是:
当相机和目标物体相对位置固定不变时,使用不同方向的光源照射同一目标物体,相机可以拍摄到目标物体带有不同明暗分布的图像,再通过求解基于朗伯反射原理的反射方程组,求解目标表面的法向分布或者深度地图
具体我们通过一些基础知识,慢慢串联到最终的解法上。
通过小孔成像的原理我们可以知道,照片上的像素值其实就是所有射到该点位置的光线的radiance的度量。那到达该点的光线是怎么来的?如果该点位置正好在某个物体(默认不发光的)上,那么该条光线应该是从光源出发打到物体上的对应点,并反射到空间中经过成像小孔达到成像屏上,也就是最后照片上的像素值。对于反射而言,我们有物体表面的法向量,有入射光的radiance和入射角θi。那么反射角θr以及出射光的radiance之间是什么关系呢?基于朗伯反射假设,它们满足以下关系:
其中ρ是一个无关入射角和出射角的常量,是物体该点的特性。这边称为albedo。
因此对于一张照片而言,照片上的每一点都可以列出下列的式子:
上边公式中的Li代表光源的强度,粗体字母表示方向向量(单位向量,指标是方向模长为1)
因为ρ是个常数,我们可以将其和N合并成G来表示。则对于一张图片而言,在假设光源强度为1的情况下我们可以写成:
因为每个位置对应的G是个三维向量(方向为normal,模长为albedo),因此单个光源无法求解该方程。至少需要三个不同位置的光源,得到三张同一个物体不同的照片才可以求解(这边相机和物体的相对位置不变)
假设有k个不同光源,则可以列出下列方程:
合并成矩阵表示:
因此,通过最小二乘:
我们可以求得:
至此,我们求得G的模长就是albedo,而归一化后的单位向量矩阵就是normal