基于Kinect的人流监测图像采集

2017-09-05 02:03翁胜伟
软件导刊 2017年7期
关键词:图像采集

翁胜伟

摘 要:为实现行人运动目标检测,需要对目标运动场景进行采集,包括彩色信息和深度信息。然而在图像形成和传输过程中,会受到环境、光照等多种因素影响,采集到的信息与实际场景相比存在降质或退化问题。因此,在进行行人运动目标识别分割之前,需要对原始图像进行预处理。介绍了采集原始图像的硬件设备Kinect 2.0传感器;根据深度成像原理,分析了深度图像的预处理算法。

關键词:Kinect传感器;图像采集;深度成像

DOIDOI:10.11907/rjdk.171254

中图分类号:TP317.4

文献标识码:A 文章编号:1672-7800(2017)007-0202-03

0 引言

大型城市人口过度集中已经成为一个公认的社会问题,对一些场所和地区进行人流统计,基于人流统计信息进行决策管理,以合理利用与分配社会公共资源。在展览馆、博物馆、大型商场、飞机场、火车站、地铁站和旅游景区等人流高密集场所,人流数量、滞留人数、人流规律、人数趋势等信息能够帮助决策与调度,有效提高行人的便捷出行。同时,根据人流统计数据,可以提前进行区域限流,防止由于人群密度过高、不容易疏散而引起踩踏等安全隐患或社会动乱,避免人身安全受到威胁。

目前,针对机器视觉的视频人流统计,主要涉及到行人目标的识别、检测和跟踪、计数,有很多相对成熟的算法,但大多算法面临背景和光线的干扰,以及多目标的遮挡和伪目标的误检等问题,高准确率、高鲁棒性的人数统计是研究热点和难点。基于视频的人数统计面临很多技术难题。因此,无论在技术上,还是在学术研究领域,运动目标的分割与检测技术均具有深远的现实意义及研究价值。

1 国内外研究现状

人流统计的智能化、无监督化、自动化是目前发展的重点。国外针对运动跟踪等机器视觉领域有专门的ICCV(International Conference on Computer Vision)、ECCV(European Conference on Computer Vision)、CVPR(IEEE conference on Computer Vision and Pattern Recognition)等顶级国际会议,还有PAMI(IEEE Transaction on Pattern Analysis and Machine Intelligence)、CVIU(Computer Vision and Image Understanding)、IJCV(International Journal on Computer Vision)和PR(Pattern Recognition)等权威期刊[1]。学者在这些会议和期刊上发表的关于视频人数统计的最新进展,具有巨大的参考意义和研究价值。

国内也举办一些机器视觉方面的学术会议。自2002年始,全国智能视觉监控学术会议(Chinese Conference on Intelligent Visual Surveillance,IVS)已成功举办了4届,还有中国机器学习及其应用研讨会(China Workshop on Machine Learning and Applications,MLA)、亚洲计算机视觉会议(Asian Conference on Computer Vision,ACCV)等,为计算机视觉研究者和企业提供了技术交流平台。

2 Kinect软件结构

Kinect 2.0传感器可根据微软公司的Kinect For Windows的NUI库,结合用户开发的算法程序和OpenCV等开源库进行软件设计。Kinect For Windows架构如图1所示。

Kinect传感器把图像数据、深度信息和音频通过USB 3.0接口传输至NUI库,NUI库隐藏了复杂的硬件操作,用户应用程序只需调用NUI API访问,包括彩色图像、深度图像、音频信息和骨骼信息等几种类型数据。使用NUI库获取并处理数据源流程如图2所示。

Sensor代表一个具体的硬件实体,一个应用程序可以调用一个或者一个以上的传感器(默认为1个),随后调用Source,显示数据源的元数据,并为阅读器(Reader)提供获取途径,传感器的深度帧、彩色帧以及音频源等都会提供一种数据源供用户调用。Reader提供获取帧的途径,包括事件机制(触发模型)和轮询机制(“拉”模型),一种数据源可以有多个阅读器(Reader),阅读器也可以被暂停。帧Frame分为Frame References和Frames,Frame References发送帧事件参数,包括获得实际帧使用方法、被引用帧的时间戳等具体信息;Frames提供获取帧数据的途径(建立本地副本或直接访问底层缓冲区),包含诸如帧格式、宽度和高度等帧中元数据。此外,Frames大大减少了获取帧的时间,用户可以根据需要得到不同类型帧的数据Data[2]。

2.1 Kinect深度成像原理

