Structured-light 3D surface imaging: a tutorial
Structured-light 3D surface imaging: a tutorial
综述了3D表面成像技术,尤其是基于结构光的非接触式3D表面测量技术。
讨论了3D成像系统的性能指标,对各种成像方案进行了分类、说明和比较。
1. 基本原理
结构光技术是基于三角测量的三维重建算法之一,典型的结构光系统由投影仪、相机和计算单元构成。为建立投影仪坐标和相机坐标间的对应性,投影仪首先投射具有特定编码信息的图案到目标场景表面,通过对获取的目标场景图像信息的解码建立对应性,最后基于三角测量方法计算深度。
相机在结构光照明下获取场景的 2D 图像。如果场景是没有任何 3D 表面变化的平面,则采集的图像与投影的结构光图案类似。当场景中的表面为非平面时,相机获取的图像投影结构光图案将被扭曲。结构光3D表面成像技术的原理是根据投影结构光图案的畸变信息提取3D表面形状。可以使用各种结构光原理和算法计算场景中物体的准确 3D 表面轮廓。
相机、投影仪和物体表面点之间的几何关系可以用三角测量原理表示为
从更一般的意义上来说,主动照明的结构光图案可以包括所有(x、y、z)方向上的空间变化,从而成为真正的3D结构光投影系统。例如,由于相干光学干涉,投射光的强度可以沿着投射光的光路变化。然而,大多数结构光 3D 表面成像系统都使用 2D 投影图案。
在这篇综述中,将所有结构光技术分为顺序(多样本)或单样本类别,如下图 所示,这可以被视为该技术的路线图。
- 如果目标 3D 对象是静态的并且应用程序不对采集时间施加严格的限制,则可以使用多次拍摄技术,并且通常可以产生更可靠和准确的结果。
- 如果目标正在移动,则必须使用单次拍摄技术来获取 3D 对象在特定时间实例的快照 3D 表面图像。
进一步可将单次技术分为三大类:使用连续变化的结构光图案的技术、使用一维编码方案(线结构光)的技术和使用二维编码方案(面结构光)的技术。
2. 序列投影技术
2.1.二进制图案
二进制编码使用黑白条纹形成一系列投影图案,使得物体表面的每个点都拥有唯一的二进制代码。通常,N个图案可以编码
2
N
2^N
2N个条纹。下图显示了简化的 5 bit 投影图案。该图案序列被投影到静态场景上,会有
32
(
=
2
5
)
32 (=2^5)
32(=25) 个用独特条纹编码的独特区域。可以基于三角测量原理计算沿每条水平线的所有 32 个点的 3D 坐标
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),从而形成全帧的3D图像。
二进制编码技术非常可靠,并且对表面特征不太敏感,因为所有像素中仅存在二进制值。然而,为了实现高空间分辨率,需要投影大量的连续图案。场景中的所有物体都必须保持静态。 3D 图像采集的整个持续时间可能比实际 3D 应用程序允许的时间更长。
2.2 灰度级图案(格雷图案)
为了有效减少获得高分辨率 3D 图像所需的图案数量,开发了格雷图案(gray-level patterns)。例如,可以使用M个不同的强度级别(而不是二进制代码中的仅两个)来产生投影图案的唯一编码。在这种情况下,N 个图案可以编码
M
N
M^N
MN 个条纹。每个条纹在N-based空间中可视化为一个点,每个维度有 M 个不同的值。
例如,如果N=3,并且M为4,则唯一代码条的总数为
64
(
=
4
3
)
64(=4^3)
64(=43)。相比之下,对于具有二进制代码的 64 个条带,需要 6 个图案。在设计二进制和格雷编码图案时有一个优化。这样优化的主要目的是最大化不同编码的测量距离(可分辨距离或最小颜色变化间隔,如二进制编码,中间间隔一个像素)。在实际的3D成像应用中,相邻条纹的分辨是非常重要的。下图(底部)显示了在希尔伯特空间中优化的灰度编码图案的示例。
2.3.相位偏移
一组正弦曲线图案被投影到物体表面)。三个投影条纹图案的每个像素 (x, y) 的强度描述为
其中
I
1
(
x
,
y
)
,
I
2
(
x
,
y
)
,
I
3
(
x
,
y
)
I_1(x, y), I_2(x, y), I_3(x, y)
I1(x,y),I2(x,y),I3(x,y)表示投影图案的光强,
I
0
(
x
,
y
)
I_0(x, y)
I0(x,y)为直流分量(背景强度),
I
m
o
d
(
x
,
y
)
I_{mod}(x, y)
Imod(x,y)为调制信号振幅,
ϕ
(
x
,
y
)
\phi(x, y)
ϕ(x,y)为相位,
θ
\theta
θ为常量的相位偏移角。
相位展开(相位解缠)是将包裹相位转换为绝对相位的过程。相位信息 ϕ ( x , y ) \phi(x, y) ϕ(x,y)可以从三个条纹图案的强度中检索(即展开):
反正切函数在 2π 处的不连续性可以通过在
ϕ
′
(
x
,
y
)
\phi'(x, y)
ϕ′(x,y) 值上加上或减去 2π 的倍数来消除
其中 k 是表示投影周期的整数。注意,此过程仅实现相对相位展开,无法求解绝对相位。
3D
(
x
,
y
,
z
)
(x, y, z)
(x,y,z) 坐标可以根据测量的相位
ϕ
(
x
,
y
)
\phi(x, y)
ϕ(x,y) 与参考平面的相位值之间的差来计算。
如上图所示的简单的情况,其中
进一步简化可得
2.4.混合方法:相位偏移+格雷编码
针对相位偏移存在的两个主要问题:1. 仅提供相位的相对展开,而不能求解绝对相位。2. 如果两个表面的不连续性超过 2π ,则任何基于展开的方法都无法正确地相对于彼此展开这两个表面。可以通过结合格雷码来解决。
上图展示了在 32 条编码序列中将格雷码投影与相位偏移相结合的示例。格雷码可以明确相位的绝对范围,而相位偏移的亚像素分辨率超出了格雷码提供的条纹数。混合方法需要更多的投影数,因此在对动态目标3D成像时不适用。
2.5.光度学
光度测量立体法(photometric stereo),是从变化的阴影中获取形状的方法。如下图所示,通过从同一视角但从不同方向的光照下拍摄的相同表面的图像来估计局部表面方向,基于多张图像解决了从阴影中求解形状的病态(ill-posed)问题。光度测量立体法需要所有的光源都为点光源并且只估计局部表面方向(梯度 p , q p,q p,q)。它假定3D表面是连续的,并且需要一个“起始点”(坐标 ( x , y , z ) (x,y,z) (x,y,z)已知)用于3D重建算法。
3. 全帧空间变化颜色图案
顺序投影技术的主要缺点包括无法获取动态运动中或活体主体(例如人体部位)中的 3D 对象。单视图 3D 表面成像技术利用投影图案中的颜色信息或独特的编码方案,并且仅需要在颜色图案照明下获取物体的一张图像即可获得 3D 图像的全帧场景中每个可见点的 ( x , y , z ) (x, y, z) (x,y,z) 坐标。
3.1.彩虹3D相机
与传统的立体视觉(必须从一对立体图像中提取相应的特征来计算深度值)不同的是,彩虹3D相机投影不同波长的光(空间上)到物体表面。特定波长
λ
\lambda
λ的光平面到彩虹光投影器件有固定的(投影)角度
θ
θ
θ,因而很容易定位到物体表面的标记点。由已知的基线
B
B
B和视角
α
\alpha
α,可以通过三角测量原理直接计算每个单独像素的深度值,全帧的3D图像能以30fps甚至更快的速度获得。
3.2.连续变化的颜色编码
可以组合各种连续变化的颜色图案来编码空间位置信息。例如,为投影仪的每个颜色通道构建一个强度变化图案,这样,当将各个颜色通道中的这些图案加在一起时,就会形成连续变化的颜色图案。下图显示了三个加色基色通道的强度变化图案示例。这种类型的颜色图案不一定遵循色谱(波长)的线性变化关系。由于每个颜色通道的贡献之间的比率是已知的,解码方案很容易实现。
4. 条纹索引(单视图)
线结构光
因观测到的条纹顺序不一定与被投影的顺序一致,条纹索引的3D表面重建方法具有一定的鲁棒性。这是基于三角测量的3D表面成像系统存在固有的视差,以及物体3D表面特征的遮挡而引起采集图像中的条纹缺失所致。下面介绍一些代表性的条纹索引技术。
4.1 彩色条纹索引
彩色图像传感器通常具有三个独立的采集通道,每个通道对于一个光谱带,线性组合这些颜色分量值可以得到无限种颜色。3个8位通道可以表示
2
24
2^{24}
224种不同的颜色,丰富的颜色信息可以用于增强3D成像精度,减少采集时间。如下图所示,采用彩色条纹索引的投影图案可以缓解采用单色图案的相移法和多条纹技术中的不明确问题。这种颜色编码系统可以实现实时的3D成像,还可以将多个图案编码为一个彩色投影图像,每个图案在颜色空间中具有唯一的颜色值。为了降低解码错误率,可以选择一个颜色集,每种颜色和其他颜色具有最大间隔,集合中最大颜色数量受限于获得图像中最小串扰颜色之间的距离。
4.2 分段图案条纹索引
为区分条纹,可以在条纹上增加不同的分段模式。但这种方式只适用于3D对象的表面是平滑且连续的情况(投影图案不会产生严重的形变),否则将很难恢复不同的分段图案。
4.2 格雷图案条纹索引
如果使用两个以上的强度级别,则可以排列条纹的强度级别,使得任何一组条纹(N个条纹的滑动窗口)在一段长度内具有唯一的强度图案。例如,如果使用三个灰度级(黑色、灰色和白色),则图案可以设计为
图案匹配过程从获取的图像强度与投影强度图案的相关性开始。一旦找到匹配,就对亚灰度序列匹配进行进一步搜索,例如三字母序列WGB、GWB等。
4.4 基于De Bruijn序列的条纹索引
大小为 k 的字母表上的秩为 n 的 De Bruijn 序列是一个循环词,
k
n
k^n
kn个长度为n的单词都恰好出现一次。下图显示了一个简单的 De Bruijn 圆示例,其中 n = 3 且 k = 2(字母表为 {0, 1})。当我们沿着圆循环(顺时针或逆时针)时,我们将遇到每个
2
3
=
8
2^3 = 8
23=8 个三位数模式 000、001、010、011、100、101、110、111 中恰好一次。序列中没有重复的三位数模式。换句话说,De Bruijn 序列中没有任何子序列与其他任何子序列相关。 De Bruijn 序列的这一独特特征可用于构建条纹图案序列,该序列具有不重复的独特局部变异图案。这种独特性使得图案解码变得更加容易。
现在我们展示一个使用(R、G、B)颜色的二进制组合来生成基于 De Bruijn 序列的颜色索引条纹的示例。三种颜色的最大组合数为
8
(
=
2
3
)
8(=2^3)
8(=23)种。由于我们不打算使用 (0,0,0),因此我们只有七种可能的颜色。这个问题可以通过构造 k = 7、n = 3 的 De Bruijn 序列来解决。这会产生一个具有 343 个条纹的序列。如果条带数量太多,可以通过设置 k = 5、n = 3 来使用 De Bruijn 序列的缩减集。在这种情况下,条纹数量减少到 125 个。使用 De Bruijn 技术构建颜色索引条纹序列有一个重要的限制:所有相邻条纹必须具有不同的颜色。否则,会出现一些双倍或三倍宽度的条纹,从而混淆 3D 重建算法。通过使用异或(XOR)运算 可以轻松应用此约束。下图显示了一组具有实际颜色索引条纹图案的结果。在这个条纹序列中,所有相邻的条纹都有不同的颜色。 De Bruijn 技术实施的各种变化可用于为 3D 表面成像应用生成独特的颜色索引、灰度索引或其他类型的投影图案。
5. 网格索引:2D 空间网格图案
2D 网格图案技术的基本概念是唯一地标记投影的 2D 图案中的每个子窗口,使得任何子窗口中的图案都是唯一的,并且相对于其在图案中的 2D 位置而言是完全可识别的。
5.1.伪随机二进制数组 (PRBA)
一种网格索引策略是使用伪随机二进制数组(PRBA)来产生可以用点或其他图案标记的网格位置,使得任何子窗口的编码图案都是唯一的。 PRBA 由使用伪随机序列编码的 n 1 × n 2 n_1 × n_2 n1×n2 数组定义,使得在整个数组上滑动的任何 k 1 × k 2 k_1 × k_2 k1×k2 子窗口都是唯一的,并且完全定义了数组内子窗口的绝对坐标 ( i , j ) (i, j) (i,j)。二进制数组的编码模式是使用本原多项式模 2 n 2^n 2n 方法基于伪随机二进制序列生成的,其中 2 n − 1 = 2 k 1 k 2 − 1 , n 1 = 2 k 1 − 1 , n 2 = 2 n − 1 / n 1 2^n − 1 = 2^{k_1k_2} − 1, n_1 = 2^{k_1} − 1, n_2 = 2^n − 1 /n_1 2n−1=2k1k2−1,n1=2k1−1,n2=2n−1/n1。下图显示了生成的 PRBA 的示例,其中 k 1 = 5 、 k 2 = 2 k_1 = 5、k_2 = 2 k1=5、k2=2,因此 n 1 = 31 、 n 2 = 33 n_1 = 31、n_2 = 33 n1=31、n2=33。
迷你图案作编码词
可以使用多值伪随机数组来代替使用伪随机二进制数组。人们可以用一个迷你图案作为特殊的码字来表示每个值,从而形成网格索引的投影图案。下图显示了一个三值伪随机数组和一组迷你模式码字的示例(如图右下角所示)。使用专门定义的代码字,可以将多值伪随机数组转换为具有唯一子窗口的投影图案。
5.3.颜色编码网格
另一种网格索引策略是对垂直和水平条纹进行颜色编码,以便实现二维网格索引。垂直和水平条带编码方案可以相同或完全不同,具体取决于应用。不能保证子窗口的唯一性,但两个方向的彩色条纹可以帮助大多数情况下的解码建立对应关系。细网格线在图案提取方面可能不如其他图案(点、正方形等)可靠。
5.4.二维颜色编码点阵列
布鲁特力算法(brute force algorithm)可以生成不同的子窗口,但可能无法穷尽所有可能的子窗口图案,该方法在计算机算法中实现起来相对直观。例如,下图(左)显示了使用三个码字(R、G、B)的 6 × 6 阵列,子窗口大小为 3 × 3。计算过程如下:首先用随机选择的图案填充6×6数组的左上角。然后,在右侧添加一个带有随机码字的三元素列。在添加这样的列之前,会验证子窗口的唯一性。继续添加列,直到所有列都填充了随机代码字并且验证了子窗口的唯一性。同样,从初始子窗口位置向下添加随机行。然后,沿对角线方向添加新的随机码字。重复这些过程,直到所有点都充满颜色。同样,该计算过程可能无法保证为所有数组大小和码字生成伪随机数组,但在许多情况下已经取得了良好的结果。下图(右)显示了 20 × 18 维度的伪随机数组的示例。
5.5.混合方法
通过结合以上讨论的一种以上编码方案,有很多机会可以改进 3D 表面成像系统性能的特定方面。下图为其中一种示例。
6. 3D 表面成像系统的性能评估
表征 3D 表面成像系统技术性能的因素有很多。从应用角度来看,以下三个方面常被作为评价3D成像系统的主要性能指标:
(1)准确性。测量精度是指3D表面成像系统获得的测量值与3D物体实际尺寸的真实尺寸的最大偏差。通常,由于系统固有的设计特性,3D 成像系统在不同 (x、y、z) 方向上可能具有不同的精度。此外,不同的制造商可能使用不同的方法来表征精度。例如,有些可能会使用平均误差、不确定性、±误差、RMS 或其他统计值。因此,在比较不同的系统时,必须理解任何性能声明的确切含义,并在同一框架中进行比较。
(2)分辨率。在大多数光学文献中,光学分辨率被定义为光学系统区分图像中各个点或线的能力。同样,3D 图像分辨率表示 3D 成像系统可以解析的物体表面的最小部分。然而,在 3D 成像领域,术语“图像分辨率”有时也表示系统在单帧中能够获得的最大测量点数量。例如,具有 640 × 480 像素的 3D 传感器可能能够为单次采集生成 307,200 个测量点。考虑到视野、间隔距离和其他因素,图像分辨率的这两个定义可以相互转换。
(3)速度。采集速度对于运动物体(例如人体)成像非常重要。对于单次 3D 成像系统,帧速率代表其在短时间内重复全帧采集的能力。对于顺序3D成像系统(例如激光扫描系统),除了帧速率之外,还需要考虑另一个问题:在进行顺序采集时物体是在移动的;因此,获得的全帧3D图像可能不代表单个位置处的3D对象的快照。相反,它变成了在不同时间实例中获取的测量点的集成;因此,3D 形状可能会偏离 3D 对象的原始形状。采集速度和计算速度之间还有另一个区别。例如,某些系统能够以 30 帧/秒的速度采集 3D 图像,但这些采集的图像需要以慢得多的帧速率进行后处理才能生成 3D 数据。
上述三个关键性能指标可以用来比较3D成像系统。图23示出了主要性能空间,其中每种3D成像方法都可以占据一席之地,然后可以直观地比较多个3D成像系统。当然,在评估实际安装的 3D 表面成像系统时,系统的性价比和可靠性也是重要的考虑因素。
除了主要性能指标外,实际上还有无限数量的性能指标可用于表征 3D 成像系统的各个特定方面。例如,3D成像系统的景深,是指能够获得精确3D测量的间隔距离范围。
最终,这些类型的系统属性将反映在主要性能指标上(例如测量精度、分辨率和速度)。视场、基线和间隔距离也可用于表征 3D 成像系统的行为。由于光投射能量有限,结构光 3D 成像系统通常具有有限的隔离距离,而依赖单激光扫描的飞行时间传感器可以达到数英里的距离。
每种类型的 3D 成像技术都有其自身的优点和缺点,我们应该根据其针对预期应用的整体性能来判断系统。
7. 相机和投影仪校准技术
略,可见【立体视觉(三)】之张正友标定法原理篇。
8. 3D表面成像技术应用实例
略。
9. 总结
本教程全面回顾了结构光 3D 表面成像技术的最新进展及其在各个领域的应用的一些示例。我们建立了一个分类框架来适应 3D 成像技术的巨大变化,并以系统的方式组织和呈现。简要描述了代表性技术并提供了说明图,以帮助读者掌握基本概念。还回顾了 3D 成像系统的性能指标,并介绍了相机和投影仪的校准技术。介绍了 3D 成像技术应用的精选示例。
迄今为止开发出如此多的 3D 成像技术是有原因的。没有一种技术可以适用于所有应用场景。每种 3D 成像技术都有其自身的优点和缺点。在为特定应用选择 3D 成像技术时,我们鼓励读者在其特定应用需求之间进行仔细权衡,并考虑关键性能指标,例如精度、分辨率、速度、成本和可靠性。有时,需要多模态传感器系统来解决单一模态无法满足的需求。
3D 成像是一项跨学科技术,融合了光学设计、结构设计、传感器技术、电子、封装以及硬件和软件。传统上,这些学科的 3D 成像研究活动或多或少是独立进行的,侧重点不同。 3D 成像研究的最新趋势需要一种集成方法,有时称为“计算成像”方法,其中同时考虑光学设计、传感器特性和软件处理能力。这种新方法有望显着提高未来3D成像系统的性能和性价比,是未来3D成像技术发展的一个有价值的方向。
与经过数十年发展、投资数十亿美元的 2D 成像技术相比,3D 成像技术领域还相当年轻。我们希望,我们在开发 3D 成像技术并将其应用于各种应用方面的工作能够为更多有才华的研究人员从理论和应用背景到这个令人着迷的研究和开发领域提供一些刺激和吸引力。
补充
1. 编码方式
所谓结构光(structured light),重在光线的结构化,即光线的编码与解码。按照编码方式分类,结构光技术可分为空间编码、时间编码和混合编码,主要差别在于编码容量和编码图案数量。
- 空间编码方案通过投射单张编码图案获取稀疏点云,满足实时性的需求;
- 时间编码方案投射一个编码图案序列增加编码容量,获取高分辨率的稠密点云,通过对投影仪像素分配不同码值,理论上可获取与投影仪分辨率相同的重建分辨率;
- 混合编码方案在保证实时性的同时增加空间编码的编码容量提高重建分辨率。
2. 工业结构光中,选择蓝光的原因
- 忽略算法差异,波长越短,成像越清晰。红外波长最长,成像最不清晰,所以点云质量最差;而蓝光波长最短,成像最清晰,所以点云质量最好。
- 太阳光中蓝光波段能量较少,而且一般相机前面都加上蓝光截止片,这样基本上拍到的都是投影仪投出的图案。
- 蓝光波长短,分辨率高;环境光中蓝光波段少,抗干扰会比其他波段好。
- 蓝光波段色散小,色散会影响精度,图像清晰度更佳;环境光相对于结构光来说,可以忽略了。
- 可滤除环境光干扰,减少噪音,保证数据精度。
前方交会和后方交会
已知A、B两点的坐标,为了计算未知点P的坐标,只要观测∠A和∠B即可。这种测定未知点P的平面坐标的方法称为前方交会。
前方交会测量是指:将仪器架设在已知点上,通过测量角度或者距离来确定未知点。
后方交会是指仅在待定点上设站,向三个已知控制点观测两个水平夹角∠A、∠B,从而计算待定点的坐标,称为后方交会。
后方交会测量是指:将仪器架设在未知点上,通过测量已知点来获未知点的坐标。