点击上方“3D视觉工坊”,选择“星标”git
干货第一时间送达github

这种逼真的效果,一个很重要的缘由是获取到了人脸表面的法向量。在文章中我还提到,当须要在不一样的视角下重建反射场时,是“经过表面的漫反射份量”来完成的,但这是如何作到的呢?算法

这就引入了咱们今天想要讲的主题:光度立体法微信
1、光度立体法原理
光度立体法,即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的论文有三个假设:人工智能
首先,他假设相机的投影是正交投影。这样图像上的点的坐标能够直接反映三维物体的表面坐标。spa
若是用 z = f(x, y)表示三维物体的表面坐标关系(世界坐标系原点位于物体与光心连线上),那么表面法向量应该是:视频
由于三维物体表面的(x, y)点在这种假设下直接对应着图像上的(x, y)点。那么就能够经过图像上的(x, y)点的相关特性求取到物体表面上对应点的法向量了。blog

比较好的知足这个假设的相机是远心相机,我在文章32. 镜头、曝光,以及对焦(下)中对这种相机由详细介绍,你能够回顾下。
2. Woodham还假设入射光由远处的单一点光源发出,这样照射到物体表面每一点的光的方向一致,强度一致。
3. 同时,Woodham假设物体表面具备lambertian反射特性,即它对入射光产生漫反射,在每一个方向上反射的光强都是一致的。
这种状况下,能够把像素值与光源以及物体表面法向量用下图的公式联系到一块儿。

这里面, 和N表明了物体表面的特性,而L和l则表明了光源的方向和强度,因而能够分别合并表示以下。N和L都是三维空间中的3x1的单位向量,光源的强度能够用常量1表示。像素值t能够直接经过图像得到,右边的光源方向能够提早标定求得。那么,就能够在物体和相机都不动的状况下,用至少三个不共面的光线照射物体表面第i点,从而将N和
求解出来:
设三个光源方向向量构成矩阵 ,对应的三个像素值构成向量
,那么有
(假设
存在)
因为光源照射物体表面时,有可能会产生阴影,这样三个光源没法同时照亮的区域就会没法求解出结果。因此一般能够采用更多的光源从不一样方向分别照亮物体并成像来解决这个问题。假设有n>=3个光源,那么则有:
那么
二. 使用光度立体法的基本过程
理解了光度立体法的原理后,咱们来看看实际操做的过程。威斯康星-麦迪逊大学的课程CS766_09对此有简明扼要的解释(原连接见pages.cs.wisc.edu/~csve),我这里借用相关材料介绍一下。
2.1 光源方向的标定
首先第一步,是进行光源方向的标定,一种可行的方法是在场景中放入一个光滑的球并在不一样光源下成像,这样球的表面高亮处就会反映光源的方向
这里光源方向L,球表面法向量N,以及反射方向R之间的关系以下
有L = 2(NR)N-R
其中R是反射向量取为[0, 0, 1],是观察者到物体的向量, 是高亮点的坐标,
是图像上球心的坐标。那么就有N的表达式:
利用N和R,就能够求得光源方向L。
2.2 计算法向量图和深度图
利用第一节的原理和公式,能够很容易求得物体表面上每个被足够多的光源照亮的点的法向量。接下来的关键则是利用法向量图,获取深度图。
设投影关系以下图所示:
物体表面法向量N与物体表面上的向量V1及V2垂直,那么有:
以及

仔细观察上面两个式子,会构成一个线性表达式:
Mz = v
其中v由各个像素点的法向量技术而得,M则是一个尺寸为(2*m, m)的稀疏矩阵,其中m为像素个数,z则是各个像素点的深度坐标构成。这个式子能够线性二乘法求解,这样就求得了深度图。
这里有一些示例图,说明了整个流程。
这个数据集是同一佛像由12个不一样方向光源分别照射成像的结果。
利用光度立体法,能够计算获得反照率图以下,注意这里咱们对图像的每一个颜色通道都作了独立运算,而不是把图像转换为灰度图计算。

利用前面介绍的原理,能够获取到表面法向量,进一步获取到相对深度图,甚至还能够作三维渲染,以下图所示:


下面是另一个示例图集
重建结果:


三. 光度立体法和传统几何重建方法的对比
正如Woodham的论文中所说,光度立体法并非用于取代传统几何重建方法的,而是和几何重建方法构成了互补关系。下面我列出了这两类方法的对比:

