三维建模中shape of silhouette 的简要理解

举例

一篇文章:shape silhouette fusion for image-based modeling

文章作者Peng Song et al.[2010]

文章基本思想

是由一些已标定图像得到其stereo和silhouette的信息(silhouette信息也是由stereo得到),然后融合两种有向点云 利用泊松表面重建算法(PSR)将有向点云转变成一个完整且精确地三角形网;模型(complete,accurate)
微软的高质量fvv的论文使用其中方法
[High-Quality Streamable Free-Viewpoint Video,2015]

主要用于产生silhouette的深度图方面:

  1. 产生visual hull 的八叉树
  2. Mesh 八叉树 (方法:Marching Cubes)
  3. Project the mesh into with Z-buffered rasterization.

Peng Song文中所述基本步骤:

  1. 计算一个visual hull

  2. 深度图估计 基于扩张的方法(expansion-based)返回一个3D点云(包含outliers以及冗余信息);剔除outlier,降低scale,估计深度图的表面法向量,生成一个有向点云(来自stereo)

  3. 利用这个点云(来自stereo),雕刻其visual hull的八叉树结构,得到另一个有向点云(来自silhouette);merge两种点云,利用泊松表面重建PSR算法将来自stereo和silhouette的有向点云转变成一个完整且精确的三角网;模型。

详细步骤:

Visual hull 及计算方法
计算一个3D边框(3D bounding box)

从一组silhouette和投影矩阵计算3D边框,可以考虑计算每个silhouette的2D边框,并后向投影得到。物体的边框可以由一个优化算法计算[Song, P. 2009](6个变量定义了一个bounding box,分别是x, y, z的最大;和最小;)

Visual hull八叉树的建立

开始于一个体素(voxel),即上一步中的3D边框。然后将voxel分为3类:

  1. 处于visual hull内;

  2. 在visual hull边界上;

  3. 在visual hull外部。

只有内部和边界的voxel才能细分,直到达到最大细分层数。

判断一个voxel类型的基本方法:

使用gift wrapping算法(Jarvis, R.A.1973)计算voxel的8个顶点的投影的凸壳(convex hull),一旦在每张silhouette图上的精确投影计算完成,然后通过确定voxel的投影与所有silhouette的相对位置来判断voxel的类型。(Since the projection of the voxel is a convex polygon, our approach evaluates the relative
position of the projection to the silhouette by a scan processor that tracks only the right and the left edges from the top to the bottom of the projection.)。

判断方法:

  1. 如果多边形内所有像素都在目标区域内部,则多边形在silhouette内部;

  2. 如果多边形内所有像素都在目标区域外部,则多边形在silhouette外部;

  3. 其他情况,多边形与silhouette相交。

于是提出了一个projection test算法判断:

其中,等;函数isosurface function表示3D点到visual hull表面的3D距离,关系:负→内,正→外。

该projection test算法利用voxel的8个顶点的isofunction的;来降低计算量:当8个顶点中的一部分在visual hull外部,则无必要将voxel投影到所有的silhouette image上去即已知其类型。

Visual hull mesh的提取

方法:Marching Cubes算法。

至此,生成的visual hull 将有两个作用:

  1. 从multi-view stereo生成深度图

  2. 通过PCST(stereo点云)雕刻该visual hull 八叉树生成PCSL(silhouette点云)

在微软文中所述到marching cubes一步之后,用显卡渲染直接得到深度。

接下来介绍Song的其余部分:

Shape信息(有向点云,来自stereo)
  1. 深度图估计(基于扩张方法)

