一种确定视频图像中被测对象间位置关系的方法及装置
技术领域
本申请涉及三维视觉技术领域,尤其涉及一种确定视频图像中被测对象间位置关系的方法及装置。
背景技术
在安防监控等领域,一般可以通过摄像头实时拍摄场景画面,从而检测、确定场景中是否有异常行为发生。
目前,具体的实现方式通常是在视频画面中选择关注的区域,例如,若要监控自动取款机,则在视频图像中选择自动取款机的区域,然后实时检测该区域内的像素变化,以像素的变化为依据,判断该区域是否有人入侵或者发生其他特定行为,最终得到统计结果。
采用上述方式,由于在视频图像中选择被测对象的所在区域并不能真实的反映该被测对象的位置,无法准确判断多个被测对象的位置关系。因此,经常会产生很多的误判情况,也即,视频图像中被测对象间的位置关系与真实场景中的位置关系不符合,检测结果非常不准确。
现有技术不足在于:
采用现有方法经常导致误判、检测精度较低。
发明内容
本申请实施例提出了一种确定视频图像中被测对象间位置关系的方法及装置,以解决现有技术中经常导致误判、检测精度较低的技术问题。
本申请实施例提供了一种确定视频图像中被测对象间位置关系的方法,包括如下步骤:
检测视频图像中的第一被测对象和第二被测对象;
确定所述第一被测对象和所述第二被测对象在视频图像中的坐标;
将所述第一被测对象和所述第二被测对象在所述视频图像中的二维坐标转换为物理世界中的三维坐标;
根据所述第一被测对象和所述第二被测对象的三维坐标,确定所述第一被测对象和所述第二被测对象之间的位置关系。
本申请实施例提供了一种确定视频图像中被测对象间位置关系的装置,包括:
检测模块,用于检测视频图像中的第一被测对象和第二被测对象;
第一确定模块,用于确定所述第一被测对象和所述第二被测对象在视频图像中的坐标;
转换模块,用于将所述第一被测对象和所述第二被测对象在所述视频图像中的二维坐标转换为物理世界中的三维坐标;
第二确定模块,用于根据所述第一被测对象和所述第二被测对象的三维坐标,确定所述第一被测对象和所述第二被测对象之间的位置关系。
有益效果如下:
本申请实施例所提供的确定视频图像中被测对象间位置关系的方法及装置,在确定视频图像中检测到的第一被测对象和第二被测对象的坐标后,将所述第一被测对象和所述第二被测对象在视频图像中的二维坐标转换为物理世界中的三维坐标,并根据所述三维坐标来确定所述第一被测对象和所述第二被测对象之间的位置关系,由于本申请实施例中将被测对象的坐标由视频图像转换至真实的物理世界,相比现有技术新增加了一维方向,也即,被测对象的深度信息(z轴),相当于将视频画面中的第一被测对象和第二被测对象还原到了真实的物理世界,这种情况下进行监测的准确度和精度更高,避免了现有技术中经常出现误判的问题。
附图说明
下面将参照附图描述本申请的具体实施例,其中:
图1示出了本申请实施例中确定视频图像中被测对象间位置关系的方法实施的流程示意图;
图2示出了本申请实施例中image坐标系的示意图;
图3示出了本申请实施例中camera坐标系的示意图;
图4示出了本申请实施例中floor坐标系的示意图;
图5示出了本申请实施例中Step Counting Mat的场景示意图;
图6示出了本申请实施例中Step Counting Mat的投影示意图;
图7示出了本申请实施例中Step Counting Mat的效果示意图;
图8示出了本申请实施例中Touch Counting Wall的场景示意图;
图9示出了本申请实施例中Touch Counting Wall的投影示意图;
图10示出了本申请实施例中Touch Counting Wall的效果示意图;
图11示出了本申请实施例中Pass Counting Door的场景示意图;
图12示出了本申请实施例中Pass Counting Door的投影示意图;
图13示出了本申请实施例中People Counting Queue的场景示意图;
图14示出了本申请实施例中确定视频图像中被测对象间位置关系的装置的结构示意图。
具体实施方式
为了使本申请的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。
针对现有技术的不足,本申请实施例提出了一种确定视频图像中被测对象间位置关系的方法及装置,下面进行说明。
图1示出了本申请实施例中确定视频图像中被测对象间位置关系的方法实施的流程示意图,如图所示,所述确定视频图像中被测对象间位置关系的方法可以包括如下步骤:
步骤101、检测视频图像中的第一被测对象和第二被测对象;
步骤102、确定所述第一被测对象和所述第二被测对象在所述视频图像中的坐标;
步骤103、将所述第一被测对象和所述第二被测对象在所述视频图像中的二维坐标转换为物理世界中的三维坐标;
步骤104、根据所述第一被测对象和所述第二被测对象的三维坐标,确定所述第一被测对象和所述第二被测对象之间的位置关系。
现有技术中通过摄像头监控到的视频图像均为二维图片,并不能真实反映现实的物理世界。
当视频画面中出现被测对象时,系统可以自动检测出视频图像中的被测对象,并得到被测对象在视频图像中的坐标位置。由于被测对象一般是有一定体积大小的事物,因此,在具体实施时,可以将每个被测对象抽象为位于被测对象重心位置的一个质点,以减少计算量或简化操作。
其中,被测对象可以是视频图像中出现的任一事物,可以是一个或者多个,本申请对此不作限制。另外,检测被测对象可以基于现有技术中的人员检测和追踪技术来实现,本申请在此不做赘述。
由于将视频图像中的各像素的坐标位置转换到物理世界中的三维坐标后,增加了深度信息,可以还原出真实世界中各物体之间的位置关系,进而可以得到准确的检测结果。
在本申请实施例中,基于深度信息结合数学方法可以建立像素和物理世界位置的对应关系。其中,深度信息可以来自于现有技术中通过结构光(Structured light)、双目、飞行时间(time of flight)等技术实现的深度传感器(depth sensor)。例如:通过结构光实现的深度传感器,是采用一个投影仪来建立光模式,并有一个摄像头用于探测结果;飞行时间实现方式与结构光类似,飞行时间摄像头包括一个图像传感器、一只镜片和一个有源发光源,摄像头根据投射光从光源到投影仪再回到图像传感器的时间,得出距离(也即深度信息或深度值)。
现有技术中在视频画面中检测到的被测对象,仅仅是二维平面的坐标,并不能真实反映现实世界中所述被测对象的位置。其次,现有技术在不准确标注的基础上进行统计,统计的依据是像素变化,而像素变化不一定是被测对象引起的,也可能是由于光线或环境变化导致的像素变化,因此统计结果并不准确。本申请实施例增加了景深(或者称深度数据),通过使用RGBD数据还原了真实世界各事物的几何结构,可以准确的计算出被测对象的真实所在位置,进而准确的确定出被测对象之间的位置关系,排除真实区域前面或后面的物体导致误判的情况,确保检测得到的结果更加精准。
实施中,所述将所述视频图像中的二维坐标转换为物理世界中的三维坐标,具体可以为:
根据所述视频图像image坐标系与所述摄像头camera坐标系的转换关系、以及所述camera坐标系与所述地面floor坐标系的转换关系,将所述image坐标系的坐标转换为所述floor坐标系的坐标;
其中,所述image坐标系为预先建立的以所述视频图像的顶点为原点、以与所述顶点相邻的两边为坐标轴的坐标系;所述camera坐标系为预先建立的以camera所在位置为原点、与所述视频画面水平方向平行的方向为x轴、与所述视频画面竖直方向平行的方向为y轴、光轴方向为z轴的坐标系;所述floor坐标系为预先建立的以物理地面为XoY平面、以所述camera坐标系原点到地面所在平面XoY的投影为原点的坐标系。
本申请实施例预先建立了三种坐标系,并预先得到所述image坐标系与所述camera坐标系、所述camera坐标系与所述floor坐标系之间的转换关系,从而可以通过坐标系的转换,将视频图像中像素的坐标值转换为真实世界中的实际坐标值,由于视频图像是二维平面的,而真实的物理世界是三维空间的,增加了深度信息(也即,物体距离摄像头的远近),因此,通过这种坐标转换后得到的坐标更加符合真实场景。
本申请实施例中,仅是提供了一种坐标转换的方式,在具体实施时还可以采用其他的转换方式,例如建立其他类型的坐标系进行转换等。从实践角度来看,采用本申请实施例所提供的坐标转换方式,得到的数据更加准确、符合真实场景。
另外,本申请实施例是通过camera坐标系作为中转,将image坐标系转换为camera坐标系后,再由camera坐标系转换为floor坐标系,在具体实施时,也可以直接将image坐标系转换为floor坐标系,实现原理与本申请实施例相类似,本领域技术人员只需要进行简单的数据计算就可以实现。很显然,这种方式只是对本申请实施例所提供的公式进行简单计算、叠加,也应该在本申请的保护范围之内。
实施中,所述image坐标系转换为所述camera坐标系,具体可以为:
确定所述image坐标系的像素位置,所述像素位置=(ximage,yimage);
根据所述像素位置确定所述像素位置的深度值depth_value;
根据以下转换公式确定所述image坐标系与所述camera坐标系的转换关系:
xcamera=camera_param.xzFactor*(ximage/camera_param.resolution_X-0.5)*depth_value;
ycanera=camera_param.yzFactor*(0.5-yimage/camera_param.resolution_Y)*depth_value;
zcamera=depth_value;
其中,xcamera、ycamera zcamera分别为所述camera坐标系中x、y、z轴的坐标值,camera_param.resolution_X、camera_param.resolution_Y分别为所述视频画面水平方向、垂直方向的像素数,camera_param.xzFactor、camera_param.yzFactor分别为修正因子。
本申请实施例中,可以先确定image坐标系中每个像素点的位置(也即,坐标值),由于image坐标系为二维坐标,像素位置=(ximage,yimage)。在确定像素位置后,可以根据现有的深度传感器、深度摄像头等自带功能得到该像素位置的深度值depth_value,也即,该像素位置到摄像头的距离。最终,可以根据转换公式将所述image坐标系的(ximage,yimage)转换为所述camera坐标系的(xcamera,ycamera,zcamera),转换公式可以为:
xcamera=camera_param.xzFactor*(ximage/camera_param.resolution_X-0.5)*depth_value;
ycamera=camera_param.yzFactor*(0.5-yimage/camera_param.resolution_Y)*depth_value;
zcamera=depth_value;
其中,camera_param.resolution_X、camera_param.resolution_Y分别为所述视频画面水平方向、垂直方向的像素数(或者分辨率),例如640*480的视频画面,camera_param.resolution_X为640、camera_param.resolution_Y为480。
通过(Ximage/camera_param.resolution_X-0.5)可以计算得到水平方向上偏离画面中心点的距离,再与深度值depth_value相乘;
通过(0.5-yimage/camera_param.resolution_Y)可以计算得到垂直方向上偏离画面中心点的距离,再与深度值depth_value相乘;
最后,由于各个摄像机或摄像头在出厂时内部结构会导致微小的差别,本申请实施例可以通过camera_param.xzFactor、camera_param.yzFactor对上述乘积的结果进行修正。
在具体实施中,可能由于修正因子等导致的不同,上述公式中0.5可能也会适量调整为其他数值,例如:0.3等,应当理解,本领域技术人员的这种变形、修改均应当包括在本申请的保护范围之内。
实施中,所述camera坐标系转换为所述floor坐标系,具体可以为:
确定至少包括camera坐标系中三点坐标的第一矩阵,以及至少包括floor坐标系中三点坐标的第二矩阵;所述camera坐标系中点的坐标与所述floor坐标系中点的坐标为物理世界中同一点在camera坐标系和floor坐标系下的表示;
将所述第一矩阵和所述第二矩阵分别减去各自矩阵内坐标的平均值,得到S矩阵和D矩阵;
对所述S矩阵与所述D矩阵的转置的乘积做奇异值分解,得到S*Dt=u*w*vt:
根据以下转换公式确定所述camera坐标系与所述floor坐标系的转换关系:
R=v*C*ut:
其中,R、T分别为camera坐标系到floor坐标系的旋转矩阵。
具体实施时,物理世界中某个点的位置在camera坐标系下的坐标表示与在floor坐标系下的坐标表示可能是不相同,本申请实施例可以以三轴的基座标(也即单位向量)为例进行上述计算。例如:S矩阵可以为camera坐标系的三个单位向量在camera坐标系下的坐标减去均值后的结果,D矩阵可以为floor坐标系的三个单位向量在camera坐标系下的坐标减去均值后的结果。
对S矩阵和D矩阵的转置进行乘积,也即H=S*Dt;
再利用现有技术中的奇异值分解技术,对H做分解:H=u*w*vt;
在这里,本申请实施例可以得到一个矩阵C,
最终,可以得到camera坐标系到floor坐标系的旋转矩阵R、T分别可以为:
R=v*C*ut;
相应的,通过公式计算可以得到floor坐标系到camera坐标系的旋转矩阵Rt、Tt,分别为:
Rt=R-1:
Tt=-Rt*T。
本申请实施例既得到了image坐标系和camera坐标系的转换关系、又得到了camera坐标系和floor坐标系的转换关系,因此,可以计算视频中任意像素在真实物理世界(floor坐标系)中的坐标;也可以将真实世界中任意一点计算出该点在视频(image坐标系)中的位置。
实施中,所述第一被测对象可以为人,所述第二被测对象可以为在所述视频图像中预先选定的监测区域。
本申请实施例中,用户可以首先在视频图像中通过鼠标点击或其他方式,选定一块监测区域。此时,系统自动根据选定的监测区域确定所述监测区域在视频图像中的坐标位置。
现有技术在视频画面中选择区域,选择的区域和真实物理世界的区域没有完全对应,本申请实施例通过对深度数据的解析,建立了像素和物理世界位置的对应关系,可以实现准确的标注。
其次,现有技术在不准确标注的基础上进行统计,统计的依据是像素变化,而像素变化不一定是物体或人进入区域产生的,也可能由于该区域被遮挡,或者该区域后面的像素发生变化,还可能是由于光线或环境变化导致的像素变化,因此统计结果并不准确。本申请实施例增加了景深(或者称深度数据),通过使用RGBD数据还原了真实世界各事物的几何结构,可以准确的计算出视频图像中出现的人和用户真正要选择的监测区域之间的空间位置关系,排除真实场景中监测区域前面或后面的物体导致误判的情况,从而确保检测得到的结果更加精准,彻底解决了错误检测和统计的问题。
实施中,所述根据所述第一被测对象与所述第二被测对象的三维坐标,确定所述第一被测对象与所述第二被测对象之间的位置关系,具体可以为:
将所述人的坐标投影到所述floor坐标系的XoY平面;
计算以所述人的投影位置为起点的射线与所述监测区域的交点个数;
根据所述交点个数确定所述人是否在所述监测区域内。
在具体实施时,可以在视频画面中选定一块监测区域,如果该监测区域是平贴于地面的,例如:一块地毯的所在位置、在地面设定的圆圈/多边形等等。
本申请实施例可以将人的坐标投影到所述floor坐标系的XoY平面,也即将人投影到地面上,如果以人为起点、向任意方向无穷远处发射的射线,与该监测区域交点个数为奇数,则认为这个人在所述监测区域内,如果交点个数为偶数,则说明这个人在所述监测区域外部。
通过本申请实施例所提供的方案,可以很精确地计算出人与监测区域在真实场景中的位置关系,从而可以更好的实时监测是否有被测对象进入监测区域,还可以进一步统计出一段时间内一共有多少个人在所述监测区域内。
实施中,所述根据所述第一被测对象与所述第二被测对象的三维坐标,确定所述第一被测对象与所述第二被测对象的位置关系,具体可以为:
将所述人和所述监测区域的坐标均投影到所述floor坐标系的XoY平面;
若所述人的投影与所述监测区域的投影有交集,则确定所述监测区域被触摸。
在具体实施中,监测区域可以是垂直于地面的一块区域,例如:墙壁、货架等等。
本申请实施例可以将人和监测区域的坐标均投影到floor坐标系的XoY平面,也即投影到真实场景的地面。其中,由于不同被测对象的体积、形状不同,在具体实施时,人的投影可能是一块不规则形状的区域;由于监测区域是垂直于地面的一块区域,监测区域的投影可能是一条直线。
本申请实施例通过比较人的投影(不规则形状的区域)与监测区域的投影(一条直线)是否有交集,来判断人是否与监测区域相碰触。如果二者有交集,则说明人触摸到了所述监测区域;如果没有交集,则说明监测区域没有被触摸。
在具体实施时,为了减少监测、计算的工作量,还可以仅将视频图像内导致监测区域的像素发生变化的人与监测区域进行上述操作。例如:仅有两个人站立在超市的货架前,也即,两个人所在位置的像素在视频图像中发生了变化,那么本申请实施例可以计算这两个人到地面的投影与货架的投影之间的位置关系,对于超市内其他位置的人员则不做上述计算操作。
在现有技术中,对于上述举例的情况,可能导致监测结果为这两个人均与货架相碰触;而本申请实施例通过还原出真实场景的坐标后再进行计算,如果其中一个人只是站立在货架前但并没有拿货架上的物品,则这个人的投影与货架的投影没有交集,监测结果为没有与货架碰触;如果另一个人站立在货架前并伸出手去拿货架上的物品,则这个人的投影与货架的投影就存在了交集,此时,监测结果则为货架被触碰。
通过对比可以看出,本申请实施例可以避免现有技术的误判情况,确保监测结果更为准确。
在具体实施中,还有部分场景在确定人和监测区域的位置关系时,除了要比较人的投影与监测区域的投影是否有交集,还需要判断人的高度和监测区域的高度是否有重合部分,也即,XoY平面投影有交集是监测区域被人触摸的必要条件。例如:监测区域是墙面上的一扇窗户,当人触摸到窗户所在墙面时,虽然人在XoY平面的投影和窗户在XoY平面的投影有交集,但人并没有触摸窗户、只是触摸到墙面,对于这种场景,本申请实施例还可以进一步判断人的高度与窗户的高度是否有重合,如果二者高度有交集/重合,则可以确定人触摸到了窗户。
实施中,所述根据所述第一被测对象与所述第二被测对象的三维坐标,确定所述第一被测对象与所述第二被测对象的位置关系,具体可以为:
将所述人和所述监测区域的坐标均投影到所述floor坐标系的XoY平面;其中,所述监测区域的投影线段所在直线为Ax+By+C=0;
确定位于所述监测区域的投影线段两端且与所述投影线段垂直的两条直线A1X+B1y+C1=0和A2x+B2y+C2=0;
若所述人的投影坐标变化为且同时满足以下条件时,则确定所述人穿过所述监测区域:
Ax1+By1+C<0;
Ax2+By2+C>0;
(A1x1+B1y1+C1)*(A2x1+B2y1+C2)<0;
(A1x2+B1y2+C1)*(A2x2+B2y2+C2)<0。
在具体实施时,监测区域垂直于地面时,还可能是门、窗、栏杆等可以穿越过去的区域。此时,本申请实施例可以通过将人和监测区域均投影到所述floor坐标系的XoY平面(也即真实场景中的地面),判断人的投影在不同时间发生的变化与监测区域的投影之间的位置关系。
以一扇门为例,门的投影为一段线段,本申请实施例可以首先得到人在第一时刻的投影、以及人在第二时刻的投影,然后分别将两个时刻的投影坐标代入到判断门的投影所在的直线方程、位于门的两端且垂直于门的直线方程,来判断这个人是否穿过了这扇门。
除此之外,还可以采用其他方式进行判断。例如:判断两个时刻的人的投影之间的连线是否与监测区域的投影(线段)相交,如果相交,则说明这个人穿过了这扇门,否则就没有穿过这扇门。
实施中,所述第一被测对象和/或所述第二被测对象为多个,所述根据所述第一被测对象和所述第二被测对象的三维坐标,确定所述第一被测对象和所述第二被测对象之间的位置关系,具体可以为:
根据所述多个第一被测对象和/或所述第二被测对象的三维坐标,拟合出将所述多个第一被测对象和/或所述第二被测对象连接起来的空间曲线;
根据所述空间曲线确定所述多个第一被测对象和/或所述第二被测对象的队列关系。
在具体实施时,可以检测到多个第一被测对象和/或第二被测对象,将这多个第一被测对象和/或第二被测对象的坐标依次连接起来,可以得到一条空间曲线,利用这条空间曲线则可以确定出这多个第一被测对象和/或第二被测对象的队列关系。
例如:在超市结账时,一条收银台通道内有1个人正在结账、3个人在排队等待,本申请实施例则可以将这四个人拟合出一条直线。对每个收银通道均拟合出队列的直线后,则可以看出每个收银通道的排队人数,还可以进一步估算出每个队列所需要的等待时间等等。
上述举例,如果现有技术进行监测,当视频画面内队列中后面的人遮挡住前面的人时,则系统监测不到前面的那个人,导致监测出的人数少于实际人数;而采用本申请实施例所提供的方案,由于采用坐标系转换后得到真实世界的三维坐标,其中包括了深度信息,也即z轴,虽然有人被遮挡,但是根据深度信息即可还原现实场景,准确的监测出实际的人数,避免了现有技术中监测失误的情况,准确性更高。
综上可以看出,本申请实施例可以理解为是将人的肢体在三维空间中构成一个点云,判断这个点云和设定的热点区域hotspot点云之间是否在真实的物理世界有交集。本申请实施例利用坐标转换可以实现图像像素到物理世界坐标的转换,从而可以实现各种热点的统计。
在具体实施时,由于在不同场景下人和监测区域是否接触/碰触可能会有所不同,因此,判断方式还可能有区别,本领域技术人员可以根据实际需要来确定人和监测区域的位置关系,应当认为,本领域技术人员确定人和监测区域的位置关系的其他判断方式也在本申请的保护范围之内。
为了便于本申请的实施,下面以实例进行说明。
本申请实施例首先定义了三种坐标系,具体为:image坐标系、camera坐标系、floor坐标系。其中:
1、image坐标系,表示摄像头监控的视频画面中各像素位置。
图2示出了本申请实施例中image坐标系的示意图,如图所示,以视频画面左上角的顶点为原点,以与所述顶点相邻的两条边为坐标轴,也即上边可以为x轴、左边可以为y轴,画面内任意一点的坐标值可以为P(x0,y0)。
本申请实施例中通过image坐标系的像素位置,可以得到对应位置的深度值。例如,如图2所示,可以直接从传感器中输出P(x0,y0)处的深度值,也即,实际场景中P(x0,y0)位置距离摄像机镜头的距离信息。
2,camera坐标系,是以摄像头所在位置(或者camera焦点)为原点,建立三维空间直角坐标系。
图3示出了本申请实施例中camera坐标系的示意图,如图所示,假设深度传感器(sensor,或摄像头)设置于墙角上方的某个位置,与画面水平方向平行的方向为x轴、与画面垂直方向平行的方向为y轴、光轴方向为z轴(也可以理解为垂直于摄像头镜面的方向)。
具体的,实现image坐标系像素位置到camera坐标系三维空间位置坐标的转换,可以有如下方式:
1)可以通过现有技术中sensor提供的API来实现。
例如:
static Status convert WorldToDepth(const VideoStream&depthStream,floatworldX,float worldY,float worldZ,int*pDepthX,int*pDepthY,DepthPixel*pDepthZ);
static Status convertDepthToWorld(const VideoStream&depthStream,intdepthX,int depthY,DepthPixel depthZ,float*pWorldX,float*pWorldY,float*pWorldZ);
通过上述函数就可以实现camera坐标系和image坐标系的相互转换,对于具体的函数实现内容,本申请在此不做赘述。
2)对于没有开放坐标转换API的sensor,或者,已经开放API但是希望加速转换过程的情况,也可以由本领域技术人员通过自行开发实现。
实现image坐标和camera坐标转换的原理为:假设camera坐标系中空间任意一点的坐标(x,y,z)相对于原点的位置关系,反映在image坐标系中pixel相对于原点的位置关系,近似线性。设定z值等于对应位置pixel处的深度,即,线性变换的系数为1。同时,sensor存在一组内参,确定了在这样的设定条件下,x方向和y方向线性变换的系数。
本申请实施例给出了一种具体的转换方式,具体如下:
image坐标系到camera坐标系转换公式:
xcamera=camera_param.xzFactor*(ximage/camera_param.resolution_X-0.5)*depth_value;
ycamera=camera_param.yzFactor*(0.5-yimage/camera_param.resolution_Y)*depth_value;
zcamera=depth_value;
camera坐标系到image坐标系转换公式:
ximage=(xcamera/(depth_value*camera_param.xzFactor)+0.5)*camera_param.resolution_X;
yimage=-(ycamera/(depth_value*camera_param.yzFactor)-0.5)*camera_param.resolution_Y;
depth_value=zcamera;
其中,camera_param.resolution_x表示视频画面在水平方向的数值,camera_param.resolution_Y表示视频画面在垂直方向的数值,假设视频画面是640*480,那么camera_param.resolution_X为640、camera_param.resolution_Y为480。camera_param.xzFactor和camera_param.yzFactor为用于修正数据的参数,一般取决于相机出厂后相机本身的物理结构。
对于不同的深度传感器(depth sensor),其中的camera_param.resolution_x、camera_param.resolution_Y、camera_param.xzFactor、camera_param.yzFactor可以是不同的值,但坐标转换公式可以是一致的。
3、floor坐标系,是以真实物理世界的地面为XoY平面,camera坐标系原点到XoY平面的投影为原点,建立的平面直角坐标系,图4示出了本申请实施例中floor坐标系的示意图,原点O为sensor在XoY平面的投影。
在具体实施中,建立XoY平面可以采用现有技术中的随机抽样一致性(RANSAC,Random Sample Consensus)算法。在视频中使用RANSAC算法选择点拟合地面,结合惯性测量元件(IMU,Inertial Measurement Unit)信息,得到真实物理世界的地面在camera坐标系的平面方程参数,此平面即为floor坐标系的XoY平面。
camera坐标系原点到floor坐标系XoY平面的投影为floor坐标系的原点,camera坐标系x正方向单位向量为(1,0,0)在floor坐标系XoY平面投影为floor坐标系x正方向,floor坐标系z轴正方向为XoY平面的法向量,floor坐标系y轴正方向为x正方向单位向量和z正方向单位向量的向量积。
至此,可以得到floor(1,0,0)、floor(0,1,0)、floor(0,0,1)在camera坐标系下的表达,而这3个floor坐标系下的单位向量分别与camera坐标系下的camera(1,0,0)、camera(0,1,0)、camera(0,0,1)存在一定的对应关系。以此为依据,可以计算出camera坐标系和floor坐标系的坐标转换关系,也即旋转矩阵R和T,方法如下:
设S(source,源)、D(destination,目的)分别表示camera坐标系和floor坐标系的单位向量(或者称为基座标)在camera坐标系下的坐标减去各自均值后的结果,下面进行详细说明。
空间中任意一点在camera坐标系和floor坐标系下有两组不同的坐标表示,假设空间中有m个点(m≥3),且不在同一条直线上。这些点在camera坐标系和floor坐标系下的坐标分别为A1、A2、...Am,B1、B2、...Bm。其中,Ai、Bi表示同一个点在不同坐标系下的称谓。在camera坐标系中称之为Ai,在floor坐标系中称之为Bi。
矩阵表示m个点在camera坐标系下的坐标表示,其中,每一列表示第i个点在camera坐标系的坐标;
矩阵表示m个点在floor坐标系下的坐标表示,其中,每一列表示第i个点在floor坐标系的坐标。
这些点在camera坐标系下的平均向量其中,
同理,在floor坐标系下,可以有
本申请实施例中S、D矩阵可以分别为:
对S矩阵和D矩阵进行计算,将S与D的转置相乘,也即:H=S*Dt
利用现有技术中奇异值分解(SVD,Singular Value Decomposition)技术,对H做SVD分解:
H=u*w*vt;
本申请实施例定义了矩阵C,其中:
camera坐标系到floor坐标系旋转矩阵R,T分别是:
R=v*C*ut:
Floor坐标系到camera坐标系旋转矩阵Rt,Tt分别是:
Rt=R-1:
Tt=-Rt*T。
根据上述方式,即可获得camera坐标系和floor坐标系的转换关系。再结合image坐标系和camera坐标系的转换关系,可以计算视频中任意像素在真实物理世界中(也即,floor坐标系)中的坐标,也可以在真实世界中假想任何一个坐标,计算出该坐标在视频中的位置(也即,image坐标系中的坐标)。
接下来,本申请实施例提供了五种具有统计功能的热点,分别为:StepCountingMat、Touch Counting Wall、Pass Counting Door、People Counting Queue、PeopleCounting Desk,其中,People Counting Queue为以人与人之间的位置关系作为示例,StepCounting Mat、Touch Counting Wall、Pass Counting Door、People Counting Desk则为以人与监测区域之间的位置关系作为示例,下面以这五种具有统计功能的热点作为实例进行说明。
1、Step Counting Mat
图5示出了本申请实施例中Step Counting Mat的场景示意图,如图所示,假设在视频画面中有a、b两个人,本申请实施例可以在视频画面中预先设定step counting mat区域(如:图5中阴影部分所示的地面)。
根据人员检测和追踪技术可以检测出视频中的每个人,并得到他们的位置。将每个人抽象为位于人的重心位置的一个质点,并且投影到地面(也即floor坐标系的XoY平面),计算该质点在地面的投影与预设设定的step counting mat区域的位置关系,即可实现Step Counting Mat功能,统计设定区域中的人数。
计算人和区域位置关系的方法可以采用如下方式:
对任意位置的人(P或者Q),以他在地面投影位置为起点,向任意方向无穷远处有一条射线,假设取水平方向上的射线,计算该射线与Step Counting Mat区域的交点个数。如果交点个数为奇数,则人在区域内部;如果交点个数为偶数,则人在区域外部。
图6示出了本申请实施例中Step Counting Mat的投影示意图,如图所示,a的射线与监测区域有1个交点,说明a在监测区域内;b的射线与监测区域有2个交点,则说明b在监测区域外。
图7示出了本申请实施例中Step Counting Mat的效果示意图,在具体实施时,可以根据实际的需要,将不同的统计结果以不同的颜色、大小、形状等进行区分显示,例如将监测区域内6个人所在位置用红色扩散圆表示、3个人所在位置用蓝色扩散圆表示。
2、Touch Counting Wall
图8示出了本申请实施例中Touch Counting Wall的场景示意图,如图所示,可以将超市内装有物品的货架所在平面标注为Touch Counting Wall区域,假设画面内检测有a、b两个人正在货架前挑选商品,其中a抬起手去拿货架上的物品,而b仅在货架前观看物品。
检测像素变化的部分,由于a、b两人均遮挡住了货架所在区域,a、b两人所在位置的像素均发生了变化,根据这些位置的像素计算在floor坐标系中的坐标。
本申请实施例将a、b两个人以及货架均投影到地面,图9示出了本申请实施例中Touch Counting Wall在floor坐标系XoY平面的投影示意图,如图所示,下面进行说明。
L为Touch Counting Wall在XoY平面的投影,a和b两个黑色圆形分别表示a、b两个人在XoY平面的投影。
在图9中可以看到,a圆穿越了Touch Counting Wall在floor坐标系XoY平面的投影,则代表这些像素对应的位置已被触摸,也即a触摸了货架;相反的,b圆没有穿越在XoY平面的投影,则代表这些像素只是遮挡了TouchCounting Wall的区域,但这些像素对应的位置并没有被触摸到,也即b没有触碰货架。
计算EFGH区域对应的floor坐标系的z值,即可得到触摸区域在真实物理世界的高度。
最终,根据各个像素的计算可以得到统计结果,并将统计结果以不同颜色、形状等进行显示,如图10所示,具体实施时,可以根据统计结果的多少显示不同的深浅颜色,例如,将货架上5个被触摸部分标示为红色。进一步的,在具体实施时,还可以根据监测结果统计出哪些物品比较受欢迎等等。
3、Pass Counting Door
图11示出了本申请实施例中Pass Counting Door的场景示意图,如图所示,可以在超市两个货架之间预先设定一个Pass Counting Door区域,其形状可以类似于日常的门,利用该Pass Counting Door区域统计进入/走出这个虚拟的门的人数。
和Step Counting Mat类似,可以通过人员检测和跟踪技术,得到场景中人员位置和Pass Counting Door区域的位置关系,进而执行统计操作。
首先,将人抽象为一个质点,计算其在floor坐标系XoY平面的投影。
图12示出了本申请实施例中Pass Counting Door在floor坐标系XoY平面的投影示意图,如图所示,线段AB为pass counting door在floor坐标系XoY平面投影。
由AB决定的直线将平面划分为两部分,假设这条直线方程为:
Ax+By+C=0,
在A,B分别做与直线AB垂直的直线L1、L2,假设L1,L2方程分别是:
A1x+B1y+C1=0,
A2x+B2y+C2=0,
当人从Pass Counting Door区域通过时,例如:捕捉到a在Pass CountingDoor区域从a(x1,y1)到a’(x2,y2)的过程,会同时满足以下条件:
Ax1+By1+C<0 (1)
Ax2+By2+C>0 (2)
(A1x1+B1y1+C1)*(A2x1+B2y1+C2)<0 (3)
(A1x2+B1y2+C1)*(A2x2+B2y2+C2)<0 (4)
在具体实施中,根据a、a’发生的时间顺序可以确定人是从哪个方向穿过门,以此为依据实现人数统计。
当从设定的Pass Counting Door区域旁边经过时,例如:从b(x3,y3)到b’(x4,y4),则会有:
(A1x3+B1y3+C1)*(A2x3+B2y3+C2)>0:
(A1x4+B1y4+C1)*(A2x4+B2y4+C2)>0;
此时Pass Counting Door不计数。
在具体实施时,任何人与Pass Counting Door区域的位置关系,都可以从以上几种情况组合得到。
4、People Counting Queue
图13示出了本申请实施例中People Counting Queue的场景示意图,如图所示,假设在超市收银台前有a、b、c、d这4个人在排队,本申请实施例可以根据人员检测和跟踪技术拟合一条空间直线,用来描述视频中人员队列的关系。
在具体实施时,可以统计出每个队列有多少人,还可以进一步根据每个队列的人数估算排队的等待时间、或者监测是否有人插队等。
5、People Counting Desk
本申请实施例还可以预先设定关注的桌面区域为People Counting Desk区域,使用与Step Counting Mat类似算法,可以计算侵入People Counting Desk区域的像素。根据人员检测和跟踪技术以及骨骼关节点检测技术,可以判断出侵入People Counting Desk区域的像素是否属于人,属于人身体的哪个部分,形成统计结果。
例如:在会议室开会时,如果设置监测区域为座位,则可以检测每个位子是否有人;如果设置监测区域为会议桌,则可以检测出每个人是伏案工作、还是远离会议室(如:靠在椅背上)。
在具体实施中,监测区域(hotspot)的形状还可以是更加复杂的形式,例如是空间不规则曲面、或封闭曲面构成的空间,也即,还可能存在其他场景,例如:将一个悬浮在空中的球体作为监测区域(或称hotspot),当人的手伸进去就产生警报等等。相应的,判断人和监测区域的位置关系可能就需要根据实际的场景去选择相应的判断方式,本申请实施例以上述五种场景为例进行了说明,但应当理解,其他的判断方式也在本申请的保护范围之内。
基于同一发明构思,本申请实施例中还提供了一种视频监测装置,由于这些设备解决问题的原理与一种视频监测方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
图14示出了本申请实施例中确定视频图像中被测对象间位置关系的装置的结构示意图,如图所示,所述确定视频图像中被测对象间位置关系的装置可以包括:
检测模块1401,用于检测视频图像中的第一被测对象和第二被测对象;
第一确定模块1402,用于确定所述第一被测对象和所述第二被测对象在所述视频图像中的坐标;
转换模块1403,用于将所述第一被测对象和所述第二被测对象在所述视频图像中的二维坐标转换为物理世界中的三维坐标;
第二确定模块1404,用于根据所述第一被测对象和所述第二被测对象的三维坐标,确定所述第一被测对象和所述第二被测对象之间的位置关系。
实施中,所述转换模块可以具体用于根据所述image坐标系与所述camera坐标系的转换关系、以及所述camera坐标系与所述floor坐标系的转换关系,将所述image坐标系的坐标转换为所述floor坐标系的坐标;
其中,所述image坐标系为预先建立的以所述视频图像的顶点为原点、以与所述顶点相邻的两边为坐标轴的坐标系;所述camera坐标系为预先建立的以camera所在位置为原点、与所述视频画面水平方向平行的方向为x轴、与所述视频画面竖直方向平行的方向为y轴、光轴方向为z轴的坐标系;所述floor 坐标系为预先建立的以物理地面为XoY平面、以所述camera坐标系原点到地面所在平面XoY的投影为原点的坐标系。
实施中,所述转换模块具体可以包括:
像素位置确定单元,用于确定所述image坐标系的像素位置,所述像素位置=(ximage,yimage);
深度确定单元,用于根据所述像素位置确定所述像素位置的深度值depth_value;
第一转换单元,用于根据以下转换公式确定所述image坐标系与所述camera坐标系的转换关系:
xcamera=camera_param.xzFactor*(ximage/camera_param.resolution_X-0.5)*depth_value;
ycamera=camera_param.yzFactor*(0.5-yimage/camera_param.resolution_Y)*depth_value;
zcamera=depth_value;
其中,xcamera、ycamera、zcamera分别为所述camera坐标系中x、y、z轴的坐标值,camera_param.resolution_X、camera_param.resolution_Y分别为所述视频画面水平方向、垂直方向的像素数,camera_param.xzFactor、camera_param.yzFactor分别为修正因子。
实施中,所述转换模块具体可以包括:
矩阵确定单元,用于确定至少包括camera坐标系中三点坐标的第一矩阵,以及至少包括floor坐标系中三点坐标的第二矩阵;所述camera坐标系中点的坐标与所述floor坐标系中点的坐标为物理世界中同一点在camera坐标系和floor坐标系下的表示;
矩阵处理单元,用于将所述第一矩阵和所述第二矩阵分别减去各自矩阵内坐标的平均值,得到S矩阵和D矩阵;对所述S矩阵与所述D矩阵的转置的乘积做奇异值分解,得到S*Dt=u*w*vt;
第二转换单元,用于根据以下转换公式确定所述camera坐标系与所述floor坐标系的转换关系:R=v*C*ut;其中,R、T分别为camera坐标系到floor坐标系的旋转矩阵。
实施中,所述检测模块可以具体用于在视频图像中检测人和预先选定的监测区域;所述第一确定模块可以具体用于确定所述人和所述监测区域在所述视频图像中的坐标;所述转换模块可以具体用于将所述人和所述监测区域在所述视频图像中的二维坐标转换为物理世界中的三维坐标;所述第二确定模块可以具体用于根据所述人与所述监测区域的三维坐标,确定所述人与所述监测区域之间的位置关系。
实施中,所述第二确定模块具体可以包括:
第一投影单元,用于将所述人的坐标投影到所述floor坐标系的XoY平面;
计算单元,用于计算以所述人的投影位置为起点的射线与所述监测区域的交点个数;
第一监测单元,用于根据所述交点个数确定所述人是否在所述监测区域内。
实施中,所述第二确定模块具体可以包括:
第二投影单元,用于将所述人和所述监测区域的坐标均投影到所述floor坐标系的XoY平面;
第二监测单元,用于若所述人的投影与所述监测区域的投影有交集,确定所述监测区域被所述人触摸。
实施中,所述第二确定模块具体可以包括:
第三投影单元,用于将所述人和所述监测区域的坐标均投影到所述floor坐标系的XoY平面;其中,所述监测区域的投影线段所在直线为Ax+By+C=0;
直线确定单元,用于确定位于所述监测区域的投影线段两端且与所述投影线段垂直的两条直线A1x+B1y+C1=0和A2x+B2y+C2=0;
第三监测单元,用于若所述人的投影坐标变化为且同时满足以下条件时,则确定所述人穿过所述监测区域:Ax1+By1+C<0;Ax2+By2+C>0;(A1x1+B1y1+C1)*(A2x1+B2y1+C2)<0;
(A1x2+B1y2+C1)*(A2x2+B2y2+C2)<0。
实施中,所述第一被测对象和/或所述第二被测对象为多个,所述第二确定模块具体可以包括:
曲线拟合单元,用于根据所述多个第一被测对象和/或所述第二被测对象的三维坐标,拟合出将所述多个第一被测对象和/或所述第二被测对象连接起来的空间曲线;
第四监测单元,用于根据所述空间曲线确定所述多个第一被测对象和/或所述第二被测对象的队列关系。
为了描述的方便,以上所述装置的各部分以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。