Kinect传感器的深度成像,是利用一个红外发生器在视场区域内发射近红外光谱,另外一个深度(红外)摄像头接收发生变化的红外光,红外光谱的投影区域和红外接收区域重叠,两者共同作用形成深度图像。其中,红外深度成像大致分为两类[3]:

(1)基于光飞行时间(Time of Flight,ToF)原理。光飞行时间技术通过发射红外光和测量红外光脉冲之间的时间差来计算深度信息。Mesa Imaging SwissRanger 4000和PMD Technologies CamCube 2.0价格不菲,而本文使用的Kinect 2.0传感器也应用了ToF技术,价格与它们相比具有非常大的优势[4]。

(2)基于结构光的测量。结构光测量基于光编码技术,将具有点、线、面结构的红外光结构投射到场景中。由于红外线在接触到物体表面时会产生变形,通过测量其形变程度来计算场景深度信息。使用结构光测量方案有PrimeSensor公司的Light Coding技术[5]。结构光测量法与传统的三角测量法比较,能够快速获得深度信息。endprint

在Kinect 1.0传感器上,通过体感侦测装置PrimeSensor和感测芯片PS 1080,使用基于近红外光(激光散斑)的Light Coding技术。Kinect 1.0传感器使用与PrimeSense的SoC相连的标准CMOS影像传感器,从场景中读取经过编码的光线,并执行复杂的并行运算逻辑,对编码光线进行解码,由此获得一个场景的深度影像。Light Coding技术利用近红外光(随机激光散斑)对场景进行编码。由于空间中任意两点的散斑图案不同,所以通过测量场景中的散斑图案就可得到场景的深度信息[6]。

Kinect 1.0传感器使用的激光散斑方案不受环境光影响,然而Kinect 1.0传感器测量某点的深度,需要知道邻域内各点深度信息。Kinect 1.0传感器测量诸如细头发对象时,由于所测头发点周围没有点群,因此无法获得深度信息,而Kinect 2.0传感器解决了这个问题。

Kinect 2.0传感器使用ToF原理,如图3所示。Kinect 2.0传感器的红外发生器发射强度是随空间变化而变化的正弦波信号,通过深度摄像头获得正弦信号的发射和接收强度差和相位差来计算深度,公式如下:

式(1)中,Depth为红外摄像头与场景中物体的距离,即所要的深度信息,c为光在真空中传播的速度,Φ表示发射和接收的近红外正弦信号的相位延迟,f为正弦波的调制频率。

利用ToF原理进行相位差Φ的测量如图4(a)所示。ToF利用连续波(CW)强度调制(Continuous Wave Intensity Modulation)方法[7],近红外信号发生器gill[5]发射强度调制、周期性的正弦信号,在传播方向上碰到物体后发生反射,在深度(红外)摄像头接收器的每个像素上接收到反射信号sill后,根据基准信号gref对反射信号进行采样,每个像素点的采样公式(积分测强度)如式(2)所示。

在实际的连续波(CW)强度调制采样时,在一个时间周期内,每个像素点进行4次采样,且采样的相位各相差90°。如图4(b)所示,C1、C2、C3、C4代表4次采样,且在光源发射的同时启动第一次采样C1,在C1采样阶段,若接收到反射光,则在传感器像素点上采集电荷,采样阶段积累的电荷记为Q1;同样,C2采样阶段和C1采样阶段相位相差90°,采样得到的电荷记为Q2,以此类推,共进行4次采样,得到相位差Φ的测量公式[8]如式(3)所示。

式(3)中,Qi=C[gilli,grefi](i=1,2,3,4),gilli(t)=cos(2πft),对于f恒定,通常取值范圍为10-100MHz,本文所使用的Kinect 2.0使用的光源平均频率为80Hz;grefi(t)=gilli(t+τi),τi为相位偏移量,τi=i×π/2,i=0,1,2,3。

从式(3)可知,由于(Q3-Q4)和(Q1-Q2)的作用,消除了诸如环境光等常量偏移的影响,同时两者的商也减小了由于电路放大和衰减或反射的强度等原因引起的增益影响[9]。

综上所述,结合式(1)至式(3),通过计算相位差,就能够计算出物体上的某一点距离红外摄像头的距离。

2.2 Kinect深度图像和彩色图像采集

2.2.1 深度图像采集

由Kinect 2.0传感器软件架构可知,利用NUI Library获得深度数据帧的流程如图5所示。

