基于向量场的深度计算方法
路海明1, 王一娇2, 谢朝霞1    
1. 清华大学 信息技术研究院, 北京 100084;
2. 清华大学 自动化系, 北京 100084
摘要:基于深度图像可以方便地区分前景和背景, 有效提高自然人机交互的性能。其中基于面结构光技术的深度摄像头实用性强, 得到了迅速发展, 其深度信息获取基于图像块匹配算法, 在计算每个像素点的深度时, 需要在测量范围内进行逐点搜索、图像块匹配和寻优等大量运算, 这些运算要通过高性能计算机或专用并行运算芯片才能达到实时性, 导致了深度摄像头成本的增加。本文研究基于向量场模式识别的深度图算法DepthVH, 通过生成具有深度相关特征的向量场, 将深度信息变换为特征信息, 通过直接识别各个深度点周围的向量场特征, 将该特征信息逆变换为深度信息, 实现类似Hash映射的搜索, 避免了线性搜索匹配算法的巨大运算量。采用DepthVH, 智能电视只要增加一个红外发射元件, 就可以具有自然人机交互功能。
关键词深度图    结构光    向量场    
Vector field based depth acquisition algorithm
LU Haiming1, WANG Yijiao2, XIE Zhaoxia1    
1. Research Institute of Information Technology, Tsinghua University, Beijing 100084, China;
2. Department of Automation, Tsinghua University, Beijing 100084, China
Abstract: Scene foregrounds and backgrounds can be separated according to their depth to greatly improve human-computer interaction (HCI). Depth sensors using surface structured light are practical and widely used. The depth information is obtained using an image block matching algorithm, which searches for the optimal matching block in the image. However, the complex computations require high-performance computers or special chips to achieve real-time performance which increase the depth sensor cost. This paper describes a depth acquisition method based on vector field pattern recognition. The scene depth information is obtained by feature recognition of the vector field for every depth point. The vector field is first generated based on the depth features, then the depth information hidden in the vector field is converted to feature information by the pattern recognition algorithm. The depth information is then obtained by feature matching after an inverse transformation. The inverse transformation uses a searching strategy similar to Hash mapping, which avoids the complexity of a linear search. A smart TV with an infrared transmitter can easily realize natural HCI using this method.
Key words: depth image    structured light    vector field    

深度图像是指包含了Z轴方向深度信息的图像,对自然人机交互的实现具有重要价值[1, 2]。针对基于二维平面图像的人机交互的研究在人体检测[3]、 人体动作识别和人手动作识别等领域取得了大量有价值的成果。二维图像中前景和背景容易发生颜色和纹理的混淆。深度图像由于增加了Z轴方向的信息,可以非常方便地将人手和人脸区分开,也可以通过深度信息的不同将人体从环境中切分出来,从而大大提高了识别效率和准确度。

非实时的深度摄像头如各类三维激光扫描仪[4]在各种三维重构中已经被大量使用,通过各类时空混合编码结构光测量技术[5, 6],可以提高其测量精度,缺点是实时性较差。

基于双目立体视觉[7, 8]的被动式深度获取技术对成像设备要求比较低,模拟人眼的视觉原理,在受控使用环境下效果较好。该算法的基础是要进行特征点的匹配,对于纹理单一、无明显边缘特征或者暗光下的图像的效果较差。

基于TOF(time-of-light)原理的深度摄像头[9]实现了动态场景深度信息的实时获取。基于光编码(light coding)技术的深度摄像头在实现实时性的前提下,成本比TOF摄像头的大幅度下降。基于该技术的产品Kinect发展迅速,受到研究者的关注[10, 11, 12, 13]

基于光编码的深度信息获取技术本质上采用的是图像块匹配算法,在计算每个像素点的深度时,需要在搜索范围内进行逐点搜索,

对每个搜索点都要进行整个图像块的匹配运算,从中找到最佳匹配点,进而求出该点的深度。对一幅640×480像素的图像要计算30万个深度点,运算量非常巨大。目前的一种优化方案是研制专用运算处理芯片进行大规模并行计算以达到实时性,这也导致了深度摄像头成本的增加。