首先将每张图片划分成许多小窗口,固定大小M*M

  1. 使用贪婪方法(greedy approach)计算窗中心像素的深度;
    如果发现一个深度;,其置信度高于一个门槛thres2,则将该深度;作为这个窗口的参考深度。

  2. 对一幅图的所有参考深度;使用median-rejection方法排除明显的outliers。
    由于选择的深度;都是置信度比较高的,因此很多窗口可能没有参考深度;,特别是一些没有或者很少纹理的表面。

  3. 对于无参考深度;的窗口,由其相邻3*3的窗口计算其参考深度。
    通常如果该窗口的相邻窗口数多于一个固定的数a(这里取得a=4),则用其相邻窗口的深度;计算其深度(中;)。该过程对所有的窗口迭代5次。

可以看到这一步之后点云明显稠密一些。

  1. 对扩展窗中的每个像素,从深度间隔(由参考深度定义)中以一个固定的长度d搜索其深度;(search the depth values for all the pixels in the window from a depth interval with fixed length d centered at the reference depth along the optical ray)

扩展窗大小M*M取决于输入图像序列的分辨率,thres2仅取决于纹理状况。D取决于重建物体和扩展窗的大小,通常在重建物体大小的1%到2%。

融合这些深度图,得到一个点云。对每个点云中的3D点,其置信度和视点方向均被存储。

具体算法过程如下:

点云的cleaning和downsampling

Cleaning过程:

  1. 合并重建目标的visual hull,作为一个约束,来剔除out of visual hull的3D点。

  2. 从估计的点云中建立一个表决树,选择一个门槛thres3去排除不相关点。

对每个voxel,计算该voxel中的individual correlation scores之和,与门槛分数比较。

下采样过程:

主要是在每个voxel中提取置信度最高的一个点,达到下采样的目的。

  1. 表面法向估计

利用主成分分析PCA

选择两个参数定义一个给定点的领域,一个固定的半径R和点数目N,使用一个KD-Tree 有效计算k紧邻问题。

确定表面法向:

通过该点的视点方向 和表面法向 的点积
进行选择:大于0,则表面法向的方向与相同;小于0 ,相反。

输出为一个有向点云:PCST。

使用PSR,问题:无纹理或者纹理很少的区域、非连接区域难以恢复。

Volumetric stereo and silhouette fusion

生成另一个visual hull上的有向点云,表示为PCSL。

方法:将visual hull 八叉树结构的voxel,根据其相对于PCST的点的相对位置分成三类:

Type 1:该voxel包含一个或者一些PCST中的3D点

Type 2:该voxel位于PCST中的3D点和该点的参考图的光心的连线上

Type 3:所有剩余的voxel。事实上,大部分都是纹理很少的区域或闭塞表面区域。如下图所示(figrue9. a)在这些剩余的voxel中,提取visual mesh的顶点和法向来重建PCSL(figrue9. b)。

计算方法如下图所示:

联合来自stereo和silhouette的形状信息(通过融合PCSL和PCST两种点云),用PSR方法转变成一个三角网;模型。

在PCSL计算好后,加到PCST上,生成一个更完整的点云,表示为PCSTSL。再用PSR算法,将有向PCSTSL转化为一个三角网;模型。如下图所示

[附]关于文中greedy approach:

输入:一个已标定图像序列和目标的visual hull

对每个image,选择其k个相邻视点使用鲁棒的窗口匹配关联

中的每个像素p,从该物体的visual hull计算一个深度间隔(depth interval),即visual hull内p的后向投影(back-projected)光线

重投影该深度间隔到已选择的相邻视点,计算一个m*m的窗口(中心为p)与不同图像上的窗口(中心为p的投影)标准互相关;NCC(normalized cross-correlation),

对于一个给定的深度间隔,其与在不同image上的投影相关,由极线约束(epipolar constraint),这样不同视点的所有相关曲线都可以关联到一个单独的坐标系统中。

一旦相关曲线被计算出来,则最优深度从中选择:在k个紧邻视点中,对于至少两个视点,其NCC;高于一些门槛。

注意:对中的每个像素p,最优候选深度从最大化NCC;的深度;中选择。若未发现有效深度,则无最优候选深度(none)。

分享
匿名评论