四. 光度立体法在机器视觉中的应用
光度立体法不只仅在Light Stage这样的系统中使用,在机器视觉、工业生产领域它的应用也很是普遍,我来给你看一些实际应用。若是你具备机器视觉的背景,那么大家必定知道一款很是很是流行的软件系统 Halcon。
HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用普遍的机器视觉集成开发环境。它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已是公认具备最佳效能的Machine Vision软件。
---- 引自百度百科
Halcon内置了大量机器视觉的教学案例,有好几个例子都跟光度立体法相关,咱们看看几个实例:
示例1:检测平坦平面上的缺陷块
这个例子展现了用光度立体法获取平坦平面的反照率,以及法向量图(即梯度图),并由此计算表面高斯曲率图,在这个图上一般比较容易检测出异常块(但在反照率图,以及原图上很难检测出来)
示例2:检测洗发水瓶上的缺陷
这个例子展现了用光度立体法获取洗发水瓶上的缺陷。也是同样的,用不一样方向的光照射瓶子,而后利用光度立体法获取表面反照率图,以及法向量(从而得到曲率图)。在反照率图上很难看出的缺陷,在后者却能够轻松检测出来。
示例3:读取盲文
读取药包装上的盲文,也能够由光度立体法来办到,仍是同样,盲文这样的表面凸起,比较容易在曲率图或法向量图上检测出来:
Halcon里面关于光度立体法的算子是photometric_stereo,其帮助文档写的很清晰,有一些信息能够补充咱们对这个技术的理解。
要点1:光源的方向和数量

Halcon建议将远心相机正对着目标物表面,光源相对相机光心与目标的连线倾角呈Slant度,通常是30到60度。在改变光源方向时,倾角不变,将光源绕物体的中轴线旋转Tilt度便可。如上图所示。一般来讲须要4~6个不一样的光源方向,所以能够认为Tilt大概是60度~90度之间,保证各个光源方向均匀覆盖物体表面一周。
要点2:相机成像的线性性
我在文章2. 从入射光到JPEG相片-数码相机内部的秘密和27. HDR - 高动态范围成像中都讲过,相机内部成像时有从线性的响应转换为非线性的最终图像的过程

而光度立体法的隐含假设则是图像像素的值是线性反应了光源和反射的强度,所以有必要采用RAW格式图像来得到准确的结果。Halcon还专门提供了算子radiometric_self_calibration用于获取相机的特性,以及算子lut_trans来将非线性的像素值转换为线性的,这里就不展开讲解了。
五. 总结
今天我详细介绍了光度立体法这种独特的获取物体表面法向量的反照率的方法,它和利用几何信息重建三维表面的视觉方法(例如立体匹配)造成了互补关系。这个方法从提出到如今已通过去了40年左右了,但如今还在工业界普遍应用,好比咱们上一课介绍的Light Stage系统就采用了光度立体法来获取人脸表面的法向量,而工业视觉软件Halcon则展现了用此方法来进行缺陷检测。Woodham教授功不可没!
但愿这篇文章开阔了你的眼界,带给你新的启发,别忘了点赞哦????
六. 参考资料
CMU 2017 Fall Computational Photography Course 15-463, Lecture 22
44. Light Stage: 无限真实的人脸三维扫描——忘记幼稚的AI换脸吧
Woodham et al., “Photometric stereo: A reflectance map technique for determining surface orientation from image intensity,” IUSIA 1979.
32. 镜头、曝光,以及对焦(下)
威斯康星-麦迪逊大学的课程CS766_09项目
Sticky在问题"光度立体三维重建,根据光照模型算出物体表面法线后如何计算出深度?"下的回答
Halcon HDevelop 19.11 Progress的示例和帮助文档
本文仅作学术分享,若有侵权,请联系删文。
下载1
在「3D视觉工坊」公众号后台回复:3D视觉,便可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
下载2
在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总,便可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。
下载3
在「3D视觉工坊」公众号后台回复:相机标定,便可下载独家相机标定学习课件与视频网址;后台回复:立体匹配,便可下载独家立体匹配学习课件与视频网址。
重磅!3DCVer-学术论文写做投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写做与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写做与投稿事宜。
同时也可申请加入咱们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。
必定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被经过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号


3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各种大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打形成集技术与就业为一体的铁杆粉丝汇集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题
以为有用,麻烦给个赞和在看~ 