本文研究基于向量场模式识别的深度图算法DepthVH,通过生成具有深度相关特征的向量场,将深度信息变换为特征信息,通过直接识别各个深度点周围的向量场特征,将该特征信息逆变换为深度信息,实现类似Hash映射的搜索,避免了线性搜索匹配算法的巨大运算量,可以大大降低深度摄像头成本。采用DepthVH,无需配备专业运算处理芯片,智能电视只要增加一个红外发射元件就可以具有自然人机交互功能,大大降低了成本。

1 算法概述 1.1 深度图计算原理

图1中,A处为摄像头,用以捕捉图像。B处为投影仪,发出激光投影即投射结构光。若无物体遮挡,光线将在参考平面即墙面处形成正常的图案。若在结构光区域加入遮挡物体ID,原本投射在C处的纹样,会被投射在D处;原本投射在Q处的纹样,会被投射在I处。从摄像头中观察,由于物体ID的出现,纹样QC向右偏移,并出现阴影区域QJ

图 1 偏移分析示意图

通过平面几何的理论推导,可得偏移量与深度的关系如下:

$\begin{array}{l} p = Lf/{\rm{Dis}} - Lf/H\\ {\rm{Dis = }}LHf/\left( {Hp + Lf} \right),\\ \Delta p = - Lf/{\left( {\Delta {\rm{Dis}}} \right)^2},\\ \Delta {\rm{Dis = }}L{H^2}fd\_cmosx/\left( {{H^2}{\rm{d\_cmos}}{{\rm{x}}^2}{{\left( {\Delta x} \right)}^2}} \right){\rm{ + }}\\ \left( {{H^2}{\rm{d\_cmos}}{{\rm{x}}^2} + 2HLf{\rm{d\_cmosx}}} \right)\Delta x + \\ \left. {HLf{\rm{d\_cmosx}} + {L^2}{f^2}} \right) \end{array}$ (1)
其中:p为成像摄像头中纹样的偏移量;Dis为相应位置的深度;H为参考平面到摄像头和激光光源所在平面的距离;L为摄像头与激光光源的距离;f为摄像头焦距,d_cmosx为互补金属氧化物半导体(CMOS)感光芯片像素横向采样间距。

综上所述,p反比于ΔDis,当深度值发生变化则结构光纹样产生偏移。若结构光纹样是均匀变化的向量场,则在深度值发生变化时该处的向量场发生方向变化。

1.2 结构光图案设计

采用条纹状结构光图案构造向量场,则结构光曲线f(x)应满足以下要求:

1)d2f(x)/dx2=const,

2)inf<$\sum\limits_{i = 0}^N {\sum\limits_{j = 0}^N {\frac{{P\left( {i,j} \right)}}{{{N^2}}}} }$<sup,inf≈sup,即条纹分布平均。

其中:const为常数,N为图像中统计小方块的边长,sup和inf分别为图像各处平均灰度的上下界。P(i,j)为结构光图像Pi行第j列的像素点的灰度值。解得:

$f\left( x \right) = a{x^2}{\rm{ + }}s{\rm{.}}$ (2)
其中s为每条线之间的间隔。若抛物线最高点处每隔2个白像素,画1个宽度为1像素的黑像素,则间隔为2。

设图像周期为c。考虑到条纹斜率不能过大,取边界斜率为60°,则由df(x)/dx=tan60°解得:

$a = \tan \left( {{{60}^ \circ }} \right)/c$ (3)

同时考虑到结构光图像边缘处不能重合,取s=4,得到一个周期内结构光图像如图2所示。后续试验均为单周期内试验。

图 2 结构光图案
1.3 方向场的计算

采用图2的结构光图案,计算其中线条的方向,采用Laplace梯度算子提取边缘: ▽2f(i,j)≡Δx2f(i,j)y2f(i,j)= f(i+1,j)+f(i-1,j)+f(i,j+1)+f(i,j-1)-4f(i,j).

得到边缘线后,对曲线上的每一个点计算其切线方向即该点处的方向场,非边缘线上点的方向场由附近边缘线上的点插值而得。

切线方向计算方法如下:按8邻域方向查找并延伸每一条曲线,曲线上的像素点依次存储在对应表X(num,k)和Y(num,k)中,其中X(num,k)和Y(num,k)分别为第num条曲线的第k个点的xy坐标值。

匹配延伸算法如下:

