标题:Dual-frequency pattern scheme forhigh-speed 3-D shape measurement 作者:
传统基于相移法的结构光技术,在计算包裹相位、调制度时,需要利用到反正切函数,利用三角法进行点云重建时,需要对投影矩阵求逆,这些操作都异常地耗费计算量。这在现代CPU中显然不是问题,但是对于嵌入式设备中,显然无法满足实时计算要求。这份发表在光学顶刊《Optcial Express》2010上工作利用LUT无损查找表技术对结构光重建过程进行计算,仅使用运行3.0 GHz的英特尔酷睿2双核Q9650处理器,对于一个640×的480的视频流,可以以每秒1063.8帧的速度生成相位数据,并以每秒228.3帧的速度生成完整的三维坐标点云。
本文提出了一种新的双频模式,它将高频正弦分量和单元频正弦分量相结合,利用高频分量生成鲁棒相位信息,单元频分量减少相位展开歧义。在我们提出的模式方案中,相位展开可以克服传统的空间相位展开的主要缺点:相位跳跃和不连续性。与传统的时间相位解包方法相比,所提出的模式方案可以使用更少的图片数量来获得更高质量的相位数据。为了实时处理数据,我们还提出并开发了基于查找表的快速和精确的相位生成和三维重建算法。这些快速算法可以应用于我们的模式方案以及传统的相位测量轮廓测量。对于一个640×的480的视频流,我们可以以每秒1063.8帧的速度生成相位数据,并以每秒228.3帧的速度生成完整的三维坐标点云。这些成就比以前报道的研究速度快25倍和10倍。
结构光照明(SLI)[1,2,3]是一种主动的三维(3D)形状测量技术,广泛应用于科学和工业目的[4]。各种算法已经被提出来实现高精度/或高速测量[5,6]。
已经研究并采用了更高的频率模式来提高测量精度,但需要额外的相位展开计算成本。大多数展开相位策略可以分为两类[9]:空间[10,5,11,12]和时间[7,13,14]。
空间相位展开方法假定扫描表面的连续性,在深度不连续(阶梯边缘)的区域可能失败[9]。时间方法,生成的中间相位值,典型的方法如投影几个额外的参考模式,因此对于实时操作来说效率不高。Kim等人[15]提出了一种高频SLI算法避免直接的相位展开,需要 副图案。Li等人[16]提出了一种双频光栅,它将高频和单频集成到每副图案中,需要副图案,其中高频必须等于 N。Su和Liu[17]将Li等人的算法作为他们的一次性模式策略中的两个基础之一。
在本文中,我们提出了一种新的双频模式方案,该方案将高频结构光模式与单元频模式结合为单一模式,其中高频分量产生包裹相位,对传感器噪声具有弹性,而单元频分量使相位解包裹。与Li等人的两频光栅[16]不同,我们提出的方法需要的最小模式数目是5,对任何高频模式。在Li等人的方法中,模式的最小数量是6,并且高频项是固定的,与模式的数量有关。我们提出的模式是由一个单一的方程来定义的,而Li等人采用了两个方程。
关于高速或实时三维测量,研究人员提出了一种[2,18,19,20]方法,从单一的连续投影模式重建深度,而其他人提出使用高速相机和投影仪对。一次性结构光技术因其对物体运动不敏感而具有吸引力,其中模式策略基于空间邻域编码,但分辨率低,计算成本高[2]。因此,研究人员试图通过在如此高的帧率下驱动相机/投影仪对,来实现具有运动弹性的高分辨率重建,以减少物体运动带来的影响。Zhang 等人领导了一项特别重要的研究 [8, 21]他们采用了一种新的相位生成算法,而不是耗时的反正切函数 [22],并且还利用 GPU 的计算能力来生成被扫描物体的绝对 3-D 坐标[6]。对于大小为532×500的图像,他们的新算法比使用反正切函数快3.4倍,通过GPU加速将三维重建的帧率从6fps提高到25.56fps。
为了实现实时三维视频采集和重建,本文同样介绍了一种用于相位、强度/纹理和深度数据的无损查找表(LUT)方法结合高速投影仪/相机对,该方法广泛用于相位测量轮廓术(PMP)[23]。基于LUT的方法以计算成本低而闻名,并在许多应用中应用[24]。我们开发了一种新的方法,通过降低反正切函数和平方根函数的计算复杂度,从输入的PMP视频中提取相位和强度/纹理信息。此外,由于基于LUT的方法没有引入来反转相机的标定矩阵以实时产生三维点云,该方法也可以应用于其他基于三角法的三维重建技术。
正如本文所演示的,我们的实验系统使用运行3.0 GHz的英特尔酷睿2双核Q9650处理器实现714.29帧的相位+纹理视频(纯相位是1063.8fps),228.83帧/秒的3d点云。不需要额外的内核或GPU[6],当然,使用这些资源会增加我们的重建帧率。对于所提出的新型双频模式方案,其中模式的数量被设置为6,如Sec4所示。我们的快速的基于LUT的算法也可以被应用。
PMP由于其高可靠性和高精度的[25],是一种流行的结构光方法[25]。在实践中,垂直或水平的正弦图案被投影到目标物体上,这样相机和投影仪之间的垂直或水平对应信息就可以直接从计算的相位数据中得到。PMP图案被描述为:
其中::投影仪中的一个像素的坐标
:像素强度
图(1)显示了一组具有8位彩色深度投影仪的的正弦波图。
对于重建,相机捕捉每个正弦波图像被扫描的表面拓扑扭曲的图像,导致图形图像表示为:
其中:
为了简化符号,相机和投影仪中的坐标索引将从我们的方程中删除。术语Ac是贯穿整个模式集合的平均像素强度,可以根据以下方法推导出:
因此图像 等于场景的强度或纹理照片。相应地,术语 是给定像素的调制强度,获得方法如下:
这样可以被认为是目标表面上反射的正弦的振幅。如果恒定或更少受投影正弦模式的影响,将接近于零。因此,被 用作阴影噪声检测器/滤波器[25],使值较小的阴影噪声区域被丢弃。图1显示了一个背景包含荧光天花板灯的例子场景,它使CMOS相机的像素过度饱和,从而抹去来自SLI投影仪的任何信号。在图1中,看起来像一个标准的视频帧,没有任何投影模式序列的迹象。相比之下,如图1所示的看起来与非常相似,只是它只显示了场景中那些显著反映投影序列的区域的纹理。鉴于Bc作为投影信号强度的指标的意义,图1中的二值化图像只显示了那些幅度大于用户定义阈值的像素。正是这些像素最终将被用来重建我们的三维表面,而被忽略的像素被认为噪声太大,无法传递可靠的深度信息。
在具有足够大 的可靠像素中, 表示捕获的正弦模式的相位值,公式为:
在图1中,我们展示了正弦波模式与场景对应的相位图像。作为参考,图1还显示了所有像素的相位值,包括根据认为不可靠的相位值。
在推导出相位图像 之后,我们同样通过线性方程 为每个相机像素 , 推导出了一个唯一的对应值 。因此,被扫描物体的三维世界坐标可以通过投影仪[7]的三角法导出,假设相机和投影仪使用针孔透镜模型精确建模,使它们的透视矩阵(有时候也会说投影矩阵):
注:推导可以看我课程《从零实现结构光3D重建系统[理论+源码+实现]》中的《单目逆相机法》章节内容。
这是这个矩阵的逆矩阵以及公式(5)中的反正切计算稍后将被证明是阻止实时表面重建的瓶颈,这将在章节中讨论4.3。
为了通过高频PMP来最小化传感器噪声的影响,同时最小化执行相位展开的计算费用,我们提出了一个双频模式集,定义为:
其中:
注:包含、、、、 五个未知数,因此N至少大于等于5。
图2展示了一个提出的模式及其配置: 对于一个8-bits的投影仪。
使用新的投影图案,公式2(相机捕获的图像)变为:
其中:
使用,这样 可以被认为是从目标表面上的一点反射的正弦波的振幅。
与传统的PMP类似,如果 是常数,或者更少地被投影出来的正弦波影响,那么 会接近于0,表明对照相机、投影仪和/或环境光中的噪声非常敏感。因此,使用作为信噪比的指示器,使进一步处理[25]的过度噪声区域具有小的丢弃。 通过公式10与m=2,根据相应的 。在具有足够大的的可靠像素中,相位对,被推导出为:
其中:
基于lut的编程是一种众所周知的和广泛使用的[24]技术,用于最小化处理延迟。在本节中,我们实现了基于LUT的处理来推导出调制度 和相位 ,除了使用传统PMP,也适用于所有基于三角的三维测量,包括我们提出的双频模式集。提出的基于LUT的处理利用了实时系统使用尽可能少的模式的需要,通过使用捕获的模式集的每像素8位作为LUT的索引。通过在存储双精度结果的同时,考虑模式集上捕获的像素值的每一个可能组合的线索,该方案与传统处理相比是完全无损的。
作为降低公式4、5、7 相关的计算复杂度的第一步,我们通过重写公式来简化的确定为,对于 :
对于 :
对于 :
注意到我们只需要为每像素 8 位的 图像求解这些方程,我们可以实现一个调制查找表 MLUT,对于 N = 3,它定义为:
其中: 都是整数索引,通过:
对于,定义如下:
其中整数索引 如下:
对于 ,定义如下:
其中整数索引 如下:
公式15、17、19的双精度结果存储在MLUT中。与公式 4相比,MLUT在不损失精度的情况下降低了调制的运行时计算成本,其中LUT的大小由相机传感器每像素的比特数和被投影的模式数决定。
对于我们提出的双频模式方案,最小的模式数是5,但为了利用我们基于LUT的处理,我们将模式数设置为6,其中等式中的调制项为和 在公式10,被描述为:
和:
特别地,我们仅需要计算 作为阴影过滤器来表示纹理, 的MULT结果同公式 19。
作为我们制作具有纹理的实时三维视频的第二步,我们打算最小化与生成相位视频相关的计算复杂度,其中反正切函数长期以来一直被认为是实时条纹模式分析的一个重要障碍[26]。以前解决这个问题的方法包括Huang等人的交叉比率算法[22]和Guo等人的近似算法[26]。然而,这些方法以牺牲精度为代价,降低了计算成本,并且并不比我们的基于LUT的算法快。
同我们对公式 4计算 的处理一样,我们简化公式 5根据条纹图像的数量 ,对于 :
对于 :
对于 :
同样基于抓取图像的强度值是范围有限的整数的事实,我们可以通过相位LUT(PLUT)实现这些计算,对于,根据:
其中 的定义同公式 16。对于 ,根据:
其中 的定义同公式18。对于 ,根据:
其中 的定义同公式 20。双精度的结果存储在PLUT中。因此,预先执行耗时的弧切操作,并通过访问预先计算的PLUT获得相位值,该PLUT的大小同样由传感器每像素的比特数以及投影的模式数决定。与公式 5相比,PLUT避免了在运行时计算反正切函数,从而在不引入失真的情况下大大降低了相位的计算代价。
对于我们提出的双频模式方案,在等式中采用更精确的包裹相位 和粗单位频率相位 对(8)被重写为:
对于 的PLUT结果同公式 28,而对于 的结果:
其中和定义如下:
一旦获得了 和 就可以实时实现相位展开。
在通过LUT获得相位和调制图像后,我们开始推导一个LUT,以实现公式 7。经过矩阵逆和矩阵乘法运算后,公式7以扩展为直接代数形式:
其中:, 的定义在附录里。
然后我们注意到,基于将世界坐标映射到相机平面[的方法7],如果是根据:
那么 和 计算如下:
其中:
计算7个参数: 通过表格查找索引
、(相机列和行索引)降低了从相位项推导三维点云的总计算复杂度到7次查找、4次加法、3次乘法和1次除法,这明显低于公式 7所要求的执行矩阵求逆和矩阵乘法所涉及的内容。需要注意的是,在方程式32、33中给出的方法。可以应用于所有基于三角测量的三维坐标重建技术,包括立体视觉、视频三维重建、飞行时间等。
为了测试所提出的模式方案和基于lut的处理的性能,我们使用微软VisualStudio2005和C++对图3的实验系统进行了编程。成像传感器是8位每像素,单色,Prosilica GC640M,千兆以太网相机,帧率120fps,640×480像素分辨率。投影仪由德州仪器的Instrument-Discovery 1100 、ALP-1控制器和225ANSI流明的LED-OM组成。该投影仪的最大帧率为150fps,分辨率为1024×768,每像素灰度为8位。照相机和投影仪通过一个硬触发电路进行同步。作为我们的处理单元,我们使用了戴尔Optiplex960,英特尔酷睿2双核四元组Q9650处理器运行在3.0 GHz。
我们的实验包括:
实验1:双频模式方案扫描静态场景,不使用基于LUT的处理
在第一个实验中,图4的图像(左上角)显示了扫描的静态物体。投影模式的参数,在公式8,其中:。 每个模式的最小值是55,以防止使用我们的相机捕获的图像的下溢(灰度最小值,非线性段)。所提取的参数、、、 的可视化如图4所示(中上)、(右上)、(左下)和(右下)。图4(底部中心)中的图像显示了二值化的Bc1,将用作相位生成的阴影噪声滤波器,使用的阈值为10。
公式11的可视化如图5(左上)和(上中心)所示,其中阴影噪声通过二值化的进行过滤,而图5(左下)和(中下)显示了穿过的第250列曲线。相比之下,单元相项是有噪声,而包裹相质量高,但需要展开。由于我们同时获得了包裹相位和基相位,因此可以执行多频PMP的展开算法来生成最终的、高质量的、无歧义的相位。不需要使用领域技术。最终无阴影噪声的展开相位图像如图5(右上)所示,穿过某行的第250列曲线如图5(右下)所示。现在,一旦获得了解包裹的相位,就可以通过相机和投影仪之间的三角测量来计算被扫描物体的三维世界坐标。图6显示了重建的三维点云,具有纹理(上)和前(左)、侧面(中)和深度渲染(右)。在这个实验,中作为三维点云的纹理。
图6 3D重建点云效果:前视图(左)、侧视图(中)、右视图(右)
实验2:采用传统的单位频率PMP扫描静态场景,对 、、 进行扫描,使用基于LUT的处理
在我们的第二个实验中,我们使用传统的PMP扫描一个静态物体,以测量我们基于LUT的算法在不进行相位展开的情况下执行的速度。虽然处理器有四个核,但我们报告的每个LUT算法的处理速率仅基于使用一个核。虽然可以用作阴影噪声滤波器,从而减少了在推导 时需要处理的像素数,但我们计算了整副图像640×480像素的相位值,这样导致我们观察到的处理时间就代表了一个上限。在这些条件下,调制 和相位 超过1000次的平均计算时间。 在这个实验中起着纹理的作用。
表1:利用本文描述的方程和LUT对PMP处理的各个阶段,处理时间和速率分别以毫秒和每秒帧数(括号内)。
在表1中对总处理时间的概述中,包括纹理生成、相位生成和三维重建,我们基于lut的计算对N=3的重建速率为173.31fps,N=4为164.20fps,N=6为139.28fps,相比较传统的PMP方法,N=3时15.16fps,N=4时15.38fps,N=6时14.55fps,这意味着我们基于lut的算法比传统的PMP算法快10×。利用一般的调制方程,方程式4和一般相位方程5,处理时间随着N的增大而增加,因为N越大意味着更多的、和求和计算。处理时间和速率列于表1中。
简化的调制方程公式12、13、14,N=4(2.34 ms)相比N=3(6.72 ms)的处理时间显著减少,因为在执行平方根计算之前,N=4只有2个减法、1个加法和2个平方计算。N=3有3次减法,1次加法,2次乘法和2次平方计算。简化的相位方程,公式23、24、25,此外,从表1中发现,MLUT和PLUT的性能对于不同的N是相同的,因为整数指数U和V的计算对于MLUT和PLUT的计算是相同的,而访问MLUT和PLUT的时间是相同的N。然而,MLUT/PLUT的处理时间随着N的增加而增加,因为访问图像缓冲区,的时间增加了。在实践中,当我们想要访问MLUT和PLUT时,U和V的计算只需要执行一次。因此,表1还显示了记为“MLUT and PLUT,combined”的处理时间,小于分别计算它们的U和V,即公式15、17、19“MLUT” + 公式26、27、28“PLUT”的求和时间
为了测试使用单一处理核心的三维重建,我们采用逆矩阵公式 7与我们基于lut的Sec4.3.实现相比。利用我们的三维LUT算法,对于640×480的图像分辨率,三维重建的帧率为228.83fps,比通过逆矩阵公式 7快10.3倍。为了进行进一步比较,Zhang等人报道了在nVidiaQuadroFX3450上通过GPU处理进行矩阵反演时,重建帧率25.56fps,分辨率为532×500[6]。对于Zhang等人的2+1模式策略[21],我们也可以应用LUT分析,性能如表1所示,可以达到719fps。
实验3:扫描N=6双频模式的移动手,通过基于LUT的处理;
在我们的第三个实验中,我们使用基于lut的处理方法,用我们的双频率模式集(N=6)扫描了一个人类受试者的手势。与我们的第二个实验不同,最近的N个视频帧被实时捕获,并通过一个相机线程存储在一个共享的图像缓冲区中。同时,第二个线程从共享缓冲器执行调制和相位生成,并将计算出的数据存储到调制和相位缓冲器中。第三个线程同时使用来自这个调制缓冲区的数据执行三维重建,将三维点云的结果存储到一个三维数据缓冲区中。最后,第四个线程使用OpenGL显示来自三维数据缓冲区的数据。由于相机/投影仪对的速度是120fps,最终的三维重建速度也是120fps,而显示速度受LCD显示的限制为40−50fps。
图7 视频示范
图8 样本点云,使用双频模式方案的N=6,现场展示各种手的姿态。(顶部)前视图和(中间)俯视图
图7显示了一个人类受试者的手势。在图7(左)的情况下,我们显示整个系统以及主题的手来演示视频被获取和显示在屏幕上,实时没有明显的延迟手势的主题和显示在屏幕上。在LCD面板上,你可以看到XYZ轴分别被标记为蓝色、绿色和红线,而三维点云也被反射出XZ平面,以更好地说明手向前和离开相机的一种方式。在图7(中)和(右)的视频剪辑中,我们展示了受试者的手放在一个白色的纸板箱前。这些剪辑的目的是为了表明,我们可以跟踪多个,不相交的对象,因为在使用双频模式方案时没有相位歧义。为了增加检查,图8中的图像显示了具有前视图和俯视图的实时手势帧,从视觉检查中,我们可以看到从推导出的点的纹理/强度编码,不显示具有低调制强度的点。
图9 最佳拟合球体的半径(顶部)和摄像机与球的中心(底部)之间的距离,可进行295次测量。
作为对我们提出的方法的最终和定量评估,我们扫描了一个无纹理的白色乒乓球,半径为19毫米,像钟摆一样在20厘米长的绳子上摆动。我们使用了我们提出的双频模式方案: 和 。我们的PLUT和三维LUT被用于相位生成和三维重建。从重建的运动球的点云中,我们找到了具有可变位置和半径的最佳拟合球。由此,我们比较了估计的球面半径和真实半径。如图9(上)所示,为此估计的球面半径。将图9(底部)中乒乓球点云的平均距离估计为云中所有点的质心。
点云质心的确切位置没有定量意义,因为我们没有一个真正的测量方法来比较,但它确实表明了球在摆摆的极端点时的时间点。图9显示,我们得到了一个准确和稳定的测量球的半径,即球在改变方向之前完全停止。中间点有最小稳定的半径估计,因为这是在挥杆中球以其最高速度移动的点。在距离传感器最远的点,重建中的噪声导致球半径最小,因为在重建中,云的点没有以任何方式并排约束。因此,两个相邻的像素可能会在最适合球体的正面和背面。这种行为在距离估计中很明显,因为距离估计具有高度的可变性。在离传感器最近的点上,点云足够平坦,整个点云都在最佳拟合球的前端,从而得到平滑一致的距离估计。
在本文中,我们提出了一种新的双频模式策略和三种基于lut的算法来计算调制和相位项,并基于一种流行的SLI方法重建三维点云。所提出的模式编码技术将低频和高频分量嵌入到一个单一的模式中,其中高质量、高频相位根据低频相位展开。不需要任何中间模式,表面不连续性也不属于问题。在重建质量方面,我们注意到扫描精度受到模式设计特征的强烈影响,本文也考虑了这一点。由于我们提出的方法至少需要五种模式,未来的工作将会进一步考虑减少这个模式数。
在基于lut的处理方面,本文的相位生成和三维重建对实时三维重建的贡献尤为重要。与传统的 PMP 算法(表 1)和以前发表的文献 [6,8,22] 相比,相位生成和 3-D 重建的帧速率性能的提高是显着的。此外,这里介绍的方法并不严格依赖于传统的 PMP 和提出的双频方法,其中由 Wizinowich [27] 引入并由 Zhang 在其 SLI 系统 [21] 中修改的 2+1 方法可以在 当通过 MLUT 和 PLUT 实现时,相当于 719 fps(表 1)。
由于使用每像素8位的传感器,基于lut的方法是无损的,但需要大量的内存,这取决于所使用的模式的数量。当然,这种内存消耗可以被操纵,以便只使用传入视频流中最重要的部分,以减少MLUT和PLUT的总体内存需求。用于三维重建的lut的大小受到形成传感器的像素数量的限制,因此减少内存需求对应于减少相机的整体视场。虽然对于大多数应用程序来说,在MLUT中失去精度可能是微不足道的,但量化传入的视频以减少PLUT消耗的内存会导致相位精度的损失。对于我们的实验系统,相位误差(以弧度为单位)的方差范围从3模式4位/像素LUT的0.031 到 3模式10位/像素LUT的0.001811。
其中:
更多的代码请参考课程《从零搭建一套结构光3D重建系统[理论+源码+实践]。课程大纲如下(链接):
提供的源代码:
包含:互补格雷码实现、双目结构光、单目逆相机法、相高法、以及最新的一些论文,提供答疑(深度学习+结构光暂未实现)。
本文仅做学术分享,如有侵权,请联系删文。