首先,要获取深度数据源,需要先打开一个Kinect 2.0传感器硬件实体,根据NUI Library,该硬件实体类型为IKinectSensor,定义变量mykinectsensor,并利用GetDefaultKinectSensor(&mykinectsensor)函数对其进行赋值,再调用mykinectsensor→open()即可获取一个Kinect 2.0传感器实体。随后需要操作深度数据源,深度数据源类型为IDepthFrameSource,因此定义变量depthsource,通过调用get_DepthFrameSource(&depthsource)成员函数对其赋值,即可获得深度数据源。另外,需要获取深度图像的分辨率,利用IFrameDescription类型和get_FrameDescription()函数获取深度图像分辨率。设置好深度数据源depthsource和获取分辨率后,需要定义一个类型为IDepthFrameReader的变量来调用Reader,并利用Source的成员函数depthsource→OpenReader(&depthreader)来打开Reader。成功打开Reader后,就可以调用depthre ader→AcquireLatestFrame(&depthframe)成员函数来采集最新一帧深度数据。若调用AcquireLatestFrame()返回的值为“S_OK”,说明成功获取到最新一帧深度数据,将其保存在depthframe变量中,depthframe的类型为IDepthFrame。随后,对获得深度数据帧进行相关处理。当该数据帧处理完毕后,调用depthrame→Release()对该深度数据帧进行释放。根据需要,再次调用AcquireLatestFrame(&depthframe)函数获取新的一帧深度数据进行处理。根据以上流程获取的深度图如图6(a)所示。

2.2.2 彩色图像采集

根据NUI Library和数据流的获取流程,读取彩色图像流程和读取深度图像流程是一样的,区别在于数据输出的处理上。Kinect 2.0使用的图像格式是YUY2,通常需要使用转换函数CopyConvertedFrameDataToArray()将彩色帧转化成RGB格式。获取的彩色图像如图6(b)所示。

除了使用NUI Library,本文结合使用OpenNI(开放式自然交互)库函数,将Kinect传感器的数据流操作包含在OpenNI的驱动中。这样做的好处是编程时可以省去直接对Kinect传感器的硬件操作,所有数据流获取只通过一个API进行。endprint

2.3 深度图像预处理

深度成像利用近红外光的发射和反射时间差来成像。所以,当Kinect视场内存在吸光物体时,接收红外脉冲的深度摄像头无法获取该物体区域的近红外光,成像时该区域就会产生空洞。或者测量范围超过Kinect的视场时,导致Kinect的深度摄像头在接收红外光时,容易出现物体边缘的深度值为0,从而造成场景深度图像边缘和行人运动目标边缘产生一些毛刺。

深度图像中的空洞区域和边缘毛刺都会对行人目标头部区域特征提取产生很大干扰。在进行特征提取之前,消除空洞区域和毛刺的深度图像预处理是必不可少的工作。

3 结语

本文对Kinect 2.0传感器进行了介绍,对基于光飞行时间(ToF)的深度图像成像原理进行了分析,根据Kinect NUI Library分析Kinect 2.0傳感器的彩色图像和深度图像获取流程。根据深度成像特点,对原始深度数据帧进行中值滤波、闭运算和开运算等预处理分析,为行人运动目标的特征识别打下坚实基础。

参考文献:

[1]CHEN T H.An automatic bi-directional passing-people counting method based on color image processing[C].IEEE,2003 International Carnahan Conference on Security Technology,2003:200-207.

[2]吴国斌.KINECT人机交互开发实践[M].北京:人民邮电出版社,2013.

[3]黄露丹,严利民.基于Kinect深度数据的人物检测[J].计算机技术与发展,2013(4):119-121.

[4]SARBOLANDI H,LEFLOCH D,KOLB A.Kinect range sensing:structured-light versus time-of-flight kinect[J].Computer Vision & Image Understanding,2015.

[5]L LI.Time-of-flight camera-an introduction[Z].Texas Instruments-Technical White Paper.

[6]CORTI A,GIANCOLA S,MAINETTI G,et al.A metrological characterization of the Kinect V2 time-of-flight camera[J].Robotics & Autonomous Systems,2015,75(8):584-594.

[7]杨召君.基于视频人数统计与跟踪改进算法的研究与实现[D].南京: 南京邮电大学,2013.

[8]郭秀杰.基于Kinect的人流量统计系统研究[D].重庆: 重庆大学,2014.

[9]吴晓阳.基于OpenCV的运动目标检测与跟踪[D].杭州: 浙江大学,2008.endprint

猜你喜欢
图像采集
基于FPGA+DSP实时图像采集处理系统设计
基于LabVIEW和USB摄像头的图像采集与处理
交通肇事车辆快速视觉定位系统的设计与实现