1)曲线初始点为(x0,y0),初始基准模板temp(x0,y0)为以(x0,y0)为中心,(N+1)为半径的模板。

$\begin{array}{l} \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\rm{temp}}\left( {{x_0},{y_0}} \right) = \\ \left[\begin{array}{l} P\left( {{x_0} - \frac{N}{2},{y_0} - \frac{N}{2}} \right)\;\;\;\;\;\;\;P\left( {{x_0} - \frac{N}{2} + 1,{y_0} - \frac{N}{2}} \right)\;\;\;\;\;\;\; \cdots \;\;\;\;\;P\left( {{x_0}{\rm{ + }}\frac{N}{2},{y_0} - \frac{N}{2}} \right)\\ P\left( {{x_0} - \frac{N}{2},{y_0} - \frac{N}{2}{\rm{ + 1}}} \right)\;\;P\left( {{x_0} - \frac{N}{2}{\rm{ + 1}},{y_0} - \frac{N}{2}{\rm{ + 1}}} \right)\;\;\;\; \cdots \;\;\;P\left( {{x_0}{\rm{ + }}\frac{N}{2},{y_0} - \frac{N}{2}{\rm{ + 1}}} \right)\\ \;\;\;\;\;\;\;\;\;\;\;\;\; \vdots \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; \vdots \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; \vdots \\ P\left( {{x_0} - \frac{N}{2},{y_0}{\rm{ + }}\frac{N}{2}} \right)\;\;\;\;\;\;\;\;\;P\left( {{x_0} - \frac{N}{2}{\rm{ + 1}},{y_0}{\rm{ + }}\frac{N}{2}} \right)\;\;\;\;\;\;\; \cdots \;\;\;\;\;P\left( {{x_0}{\rm{ + }}\frac{N}{2},{y_0}{\rm{ + }}\frac{N}{2}} \right) \end{array} \right] \end{array}$

2)求解与初始点最相似的点

$\begin{array}{l} \mathop {\min }\limits_{{x_p},{y_p}} {\rm{Dif}}\left( {{x_p},{y_p},{x_0},{y_0}} \right) = \\ {\rm{temp}}\left( {{x_0},{y_0}} \right) - {\rm{temp}}\left( {{x_p},{y_p}} \right),\\ s.t.\left| {{x_p} - {x_0}} \right| + \left| {{y_p} - {y_0}} \right| \le {\rm{dis}}{\rm{.}} \end{array}$
其中dis为设置的Manhattan距离边界。

求解得点(xpmin,ypmin)。

3)(xpmin,ypmin)-(x0-y0)得到方向k,由(xpmin,ypmin)延伸方向k,得到(xQ,yQ)。

4)在(xQ,yQ)附近求解与(xpmin,ypmin)最相似的点。

$\begin{array}{l} \mathop {\min }\limits_{{x_{p2}},{y_{p2}}} {\rm{Dif}}\left( {{x_{p2}},{y_{p2}},{x_{p\min }},{y_{p\min }}} \right) = \\ {\rm{temp}}\left( {{x_{p\min }},{y_{p\min }}} \right) - {\rm{temp}}\left( {{x_{p2}},{y_{p2}}} \right),\\ s.t.\left| {{x_q} - {x_{p2}}} \right| + \left| {{y_q} - {y_{p2}}} \right| \le {\rm{dis2}} \end{array}$
其中dis2为Manhattan距离,表示搜索范围。

求解得点(xQmin,yQmin)。

5)k=(ypmin-yQmin)/(xpmin-xQmin),返回步骤3,更新(xpmin,ypmin)=(xQmin,yQmin),继续计算。计算到边缘线端点时,循环终止。

k个像素点切线方向为(Y(num,k+step)-Y(num,k-step))/(X(num,k+step)-X(num,k-step)),其中step为步长。图3为实拍标准圆,求取圆心点到被测点的连线的斜率,进一步算出角度,将该角度作为标准值。将计算切线与标准值作比较得到结果见图4,计算得到标准差std=1.26499331,即角度精度为1.26°。

图 3 标准圆
图 4 斜率标准值与计算值对比
1.4 匹配算法

在实际实验中,为了削弱噪音的影响,节1.3所述方法的匹配算法还可以进一步改进。

本文尝试了以下几种改进:

