论文名字太长,标题写不全,有点尴尬。这篇论文是百度的杨瑞刚老师之前在ICCV’ 17上的工作。
论文中使用二代kinect,把相机固定在一个位置上,然后物体在自然环境照明下在画面内运动,最后拍摄物体运动的RGB-D图像序列。通过RGB-D图像序列来恢复精细的物体三维形状。整个方法对于物体的运动以及照明情况没有什么先验的要求,但是它要求物体是漫反射的。
论文中的做法其实很好理解。为了初始数据更加稳定,去除一些噪声,首先对于拍下的视频序列,将每20帧RGB-D图像融合成一个更加精细的深度图和与这个深度图相对应的RGB图像,就相当于关键帧。知道了每个视角下的深度图,就能融合成一个完整的三维模型,并且标定出相机的位姿。
在论文里需要对像素点进行追踪,记录不同RGB图像中同一像素在不同的位置和方向下的RGB变化,这就需要对不同图像中的像素找它们的对应关系。之前已经计算出了每个视图下的相机位姿并且有物体的三维形状,最简单的就是将二维点恢复到三维表面上,再投影到另一幅图像上。
从而找到参考图像
中的像素
在其他图像
中的对应像素
,其中
和
是第k幅图像的相机参数,
是整个序列中的RGB相机的内参矩阵,
是参考图像中像素点
的深度值。
然而这里相机的位姿以及物体表面都是有误差的,最后产生的对齐是有很大偏移的,但是算法的要求是找到像素之间的对应关系,因此就要求起码像素精度的匹配,这显然是不行的,起码不能直接这样用。之后他们也试过光流的方法进行匹配,但是因为物体是运动的,表面的明暗在不同图像中是不一样的,因此效果也不好,最后他们自己设计了一套对光照稳健的鲁棒匹配方法。
在SfSNet那篇中简单介绍了一下二阶球谐光照模型。光照可以用3*3的矩阵来表示,一般方法中把光照对特定方向 的平面的影响,即shading function表示成 。但是在本论文中,作者将shading function表示成 。其实大同小异。最后图像中p点的像素值就是shading function与表面点的原始反照率作用的结果,即 。
shading function的值作者当作常数处理,即隐含着一个先验,就是光照对RGB三个通道作用是一样的,即隐性的假设了光是白色的光。在这种假设下,不管物体如何运动,表面法向如何改变,只改变s这个系数,而RGB三个分量的比率,即色调都是不变的,因此论文中将每个颜色通道都除以三个通道亮度值的和,最后得到一个光度归一化后的图像,来抵抗变化光照带来的影响。
之前通过三维信息进行的匹配虽然粗糙不满足要求,但是大体还是正确的,因此作者就用第一帧,记作参考帧上的点与其他帧上对应点的小范围邻域内进行归一化互相关计算(NCC),找和参考帧上的点相关系数最大点。要求互相关系数要大于0.75,并且最高分要比次高分高至少0.05,这类似于SIFT特征点的匹配策略。因此不是所有点都能找到它的对应点。那些找到了对应的点称为控制点,直接计算他们在图像上的坐标位移,非控制点就通过最近邻的控制点的位移进行插值。最终的匹配对齐效果如下:
这里其实我觉得有点问题,在整个乌龟表面的色调都是灰色的,虽然进行光度归一化后消除了高光阴影等因素的影响,但是也可能使得一些纹理细节更难以分辨。可以看到实验中在乌龟上贴了一些贴纸,除了测试算法对于反照率突变的稳定性,我觉得可能更是为了在表面添加标记点从而使得像素匹配更鲁棒。
在有不同图像间像素匹配关系的前提下。在不同图像中,将对应像素点p和q的像素值的生成公式相除,因为它们是同一个三维点,因此反照率可以约去。
法向量n和相机的旋转矩阵R之前已经计算出了。最终等式中的未知数只有光照。每一个像素对应关系都能列3个等式,总共就只有11个未知数。计算光照可以使用全部参考图像中的像素点与图像序列中的直接使用最小二乘法就能算出来。论文中的做法是将光照估计使用下列的函数进行优化
前面的这个系数
是为了抵抗噪声和阴影的。
之后就是恢复每个像素的反照率和更精细的法向,这里作者利用了EM算法来进行计算,将它变成一个优化过程。优化的目标函数是,
其意义就是使得估计的反照率和法向生成的效果需要和拍摄的图像上的像素值尽可能一样。但是这里存在隐变量的干扰,即物体在图像中是否符合朗伯照明假设。如果在阴影中或者高光以及镜面反射这些情况,就不是朗伯照明。
因此作者设置了一个隐函数,即每个像素都有一个概率表示它是否符合朗伯照明假设。
在E步骤通过目前的反照率和法向推断符合朗伯照明假设的概率。
在M步骤中再通过E步中计算的朗伯照明假设的概率,最大化反照率和法向的极大似然。
最后,使用已有的方法,将法线与KinectFusion生成的三维模型进行融合,获得具有增强结构细节的表面几何结构。
在实验中,使用Stanford Bunny作为合成模型,并在论文方法和shading refinement方法之间进行定量比较。 对于给出的3D模型,在自然照明下渲染20张RGB图像和深度图。 渲染的GT深度图被过度平滑以消除掉表面的细节。 这些平滑的深度图和渲染的彩色图像被作为输入:
可以看到论文中的方法在合成数据上能够良好的恢复之前被平滑的细节,尤其由于之前EM算法的应用,在图像上50%的像素都被椒盐噪声影响的情况下,也产生了良好的鲁棒性。
在真实数据上,使用Kinect V2的深度传感器和分辨率为1920×1080的彩色摄像机捕获了真实的数据进行实验,尤其可以注意到的是由于对单个像素进行处理,对于反照率能够产生良好的分解,在乌龟表面,其他方法将贴纸产生的颜色差异归因于表面的凹凸,而论文的方法很好的恢复了贴纸平面的效果: