前文介绍了结构光三维重建系统,顺序投影技术(结构光三维表面成像:一个教程1)
本文将介绍第三节全框架空间变化颜色图案。
3.全框架空间变化颜色图案(Full-Frame Spatially Varying Color Pattern)
顺序投影技术的主要缺点包括:无法获取动态运动中的3D对象或诸如人体部位等实时对象。我们现在介绍一些单次拍摄3D表面成像技术,这些技术利用颜色信息或独特编码方案,并且在颜色图案照明下仅需要一个获取的对象图像来导出具有场景中每个可见点的(x,y,z)坐标。
3.1 彩虹3D相机(Rainbow 3D Camera)
图11展示了Rainbow 3D相机的基本概念[17-25]。 与必须从一对图像中提取相应特征以计算深度值的传统立体视觉不同,Rainbow 3D相机将空间变化的波长照明投影到物体表面。 彩虹光投影仪的固定几何形状确定光平面的投影角θ与特定光谱波长λ之间的一一对应关系,从而在每个表面点上提供易于识别的标志。 已知基线B和已知视角α的情况下,可以通过使用直接三角测量原理来计算与每个单独像素对应的3D范围值,并且可以在相机的帧速率的单个快照中获得3D范围图像的全帧 (30帧/秒或更快)。(full frame 不知道如何翻译)3.2 连续变化颜色编码(Continuously Varying Color Coding)
够构成不同的连续变化的彩色图案来编码空间位置信息[24]是有可能的。 例如,我们可以为投影机的每个颜色通道构建一个强度变化图案,这样当将它们加在一起时,这些图案在各个颜色通道中形成连续变化的颜色图案。 图12显示了三个加性原色通道的强度变化图案的例子。 当它们加在一起时,形成彩虹状的彩色投影图案。 请注意,这种类型的颜色图案不一定遵循色谱(波长)中的线性变化关系。 然而,由于每个颜色通道的贡献之间的比率是已知的,所以解码方案易于推导和实施。
4 条纹索引(Stripe Indexing Single Shot)
条纹索引对于实现鲁棒(robust)的3D表面重构是必要的,因为所观察到的条纹的顺序并不一定与条纹的排列顺序相同。这是由于三维表面成像系统中固有的视差,由于物体三维表面特征的遮挡,使得所获得的图像中缺少条纹。我们现在提供一些代表性的条纹索引技术。
4.1 彩色条纹索引(Stripe Indexing Using Colors)
彩色图像传感器通常有三个独立的采集通道,每个通道对应一个频谱带。这些颜色值的线性组合可以产生无限数量的颜色。三个8位通道可以表示224种不同的颜色。这种丰富的色彩信息可用于增强3D成像精度,减少采集时间。例如,在投影图案中使用颜色来表示条纹索引(图13)可以帮助缓解使用单色模式[26,27]的相移或多条带技术所面临的歧义问题。这种颜色编码系统可以实现实时三维表面成像。也可以将多个图案编码成一个单一的颜色投影图像,每个模式在颜色空间中都具有唯一的颜色值。
4.2 分段图案条纹索引(Stripe Indexing Using Segment Pattern)
为了区分一根条纹和其他条纹,你可以为每条条纹添加一些独特的片段图案(图14),这样,当执行3D重建时,算法可以使用每条条纹的独特的片段图案来区分它们。该方法在[28],是一种有趣而又聪明的方法,但它只适用于具有光滑连续表面的三维物体(因为表面形状造成的图案失真并不严重)否则,由于模式的变形或物体表面的不连续,可能很难恢复独特的片段图案。
4.3 使用重复灰度图案的条纹索引(Stripe Indexing Using Repeated Gray-Scale Pattern)
如果使用两个以上的强度等级,则可以通过排列条纹的强度等级,使得任何一组条纹(N个条纹的滑动窗口)在一段长度内具有独特的强度图案[29]。 例如,如果使用三个灰度级(黑色,灰色和白色),则可以将图案设计为(图15)。
BWGWBGWGBGWBGBWBGW
图案匹配过程开始于与投影强度图案获取的图像强度的相关性。 一旦找到匹配,就会对子灰度级序列匹配执行进一步的搜索,例如WGB,GWB等三个字母的序列。
4.4 基于De Bruijn序列的条纹索引(Stripe Indexing Based on De Bruijn Sequence)
在大小为k的字母表上,秩为n的De Bruijn序列[30]是一个循环词,其中长度为n的每个k ^ n^词在我们循环行进时恰好出现一次。 一个简单的n = 3和k = 2(字母表为{0,1})的De Bruijn循环的例子如图16所示。当我们在周期中(顺时针或逆时针)行进时,我们将会遇到23=8个三位数的图案,000,001,010,011,100,101,110,111恰好一次。 序列中没有重复的三位数字图案。 换句话说,De Bruijn序列中没有任何子序列与任何其他子序列相关。 De Bruijn序列的这一独特特征可用于构建具有独特局部变异模式的条纹图案序列,这些图案序列不会重复出现[31-33]。(这一段没看懂)这种独特性使图案解码变得更容易。 与De Bruijn序列相关的图形称为De Bruijn图形[34]。
现在我们展示一个使用(R,G,B)颜色的二进制组合来生成基于De Bruijn序列的颜色索引条带的示例。 三种颜色的组合的最大数目是8(= 23)。由于我们不打算使用(0,0,0),因此我们只有七种可能的颜色。这个问题可以通过构造一个k = 7,n = 3的De Bruijn序列来解决。这导致了一个带有343个条纹的序列。如果条纹数量太多,可以通过设置k = 5,n = 3来使用De Bruijn序列的缩减集合[35]。在这种情况下条纹的数量减少到125.使用De Bruijn技术构建颜色索引的条纹序列有一个重要限制:所有相邻的条纹必须具有不同的颜色。否则,会出现一些双倍或三倍宽度的条纹,这会混淆3D重建算法。通过使用XOR操作可以轻松应用此约束。图17显示了一组具有实际颜色索引条纹图案的结果。在这个条纹序列中,所有相邻的条纹都有不同的颜色。可以使用De Bruijn技术的各种变化来生成用于3D表面成像应用的独特的颜色索引,灰度索引或其他类型的投影图案。
5 网格索引:2D空间网格图案(Grid Indexing: 2D Spatial Grid Patterns)
二维网格图案技术的基本概念是在投影的二维图案中唯一标记每个子窗口,使得任何子窗口中的图案相对于其在图案中的二维位置是唯一的且完全可识别的。
5.1 伪随机二进制阵列(Pseudo-random Binary Array, PRBA)
一个网格索引策略是使用伪随机二进制阵列(PRBA),以产生可以由点或其他图案标记网格位置,使得任何子窗口的编码图案是唯一的。 PRBA由一个使用伪随机序列编码的n1×n2数组定义,使得在整个阵列上滑动的任何k1×k2子窗口都是唯一的,并且完全定义数组列内的子窗口的绝对坐标(i,j)。
二进制数组的编码图案是基于一个伪随机二进制序列,使用原始多项式模块2n方法[36-40],其中2n -1 = 2k1k2-1, n1 = 2k1 -1, n2 = 2n-1/n1。图18显示了生成的PRBA的一个例子,其中k1=5,k2=2,n1=31,n2=33。
5.2 作为码字的迷你图案(Mini-patterns Used as Code Words)
不使用伪随机二进制数组,可以使用多值伪随机数组。 人们可以用迷你图案将每个值表示为特殊的代码字,从而形成网格索引投影图案[41]。 图19显示了一个三值伪随机数组和一组迷你图案码字的示例(图中右下方显示)。 使用专门定义的码字,可以将多值伪随机数组转换为具有唯一子窗口的投影图案。5.3 彩色网格(Color-Coded Grids)
另一种网格索引策略是对垂直和水平条纹进行颜色编码,以便实现二维网格索引[42-44]。 垂直和水平条纹编码方案可以相同或完全不同,具体取决于应用(图20)。 不能保证子窗口的唯一性,但是在建立对应关系时,在大多数情况下双向彩色条纹可以帮助解码。 细网格线可能不如其他图案(点,正方形等)可靠。
5.4 2D数组的彩色编码点(2D Array of Color-Coded Dots)
有一些生成伪随机数组的替代方法。在[45,46]中提出了一种强制算法来生成一个保存子窗口唯一性的数组,但它可能不会耗尽所有可能的子窗口图案。该方法在计算机算法中相对直观。例如,图21(左)使用三个码字(R,G,B)示出子窗口大小为3×3的6×6阵列。计算过程如下:首先用随机选择的图案填充6×6阵列的左上角。然后,用随机码字在右侧添加一个三元素列。子窗口的唯一性在添加这样的列之前被验证。继续添加列,直到所有列都填充了随机代码字,并验证子窗口唯一性。同样,从初始子窗口位置向下添加随机行。之后,沿对角线方向添加新的随机码字。重复这些步骤,直到所有的点都被填充颜色。同样,这个计算过程可能不能保证为所有阵列大小和代码字生成一个伪随机阵列,但在许多情况下已经取得了很好的结果。图21(右)展示了一个具有20×18维的伪随机数组的示例。5.5 混合方法(Hybrid Methods)
通过结合上面讨论的多种编码方案,有许多机会来改进3D表面成像系统性能的特定方面。 图22显示了一个例子。关于投影图案的设计暂时结束了,在接下来的教程里(第六节),我们将讨论一下衡量算法的方法。
下一期:结构光三维表面成像:一个教程3