1)将算法中的Manhattan距离改为Euclid距离,匹配模板temp由方形变成圆形;

2)匹配时增加精度,进行1/4匹配。原算法中,匹配的最小单位为1个像素。1/4匹配是指在像素点内部进行插值,进一步使得匹配的最小单位为1/4像素。图5中,3个方格代表3个像素点。中间白色像素内A处灰度值为1,B处灰度值为0.75,黑白像素相邻处的灰度值为0.5;黑色像素内的插值方法与此类似。

图 5 1\4匹配图示

3)采用多线匹配法,即同时使用多条线来做匹配,将多条线匹配得到的均值赋给当前点。

4)改变相似度度量方式,将相似度度量方式定义为以像素灰度分布为标准:

$\begin{array}{l} {\rm{Dif}}\left( {{x_p},{y_p},{x_0},{y_0}} \right) = \\ \sum\limits_{\left( {x,y} \right) - \left( {{x_p},{y_p}} \right){\rm{ < dis}}} {P\left( {x,y} \right) - } \sum\limits_{\left( {x,y} \right) - \left( {{x_0},{y_0}} \right){\rm{ < dis}}} {P\left( {x,y} \right).} \end{array}$ (4)

将匹配范围限定在圆周上的点,即该点位于黑白分界线上。

2 实验结果分析

在白墙右侧平放一纸板,使用投影仪投射结构光图案并拍照,得到图6的原始图像。使用节1.4介绍的改进算法计算方向,并将方向用类似于Hash映射的方法直接映射为偏移量。根据深度计算原理由偏移量计算出深度值,图7为深度值的灰度显示图。

图 6 原始图像
图 7 深度值的灰度显示图

由结果可以看出,本文算法可以较好地计算出高起的纸板的深度,但是纸板部分有噪音,不是理想的平台。引入节1.4中介绍的改进方法,平台处的标准差std的比较结果如表1所示(std的单位为偏移像素数)。

表 1 不同匹配算法下的平台处标准差
算法 std
step=100 step=20
整数匹配 0.341 2 1.028
1/4匹配,dis2=2 0.918 9 4.015 9
1/4匹配,dis2=1 0.661 7 2.742 5
5线匹配,dis2=1,嵌套1/4匹配 0.602 1 2.423 3
5线匹配,dis2=1,嵌套整数匹配 0.368 1 1.189 3
以像素灰度分布为标准,Manhattan距离 0.346 6 0.904 2
以像素灰度分布为标准,Euclid距离, N =20 0.543 7 1.459
以像素灰度分布为标准,Euclid距离, N =15 0.373 6 1.006 1
以像素灰度分布为标准,Euclid距离, N =10(该模式的最佳N ) 0.332 0.900 8
以像素灰度分布为标准,Euclid距离, N =5 0.374 2 1.240 3
多线匹配,嵌套以像素灰度分布为标准,Euclid距离,N =10 0.364 8 1.162 7
以像素灰度分布为标准,Euclid距离,匹配范围为圆周上的点,N =20 0.651 8 2.000 8
以像素灰度分布为标准,Euclid距离,匹配范围为圆周上的点,N =15 0.682 6 2.056 7
以像素灰度分布为标准,Euclid距离,匹配范围为圆周上的点,N =10 0.443 3 1.419 1
以像素灰度分布为标准,Euclid距离,匹配范围为圆周上的点,N =5 0.425 5 1.334 4
以像素灰度分布为标准,Euclid距离,匹配范围为圆周上的点,N =3 0.457 6 1.477 2
以像素灰度分布为标准,Euclid距离,匹配范围为圆周上的点,N =4—8 0.348 1 1.021 4

表1可以得出以下结论:

1)步长越长,方差越小,效果越好;

2)搜索范围dis2不宜过大,搜索范围过大有可能加大方差;

3)1/4匹配的效果没有整数匹配的效果好;

4)5线匹配算法会在原有基础上有提升;

5)匹配模板为圆周时,精度比圆形低;

6)模板为圆周时,匹配范围N不是越大越好,而是有一个最适值存在。

在本实验中,以像素灰度分布为标准,采用Euclid距离,取N=10,step=100,平台处的std为0.3320。若匹配范围缩小为圆周上的点,则运算量大大降低,精度损失4.8%,平台处的std为0.3481。该精度满足一般情况下的深度图应用要求。

