2. 清华大学 自动化系, 北京 100084
2. Department of Automation, Tsinghua University, Beijing 100084, China
深度图像是指包含了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。
通过平面几何的理论推导,可得偏移量与深度的关系如下:
$\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,当深度值发生变化则结构光纹样产生偏移。若结构光纹样是均匀变化的向量场,则在深度值发生变化时该处的向量场发生方向变化。
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)为结构光图像P第i行第j列的像素点的灰度值。解得:
$f\left( x \right) = a{x^2}{\rm{ + }}s{\rm{.}}$ | (2) |
设图像周期为c。考虑到条纹斜率不能过大,取边界斜率为60°,则由df(x)/dx=tan60°解得:
$a = \tan \left( {{{60}^ \circ }} \right)/c$ | (3) |
同时考虑到结构光图像边缘处不能重合,取s=4,得到一个周期内结构光图像如图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个点的x和y坐标值。
匹配延伸算法如下:
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}$ |
求解得点(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}$ |
求解得点(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°。
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;黑色像素内的插值方法与此类似。
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为深度值的灰度显示图。
由结果可以看出,本文算法可以较好地计算出高起的纸板的深度,但是纸板部分有噪音,不是理想的平台。引入节1.4中介绍的改进方法,平台处的标准差std的比较结果如表1所示(std的单位为偏移像素数)。
算法 | 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). |