DepthVH对每个点的进行深度求解时,只要计算出该点方向场就可以映射为深度值。而一般的图像块匹配算法在计算每个像素点的深度时,需要在搜索范围内进行逐点搜索,从中找到最佳匹配点,因此运算量较大。

3 结论

本文提出了一种深度图计算方法DepthVH,通过生成深度信息相关的方向场,利用类似于Hash映射的方法将方向信息直接映射为深度值,实现了深度值的计算。与传统算法相比,该算法大大降低了匹配次数,通过减少计算量降低了深度摄像头成本。采用DepthVH,智能电视只要增加一个红外发射元件,就可以具有自然人机交互功能。下一步将提升该方法的深度计算精度和稳定性。

参考文献
[1] Malassiotis S, Strintzis M G. Real-time hand posture recognition using range data [J]. Image and Vision Computer, 2008, 26: 1027-1037.
[2] CHEN Lulu, WEI Hong, Ferryman J M. A survey of human motion analysis using depth imagery [J]. Pattern Recognition Letters, 2013, 34(15): 1995-2006.
[3] 顾骋, 钱惟贤, 陈钱, 等. 基于双目立体视觉的快速人头检测方法 [J]. 中国激光, 2014, 41(1): 0108001-1-0108001-6. GU Chi, QIAN Weixian, CHEN Qian, et al. Rapid head detection method based on binocular stereo vision [J]. Chinese Journal of Lasers, 2014, 41(1): 0108001-1-0108001-6. (in Chinese).
[4] SUN Xianfang, Rosin P L, Martin R R, et al. Noise analysis and synthesis for 3d laser depth scanners [J]. Graphical Models, 2009, 71(2): 34-48.
[5] XU Jing, XI Ning, ZHANG Chi, et al. Rapid 3D surface profile measurement of industrial parts using two-level structured light patterns [J]. Optics and Lasers in Engineering, 2011, 49(7): 907-914.
[6] 于晓洋, 单鹂娜, 曹沈楠, 等. 结构光时间编码技术进展 [J]. 哈尔滨理工大学学报, 2011, 15(1): 98-102. YU Xiaoyang, SHAN Lina, CAO Shennan, et al. The review of structured light time encoding technologies [J]. Journal of Harbin university of science and technology, 2011, 15(1): 98-102. (in Chinese).
[7] ZHAO Peng, NI Guoqiang. Simultaneous perimeter measurement for 3D object with a binocular stereo vision measurement system [J]. Optics and Lasers in Engineering, 2010, 48(4): 505-511.
[8] ZHAO Peng, WANG Nihong. Precise perimeter measurement for 3D object with a binocular stereo vision measurement system [J]. Optik-International Journal for Light and Electron Optics, 2010, 121(10): 953-957.
[9] Lamine H M, Wilfried W, Zohir D, et al. Analysis and estimation of NEP and DR in CMOS TOF-3D image sensor based on MDSI [J]. Sensors and Actuators A: Physical, 2011, 169(1): 66-73.
[10] Andrea S, Fabrizio L, Gianluca P, et al. A kinect-based natural interface for quadrotor control [J]. Entertainment Computing, 2013, 4(3): 179-186.
[11] Hernández J, Quintanilla A, López L, et al. Detecting objects using color and depth segmentation with kinect sensor [J]. Procedia Technology, 2012, 3: 196-204.
[12] 邓瑞, 周玲玲, 应忍冬. 基于 Kinect 深度信息的手势提取与识别研究 [J]. 计算机应用研究, 2013, 30(4): 1263-1265.DENG Rui, ZHOU Lingling, YING Rendong. Gesture extraction and recognition research base on Kinect depth data [J]. Application Research of Computers, 2013, 30(4): 1263-1265. (in Chinese).
[13] 杨晓敏, 张奇志,周亚丽. 基于 Kinect 深度信息的人体运动跟踪算法 [J]. 北京信息科技大学学报, 2013, 28(1): 33-37. YANG Xiaomin, ZHANG Qizhi, ZHOU Yali. Human motion tracing algorithm based on Kinect depth information [J]. Journal of Beijing Information Science and Technology University, 2013, 28(1): 33-37. (in Chinese).