一种视频多车辆轮廓检测方法

文档序号:7853907阅读:185来源:国知局
专利名称:一种视频多车辆轮廓检测方法
技术领域
本发明涉及一种视频多车辆轮廓检测方法,属于交通监控、视频图像处理、机器视觉技术领域。
背景技术
近些年来,利用视频技术进行车辆检测成为车辆检测技术中的一个热点,它可模仿人的视觉功能进行车辆检测和跟踪,具备可检测多个车道、安装维修简单等优点。视频车辆检测技术从策略上可以分为两类基于虚拟线圈和基于跟踪的方法。虚拟线圈法通过检测特定检测区域内图像变化可以检测通过该区域的运动车辆,检测区域的选取依赖人的先验知识,可大幅度的减少干扰并减轻计算负担,该方法简单高效,适用于车 辆计数,但该类方法很难得到车辆图像的完整轮廓和车辆运动轨迹。基于跟踪的方法可以识别并记忆每辆车在视频帧序列中的图像轮廓和运动轨迹,适用于更广泛更高级的应用,如交通事件检测。基于跟踪的方法中,车辆的检测通常采用检测车辆的完整前景边缘或查找前景连通域的方法。该类方法是建立在车辆前景连通的基础上的,然而,为了得到连通的车辆前景,往往造成干扰信号被放大或者邻近车辆互相粘连的结果,这种结果会降低车辆检测的准确性。既能抑制干扰信号又使不同车辆互相分离的图像处理方法,往往造成单个车辆的前景分裂成若干连通区域而不是一个连通的整体,这使得车辆的完整轮廓难以获得,尤其当多辆车同时出现在视频中时,问题更为严重。另外,道路两旁树木摇曳、摄像机轻微抖动、行人走动等情况也会对车辆检测造成干扰。

发明内容
本发明针对现有技术在面对多个车辆同时进入监控区域、摄像机轻微抖动、背景复杂等问题时的不足,提出一种视频多车辆轮廓检测方法,其特征在于步骤I :初始化步骤I. I :获取一段视频,再从视频获取背景图像;步骤I. 2 :以图像左上角的像素位置为原点,像素为单位长度,从左到右的方向为X轴正方向,从上到下的方向为Y轴正方向,建立坐标系;步骤I. 3 :用一个多边形在视频场景中圈出监控区域,该多边形称为虚拟围栏,如果车辆行驶方向为从下至上,则虚拟围栏的底部为水平线,该底部水平线称为入境线,如果车辆行驶方向为从上至下,则虚拟围栏的顶部为水平线,该顶部水平线称为入境线,入境线的Y轴坐标表示为Y_IN ;步骤1.4 :获取一帧有轿车刚好完全驶入监控区域的图像,车辆刚好完全驶入监控区域是指车辆尾部紧贴入境线,在该车的车头前画一条水平线,称为最小车长线,最小车长线的Y轴坐标表示为Y_L0NG,在最小车长线与入境线之间画一条水平线,称为触发线,触发线的Y轴坐标表示为Y_T0UCH,触发线与最小车长线的距离和触发线与入境线的距离之比为3: f 4:1,在该车两侧画2条竖直线,使2条竖直线之间的距离为该车宽度的I. 3^1. 5倍,该竖直线称为车宽线,2条车宽线之间的距离表示为WIDE ;步骤1.5 :用变量S表示整段视频中已检测出来的车辆总数,用变量k表示正在检测的图像在视频中的帧序,第k帧图像表示为f(k),第k帧图像中的车辆的集合表示为CARS(k),第k巾贞图像中的编号为n的车表示为car(n, k),编号n表示car (n, k)是整段视频中第n辆被检测出来的车,car (n, k)的轮廓表示为c (n, k);设第k帧图像f(k)是由MXN个像素构成的像素矩阵,将第k帧图像f(k)划分为(M — m + I) X (N — m + I)个块,每个块是由mXm个像素构成的像素矩阵,m取值为WIDE的0.广0. 3倍,第k帧图像中的中心点坐标为(x,y)的块表示为8油(1,7,10,属于编号为11的车car (n, k)的块集合表示为SUBS (n, k);步骤I. 6 :令表示帧序的变量k为O,整段视频中已检测出来的车辆总数S为O,第O帧车辆集合CARS(O)为空集; 步骤2 :表示帧序的变量k自增1,获取第k帧图像f(k),令第k帧图像的车辆集合CARS (k)为空集;步骤3 :获取车身轮廓集合步骤3. I :取第k帧图像f (k)与背景图像之差的绝对值图像作为第k帧差分图dif(k);步骤3. 2 :第k帧差分图dif (k)中处于监控区域内且灰度值大于阈值Tl的像素称为前景像素,否则称为背景像素,令前景像素灰度值为255,背景像素灰度值为O,得到第k帧二值图binary (k),Tl可取值为20 50 ;步骤3.3 :,对第k帧二值图binary (k)进行形态学开运算,得到第k帧前景图像obj (k),形态学开运算中的核是边长为m/2的矩形,核的参考点是核的中心点;步骤3. 4 :采用公知的Canny边缘检测法检测第k帧前景图像obj (k)中的边缘像素点,令边缘像素点的灰度值为255,非边缘像素点的灰度值为0,得到第k帧边缘图con(k);步骤3. 5 :采用公知的爬虫法获取第k帧边缘图con (k)中的所有车身轮廓,第k帧图像中的车身轮廓的集合表示为BODYS (k),车身轮廓是第k帧边缘图con(k)中边缘像素点的集合,对于任意一个车身轮廓body I内的任意一个像素点Dl,存在一个车身轮廓body I内的像素点D2,像素点D2是像素点Dl的8邻域像素点之一。步骤3.6 :从第k帧图像的车身轮廓集合BODYS (k)中删除边界框脱离触发线的车身轮廓,轮廓的边界框是指包围轮廓的最小矩形,边界框脱离触发线是指如果车辆行驶方向为从下至上,边界框的4个顶点的Y轴坐标值均小于Y_T0UCH,如果车辆行驶方向为从上至下,边界框的4个顶点的Y轴坐标值均大于Y_T0UCH ;步骤4:跟踪旧车如果第k-1帧图像的车辆集合CARS(k-l)为空集,则进入步骤5,否则将第k_l帧图像中的车辆集合CARS (k-1)中的每辆车跟踪到第k帧图像,将第k-1帧图像的车辆集合CARS (k-1)中编号为n的车car(n, k-1)跟踪到第k巾贞图像的步骤如下步骤4. I :在第k帧图像的车辆集合CARS (k)中添加编号为n的车car (n, k),令车car (n, k)的块集合SUBS (n, k)为空集;
步骤4. 2 :将车car(n,k-1)的块集合SUBS(n,k-1)中每一个块跟踪到第k帧图像;步骤4. 3 :如果车car (n,k)的块集合SUBS (n,k)为空集,则从第k帧图像的车辆集合CARS(k)中删除车car(n, k),并结束对车car(n, k-1)的跟踪,否则进行步骤4. 4 ;步骤4. 4 :标记车car (n,k)为旧车;步骤4. 5 :获取包围车car(n,k)的块集合SUBS(n,k)中所有块的顶点的凸包,令车car (n, k)的轮廓c (n, k)等于该凸包;步骤4. 6 :计算车car (n, k)的块集合SUBS (n, k)中所有块的运动矢量的平均值,将该平均值保存为车car (n, k)的运动矢量mean (n, k);块的运动矢量是指块的中心点坐标减去前一帧与该块对应的块的中心点坐标得到的矢量; 步骤5:更新旧车轮廓如果第k帧图像的车辆集合CARS(k)为空集或者第k帧图像的车身轮廓集合BODYS (k)为空集,则进入步骤6,否则进入步骤5. I ;步骤5. I :将第k帧图像的车身轮廓集合BODYS (k)中的所有车身轮廓标记为未查看;步骤5. 2 :从第k帧图像的车身轮廓集合BODYS (k)中获取一个标记为未查看的车身轮廓,如果获取成功,将该车身轮廓标记为已查看,否则进入步骤6 ;步骤5.3 :从第k帧图像的车辆集合CARS(k)中找出边界框与该车身轮廓的边界框距离最近的车辆,两边界框之间的距离是指边界框中心点之间的距离,车辆的边界框是指车辆的轮廓的边界框;步骤5. 4 :判断该车辆能否吞并该车身轮廓;步骤5. 5 :如果该车辆能吞并该车身轮廓,则该车辆吞并该车身轮廓;车辆吞并车身轮廓的方法如下步骤5. 5. I :合并车辆的轮廓与车身轮廓,得到点集A ;步骤5. 5. 2 :采用公知的Graham扫描法获取点集A的凸包,令该车身轮廓等于点集A的凸包;步骤5. 5. 3 :从第k帧图像的车身轮廓集合BODYS (k)中删除该车身轮廓;步骤5.6 :返回步骤5.2 ;步骤6 :检测新车如果第k帧图像的车身轮廓集合BODYS (k)为空集,则进入步骤I ;步骤6. I :从第k帧图像的车身轮廓集合BODYS(k)中获取一个边界框宽度大于WIDE/3的车身轮廓,如果获取失败,则进入步骤7 ;步骤6. 2 :车辆总数S自增1,在第k帧图像的车辆集合CARS(k)中增加编号为S的车car (S,k),标记car (S,k)为新车,令车car (S,k)的轮廓c(S,k)等于由步骤6. I获取的车身轮廓的凸包,令车car (S,k)的块集合SUBS (S,k)为空集;步骤6. 3 :从第k帧图像的车身轮廓集合BODYS (k)中删除由步骤6. I获取的车身轮廓;步骤6. 4 :采用车辆吞并车身轮廓的方法,用车car (S,k)吞并第k帧图像的车身轮廓集合BODYS (k)中所有能被car (S,k)吞并的车身轮廓;步骤6. 5 :返回步骤6. I ;步骤7 :添加填充块如果第k帧图像的车辆集合CARS(k)为空集,则返回步骤2,否则在为第k帧图像的车辆集合CARS (k)中的每辆车添加填充块之后返回步骤2,为CARS (k)中任意一辆车car (n, k)添加填充块的步骤如下对车car (n, k)的轮廓c (n, k)上的每个点进行如下操作—设车car (n, k)的轮廓c (n, k)上的点坐标为(xl, yl),从以车car (n, k)的轮廓c(n,k)上的点(xl,yl)为顶点之一的四个块sub (xl_m/2,yl_m/2,k)、sub (xl-m/2, yl+m/2, k)、sub (xl+m/2, yl-m/2, k)、sub (xl+m/2, yl+m/2, k)中找出 4 个顶点全被c(n, k)所包围的块作为填充块,并标记填充块为sub(x2, y2, k),判断一个点D3是否被一个轮廓包围的方法是如果一个轮廓上有奇数个点满足X轴坐标值大于点D3的X轴坐标值,Y轴坐标值等于D3的Y轴坐标值,则点D3被该轮廓包围,二在第k帧二值图binary(k)中与填充块sub (x2,y2, k)位置和大小都对应的像素矩阵称为填充块sub (x2, y2, k)的二值块,如果填充块sub (x2, y2, k)的二值块的非零像素个数大于阈值T2并且车car(n,k)的块集合SUBS (n, k)中没有与填充块sub (x2, y2, k)重叠面积大于mXm/2的块,则将填充块sub (x2,y2, k)加入车car (n,k)的块集合SUBS (n,k),阈值T2取值为mXm的 0. 6^0. 8 倍。步骤4. 2中将第k-1帧图像中编号为n的车car(n,k-1)的块集合SUBS(n,k-1)中的块sub(x, y, k-1)跟踪到第k巾贞图像的步骤如下步骤4. 2. I :设置矩形搜索区域rect, rect的中心点坐标表示为(xr,yr),如果车car(n,k_l)被标记为新车,则rect的中心点坐标等于块sub (x, y, k_l)的中心点坐标,xr等于x, yr等于y, rect的边长为WIDE/2,如果车car (n, k-1)被标记为旧车,则xr等于 x+mean (n, k-1). x, yr 等于 y+mean (n, k-1). y, rect 的边长为 mean (n, k-1)的长度,其中mean (n, k-1). x 和 mean (n, k-1). y 分别表示车 car (n, k-1)的运动矢量 mean (n, k-1)的 X 轴分量和Y轴分量;步骤4. 2. 2 :按下式计算块sub (x, y, k_l)与第k巾贞图像中矩形搜索区域rect内的每个块的匹配值match(.\*3. r3, k)= ^ \P(zx — x3 - x. zy — y3 — yi) - P(zx. zy.k -1)|式中,match (x3, y3, k)表示块sub (x, y, k_l)与第k巾贞图像中矩形搜索区域rect内中心点坐标为(x3, y3)的块sub(x3, y3, k)的匹配值,(zx, zy)表示块sub(x,y, k_l)中的像素的坐标,P(zx+x3_x, zy+y3_y,k)表示第k巾贞图像f(k)中坐标为(zx+x3_x, zy+y3_y)的像素的灰度值,P(zx, zy, k-1)表示第k-1帧图像f (k-1)中坐标为(zx,zy)的像素的灰度值,将第k帧图像中矩形搜索区域rect内的所有块中与块sub (x,y,k-1)的匹配值最小的块表示为sub (x4, y4, k);步骤4. 2. 3 :在第k帧差分图dif (k)中与块sub (x4,y4, k)位置和大小都对应的像素矩阵称为块sub (x4, y4, k)的差分块,如果块sub (x4, y4, k)的差分块中的所有像素的平均灰度值大于阈值T3,则将块sub (x4, y4, k)加入到车car (n, k)的块集合SUBS (n, k)中,并保存块sub (x4, y4, k)的运动矢量为(X4-X,y4_y),T3取值20 30。步骤4. 5中获取包围车car(n,k)的块集合SUBS (n,k)中所有块的顶点的凸包的步骤如下步骤4. 5. I :将SUBS (n, k)中每一个块的4个顶点加入点集B ;步骤4. 5. 2 :采用公知的Graham扫描法获取点集B的凸包,该凸包即包围SUBS (n,k)中所有块的凸包,点集的凸包是指一个最小凸多边形,满足点集中的点或者在多边形边上或者在其内。步骤5. 4中判断车辆能否吞并车身轮廓的步骤如下步骤5. 4. I :如果车辆的轮廓的边界框与车身轮廓的边界框之间有交集,则车辆能吞并车身轮廓,结束判断车辆能否吞并车身轮廓,否则进入步骤5. 4. 2 ; 步骤5. 4. 2 :如果车辆的轮廓的边界框脱离最小车长线,则车辆不能吞并车身轮廓,结束判断车辆能否吞并车身轮廓,否则进行步骤5. 4. 3 ;边界框脱离最小车长线是指如果车辆行驶方向为从下至上,边界框的4个顶点的Y轴坐标值均小于Y_L0NG,如果车辆行驶方向为从上至下,边界框的4个顶点的Y轴坐标值均大于Y_L0NG ;步骤5. 4. 3:如果车辆的轮廓的边界框与车身轮廓的边界框的并集的宽小于WIDE,则车辆能吞并车身轮廓。有益效果I.通过画虚拟围栏的方法,圈出监控区域,使视频中非路面区域的图像不参与车辆检测,简化了场景,避免了道路两旁树木摇曳、行人走动等对车辆检测造成的干扰。2.通过形态学开运算消除细小轮廓,有效消除摄像机抖动形成的前景区域噪声,同时使邻近车辆的前景区域分离,避免了邻近车辆之间轮廓的粘连。3.通过将车辆图像划分为多个块,查找前一帧的块在当前帧的最佳匹配块,实现车辆在连续两帧图像间的跟踪,使同一辆车在多帧视频图像中不会被误识别成多辆车,同一帧图像中的多辆车不会相互混淆。由于块与像素的个数几乎相等,车辆块的凸包可以作为车辆的轮廓。4.通过对车辆的块求凸包,以此凸包为车辆初始轮廓,结合车宽、最小车长等参数吞并同属本车的车身轮廓,使正在驶入监控区域的车辆的轮廓更加完整,同时避免一帧图像中一辆车被误识别为多辆车;从剩余的车身轮廓中选择较大的轮廓,作为新车初始轮廓,再吞并同属本新车的车身轮廓,使得新驶入监控区域的车辆被及时地检测出来。


I.图I是视频多车辆轮廓检测总体流程图。2.图2是建立坐标系以及虚拟线圈画法示意图。3 图3是实例中第126帧背景差分图。4.图4是实例中第126帧二值图。5.图5是实例中第126帧前景图。6.图6是实例中第126帧边缘图。7.图7是实例中第126帧图像中删除脱离触发线的车身轮廓后剩余的车身轮廓。
8.图8是实例中第125帧图像中检测出来的所有车辆。9.图9是实例中第125帧图像中检测出来的所有车辆被跟踪到第126帧图像的结果。10.图10是实例中第126帧旧车轮廓与车身轮廓的位置关系。11 图11是新车检测流程图12 图12是旧车轮廓更新流程图。13.图13是实例中第126帧图像中所有车辆轮廓检测结果。 14.图14是为实例中第126帧图像中的车辆添加填充块后的效果图。
具体实施例方式为了更好的理解本发明的技术方案,下面结合附图及某公路上的视频实例对本发明作进一步描述。该方法的总体流程图见图1,该方法实现步骤如下步骤I :初始化步骤I. I :获取一段视频,本实例中车辆行驶方向为从下到上,再从视频获取背景图像,背景图像可采用多种方式获取,例如直接拍摄法或者多帧均值法,直接拍摄法是指直接抓拍视频场景中无车的图像作为背景图像,多帧均值法是指用多帧图像的平均值图像作为背景图像,本实例中采用多帧均值法获取背景图像;步骤I. 2 :以图像左上角的像素位置为原点,像素为单位长度,从左到右的方向为X轴正方向,从上到下的方向为Y轴正向,建立坐标系,本实例中坐标系见图2 ;步骤1.3 :用一个多边形在视频场景中圈出监控区域,该多边形称为虚拟围栏,如果车辆行驶方向为从下至上,则虚拟围栏的底部需画成水平线,该底部水平线称为入境线,如果车辆行驶方向为从上至下,则虚拟围栏的顶部需画成水平线,该顶部水平线称为入境线,入境线的Y轴坐标表示为Y_IN,本实例中虚拟围栏画法见图2,入境线的Y轴坐标Y_IN为 574;步骤I. 4 :获取一帧有轿车刚好完全驶入监控区域的图像,车辆刚好完全驶入监控区域是指车辆尾部紧贴入境线,在该车的车头前画一条水平线,称为最小车长线,最小车长线的Y轴坐标表示为Y_L0NG,在最小车长线与入境线之间画一条水平线,称为触发线,触发线的Y轴坐标表示为Y_T0UCH,触发线与最小车长线的距离和触发线与入境线的距离之比为3: f 4:1,例如触发线的Y轴坐标表示为Y_T0UCH,触发线与最小车长线的距离和触发线与入境线的距离之比为3:1、3. 5:1或4:1,本实例中最小车长线的Y轴坐标Y_L0NG为353,触发线的Y轴坐标Y_T0UCH为521,在该车两侧画2条竖直线,使2条竖直线之间的距离为该车宽度的I. 3 1. 5倍,例如2条竖直线之间的距离为该车宽度的I. 3、I. 4或I. 5倍,该竖直线称为车宽线,2条车宽线之间的距离表示为WIDE,本实例中,2条车宽线之间的距离WIDE为209,是该车宽度(该车最左边像素L点和最右边像素R点的X轴距离)的I. 3倍,最小车长线、触发线、车宽线画法见图2 ;步骤1.5 :用变量S表示整段视频中已检测出来的车辆总数,用变量k表示正在检测的图像在视频中的帧序,第k帧图像表示为k),第k帧检测出来的车辆的集合表示为CARS (k),CARS (k)中的编号为n的车表示为car (n, k),编号n表示car (n, k)是整段视频中第n辆被检测出来的车,car (n, k)的轮廓表示为c (n, k);
设f (k)是由MXN个像素构成的像素矩阵,将f (k)划分为(M — m + I) X (N —m+ I)个块,每个块是由mXm个像素构成的像素矩阵,m取值为WIDE的0. f 0.3倍,例如m取值为WIDE的0. 1,0. 15或0. 3倍,本实例中,M为720,N为576,m为21,中心点坐标为(X, y)的块表示为sub (X,y, k),属于编号为n的车car (n, k)的块集合表示为SUBS (n, k);步骤1.6:令1^为0^为0,CARS(0)为空集;步骤2 :表示帧序的变量k自增1,获取第k帧图像f(k),令CARS(k)为空集;步骤3 :获取车身轮廓集合步骤3. I :取第k帧图像f (k)与背景图像之差的绝对值图像作为第k帧差分图dif (k),本实例中第126帧差分图dif (126)见图3 ;步骤3. 2 :第k帧差分图dif (k)中处于监控区域内且灰度值大于阈值Tl的像素 称为前景像素,否则称为背景像素,令前景像素灰度值为255,背景像素灰度值为0,得到第k帧二值图binary (k),Tl取值为20 50,例如,Tl取值为20、30或50 ;本实例中Tl取值为22,第126帧二值图binary (126)见图4 ;步骤3. 3 :对binary (k)进行形态学开运算,得到第k巾贞前景图像ob (k),形态学开运算中的核是边长为m/2的矩形,核的参考点是核的中心点,本实例中第126帧前景图像obj (126)见图 5 ;形态学开运算是图像处理领域公知的算法,形态学开运算是指先腐蚀再膨胀,腐蚀是指将像素值设为与该像素对应的核覆盖下所有点中的最小值,膨胀是指将像素值设为与该像素对应的核覆盖下所有点中的最大值,核可以是任何的形状或大小,并拥有一个单独定义的参考点;步骤3. 4 :采用公知的Canny边缘检测法检测第k帧前景图像ob(k)中的边缘像素点,令边缘像素点的灰度值为255,非边缘像素点的灰度值为0,得到第k帧边缘图con(k),本实例中第126帧边缘图con(126)见图6 ;Canny边缘检测法是图像边缘检测领域的公知算法,该算法主要步骤如下首先,用高斯滤波器平滑图像,然后用一阶有限差分计算梯度幅值和方向,然后对梯度幅值进行非极大值抑制,用双阈值算法检测和连接边缘,本实例中Canny边缘检测法的双阈值都取值为100。步骤3. 5 :采用公知的爬虫法获取第k帧边缘图con (k)中的所有车身轮廓,第k帧图像中的车身轮廓的集合表示为BODYS (k),车身轮廓是第k帧边缘图con(k)中边缘像素点的集合,对于任意一个车身轮廓body I内的任意一个像素点Dl,存在一个车身轮廓body I内的像素点D2,像素点D2是像素点Dl的8邻域像素点之一,像素点Dl的8邻域像素点是指与像素点Dl相比X轴坐标值或Y轴坐标值相差为I的像素点;爬虫法是一种获取图像中物体轮廓的公知方法,它采用如下规则进行处理(I)任取一个边缘像素点作为起始点,每次只前进一步,步距为一个象素;(2)跨步由背景区进入目标区后各步向左转,直到穿出目标区为止;(3)跨步由目标区进入背景区后各步向右转,直到穿出背景区为止,围绕目标物循环一周后,回到起始点,所走过的轨迹便是对象物的轮廓;步骤3.6 :从BODYS(k)中删除边界框脱离触发线的车身轮廓,轮廓的边界框是指包围轮廓的最小矩形,分别以轮廓上所有点的X轴坐标的最小值和最大值作为轮廓的边界框的左边和右边的X轴坐标,以轮廓上所有点的Y轴坐标的最小值和最大值作为轮廓的边界框的上边和下边的Y轴坐标值,边界框脱离触发线是指如果车辆行驶方向为从下至上,边界框的4个顶点的Y轴坐标值均小于Y_TOUCH,如果车辆行驶方向为从上至下,边界框的4个顶点的Y轴坐标值均大于Y_TOUCH ;本实例中,删除脱离触发线的车身轮廓后剩余的车身轮廓见图7 ;步骤4:跟踪旧车如果第k-1帧图像的车辆集合CARS (k-1)为空集,则进入步骤5,否则将第k-1帧图像中的车辆集合CARS (k-1)中的每辆车跟踪到第k帧图像,将第k-1帧图像的车辆集合CARS (k-1)中编号为n的车car(n, k-1)跟踪到第k巾贞图像的步骤如下步骤4. I :在第k帧图像的车辆集合CARS (k)中添加编号为n的车car (n,k),令车 car (n, k)的块集合SUBS (n, k)为空集;步骤4. 2 :将车car(n,k-1)的块集合SUBS(n,k-1)中每一个块跟踪到第k帧图像;步骤4. 3 :如果车car(n,k)的块集合SUBS(n,k)为空集,则从第k帧图像的车辆集合CARS(k)中删除车car(n, k),并结束对车car(n, k-1)的跟踪,否则进行步骤4. 4 ;步骤4.4 :标记车car (n,k)为旧车;步骤4.5 :获取包围车car (n,k)的块集合SUBS(n,k)中所有块的顶点的凸包,令车car (n, k)的轮廓c (n, k)等于该凸包;步骤4. 6 :计算车car (n,k)的块集合SUBS (n,k)中所有块的运动矢量的平均值,将该平均值保存为车car (n, k)的运动矢量mean (n, k);块的运动矢量是指块的中心点坐标减去前一帧与该块对应的块的中心点坐标得到的矢量;本实例中,第125帧图像中的车辆集合CARS(125)中的所有车见图8,第125帧图像中的车辆集合CARS (125)中的所有车被跟踪到第126帧图像的结果见图9,第126帧图像中旧车轮廓与车身轮廓的位置关系见图10 ;步骤5:更新旧车轮廓如果第k帧图像的车辆集合CARS(k)为空集或者第k帧图像的车身轮廓集合BODYS (k)为空集,则进入步骤6,否则进入步骤5. I ;步骤5. I :将第k帧图像的车身轮廓集合BODYS (k)中的所有车身轮廓标记为未查看;步骤5. 2 :从第k帧图像的车身轮廓集合BODYS (k)中获取一个标记为未查看的车身轮廓,如果获取成功,将该车身轮廓标记为已查看,否则进入步骤6 ;步骤5.3 :从第k帧图像的车辆集合CARS(k)中找出边界框与该车身轮廓的边界框距离最近的车辆,两边界框之间的距离是指边界框中心点之间的距离,车辆的边界框是指车辆的轮廓的边界框;步骤5. 4 :判断该车辆能否吞并该车身轮廓;步骤5. 5 :如果该车辆能吞并该车身轮廓,则该车辆吞并该车身轮廓;车辆吞并车身轮廓的方法如下步骤5. 5. I :合并车辆的轮廓与车身轮廓,得到点集A ;
步骤5.5. 2 :采用公知的Graham扫描法获取点集A的凸包,令该车身轮廓等于点集A的凸包;点集的凸包是指一个最小凸多边形,满足该点集中的点或者在该最小凸多边形边上或者在其内。Graham扫描法是获取点集的凸包的公知算法,首先,找到所有点中Y轴坐标最小的点,如果Y轴坐标相同,找X轴坐标最小的点.,以这个点为基准求所有点的极角,并按照极角从小到大的顺序对这些点排序,基准点排在最前,建立一个栈,初始时前3个点进栈,对于每个剩余的点,设该剩余的点的坐标为(x5, y5),栈顶的点的前一个点的坐标为(x6,y6),栈顶的点坐标为(x7,y7),若(x6_x5)*(y7_y5) - (x7_x5)*(y6_y5)为正值,则将栈顶的点出栈,直至没有点需要出栈以后将该剩余的点进栈,所有点处理完之后栈中保存的点就是凸包上的点。步骤5. 5. 3 :从第k帧图像的车身轮廓集合BODYS (k)中删除该车身轮廓;步骤5. 6 :返回步骤5. 2 ;更新旧车轮廓流程图见图11 ;步骤6:检测新车如果BODYS(k)为空集,则省略该步骤;如果第k帧图像的车身轮廓集合BODYS (k)为空集,则进入步骤7 ;步骤6. I :从第k帧图像的车身轮廓集合BODYS(k)中获取一个边界框宽度大于WIDE/3的车身轮廓,如果获取失败,则进入步骤7 ;步骤6.2 :车辆总数S自增I,在第k帧图像的车辆集合CARS (k)中增加编号为S的车car (S,k),标记car (S,k)为新车,令车car (S,k)的轮廓c(S,k)等于由步骤6. I获取的车身轮廓的凸包,令车car (S,k)的块集合SUBS(S,k)为空集;步骤6. 3 :从第k帧图像的车身轮廓集合BODYS (k)中删除由步骤6. I获取的车身轮廓;步骤6. 4 :采用车辆吞并车身轮廓的方法,用车car (S,k)吞并第k帧图像的车身轮廓集合BODYS (k)中所有能被car (S,k)吞并的车身轮廓;
步骤6. 5 :返回步骤6. I ;检测新车流程图见图12 ;本实例中,第126帧图像的车辆轮廓检测结果见图13,其中编号为5的车是新车。步骤7 :添加填充块如果第k帧图像的车辆集合CARS(k)为空集,则返回步骤2,否则在为第k帧图像的车辆集合CARS (k)中的每辆车添加填充块之后返回步骤2,为CARS (k)中任意一辆车car (n, k)添加填充块的步骤如下对车car(n, k)的轮廓c (n, k)上的每个点进行如下操作—设车car (n, k)的轮廓c (n, k)上的点坐标为(xl, yl),从以车car (n, k)的轮廓c(n,k)上的点(xl,yl)为顶点之一的四个块sub (xl-m/2, yl-m/2, k)、sub (xl-m/2, yl+m/2, k) > sub (xl+m/2, yl-m/2, k) > sub (xl+m/2, yl+m/2, k)中找出 4 个顶点全被车car (n, k)的轮廓c(n, k)包围的块作为填充块,并标记填充块为sub (x2, y2, k),判断任意一个顶点D3是否被一个轮廓包围的方法是如果一个轮廓上有奇数个点满足X轴坐标值大于顶点D3的X轴坐标值,Y轴坐标值等于顶点D3的Y轴坐标值,则顶点D3被该轮廓包围,二在第k巾贞二值图binary (k)中与填充块sub (x2, y2, k)位置和大小都对应的像素矩阵称为填充块sub (x2, y2, k)的二值块,如果填充块sub (x2, y2, k)的二值块的非零像素个数大于阈值T2并且车car (n,k)的块集合SUBS (n,k)中没有与填充块sub (x2,y2,k)重叠面积大于mXm/2的块,则将填充块sub (x2, y2, k)加入车car (n, k)的块集合SUBS (n, k),阈值T2取值为mXm的0. 6^0. 8倍,例如阈值T2取值为mXm的0. 6,0. 7或0. 8倍。本实例中,T2取值为mXm的0. 7倍,为第126帧图像的车辆添加填充块后的结果见图14。步骤4. 2中将第k-1帧图像中编号为n的车car(n, k-1)的块集合SUBS(n,k-1)中的块sub (x, y, k-1)跟踪到第k巾贞图像的步骤如下步骤4. 2. I :设置矩形搜索区域rect, rect的中心点坐标表示为(xr,yr),如果车car (n, k-1)被标记为新车,则rect的中心点坐标等于块sub (x, y, k_l)的中心点坐标,xr等于x, yr等于y, rect的边长为WIDE/2,如果车car (n, k-1)被标记为旧车,则xr等于 x+mean (n, k-1). x, yr 等于 y+mean (n, k-1). y, rect 的边长为 mean (n, k-1)的长度,其中mean (n, k-1). x 和 mean (n, k-1). y 分别表示车 car (n, k-1)的运动矢量 mean (n, k-1)的 ·X 轴分量和Y轴分量;步骤4. 2. 2 :按下式计算块sub (x, y, k-1)与第k巾贞图像中矩形搜索区域rect内的每个块的匹配值matdi(,\*3. r3. k)~ Y \P(zx - .\*3 — zy -1'3 — \\ k) — P(zx, zr. k —1)|式中,match (x3, y3, k)表示块sub (x, y, k-1)与第k巾贞图像中矩形搜索区域rect内中心点坐标为(x3, y3)的块sub(x3, y3, k)的匹配值,(zx, zy)表示块sub(x,y, k_l)中的像素的坐标,P(zx+x3_x, zy+y3_y,k)表示第k巾贞图像f(k)中坐标为(zx+x3_x, zy+y3_y)的像素的灰度值,P(zx, zy, k-1)表示第k-1帧图像f (k-1)中坐标为(zx,zy)的像素的灰度值,将第k帧图像中矩形搜索区域rect内的所有块中与块sub (x,y,k-1)的匹配值最小的块表示为sub (x4, y4, k);步骤4. 2. 3 :在第k帧差分图dif(k)中与块sub (x4, y4, k)位置和大小都对应的像素矩阵称为块sub (x4, y4, k)的差分块,如果块sub (x4, y4, k)的差分块中的所有像素的平均灰度值大于阈值T3,则将块sub (x4, y4, k)加入到车car (n, k)的块集合SUBS (n, k)中,并保存块sub (x4,y4,k)的运动矢量为(叉41,741),13取值20 30,例如:T3取值20、25或30,本实例中,T3取值25。步骤4. 5中获取包围车car(n,k)的块集合SUBS (n,k)中所有块的顶点的凸包的步骤如下步骤4. 5. I :将SUBS (n, k)中每一个块的4个顶点加入点集B ;步骤4. 5. 2 :采用公知的Graham扫描法获取点集B的凸包,该凸包即包围SUBS (n,k)中所有块的凸包,步骤5. 4中判断车辆能否吞并车身轮廓的步骤如下步骤5. 4. I :如果车辆的轮廓的边界框与车身轮廓的边界框之间有交集,则车辆能吞并车身轮廓,结束判断车辆能否吞并车身轮廓,否则进入步骤5. 4. 2 ;步骤5. 4. 2 :如果车辆的轮廓的边界框脱离最小车长线,则车辆不能吞并车身轮廓,结束判断车辆能否吞并车身轮廓,否则进行步骤5. 4. 3 ;
边界框脱离最小车长线是指如果车辆行驶方向为从下至上,边界框的4个顶点的Y轴坐标值均小于Y_L0NG,如果车辆行驶方向为从上至下,边界框的4个顶点的Y轴坐标 值均大于Y_L0NG ;步骤5. 4. 3 :如果车辆的轮廓的边界框与车身轮廓的边界框的并集的宽小于WIDE,则车辆能吞并车身轮廓。
权利要求
1.一种视频多车辆轮廓检测方法,其特征在于 步骤1:初始化 步骤1.1:获取一段视频,再从视频获取背景图像; 步骤I. 2 :以图像左上角的像素位置为原点,像素为单位长度,从左到右的方向为X轴正方向,从上到下的方向为Y轴正方向,建立坐标系; 步骤1.3 :用一个多边形在视频场景中圈出监控区域,该多边形称为虚拟围栏,如果车辆行驶方向为从下至上,则虚拟围栏的底部为水平线,该底部水平线称为入境线,如果车辆行驶方向为从上至下,则虚拟围栏的顶部为水平线,该顶部水平线称为入境线,入境线的Y轴坐标表示为Y_IN ; 步骤I. 4 :获取一帧有轿车刚好完全驶入监控区域的图像,车辆刚好完全驶入监控区域是指车辆尾部紧贴入境线,在该车的车头前画一条水平线,称为最小车长线,最小车长线的Y轴坐标表示为Y_LONG,在最小车长线与入境线之间画一条水平线,称为触发线,触发线的Y轴坐标表示为Y_TOUCH,触发线与最小车长线的距离和触发线与入境线的距离之比为.3: f 4:1,在该车两侧画2条竖直线,使2条竖直线之间的距离为该车宽度的I. 3^1. 5倍,该竖直线称为车宽线,2条车宽线之间的距离表示为WIDE ; 步骤I. 5 :用变量S表示整段视频中已检测出来的车辆总数,用变量k表示正在检测的图像在视频中的帧序,第k帧图像表示为f(k),第k帧图像中的车辆的集合表示为CARS(k),第k巾贞图像中的编号为n的车表示为car (n, k),编号n表示car (n, k)是整段视频中第n辆被检测出来的车,car (n, k)的轮廓表示为c (n, k); 设第k帧图像f(k)是由MXN个像素构成的像素矩阵,将第k帧图像f(k)划分为(M —m + I) X (N — m + I)个块,每个块是由mXm个像素构成的像素矩阵,m取值为WIDE的.0.广0. 3倍,第k帧图像中的中心点坐标为(x,y)的块表示为8111^,7,10,属于编号为11的车car (n, k)的块集合表示为SUBS (n, k); 步骤I. 6 :令表示帧序的变量k为0,整段视频中已检测出来的车辆总数S为0,第0帧车辆集合CARS(O)为空集; 步骤2:表示帧序的变量k自增1,获取第k帧图像f(k),令第k帧图像的车辆集合CARS(k)为空集; 步骤3 :获取车身轮廓集合 步骤3. I :取第k帧图像f(k)与背景图像之差的绝对值图像作为第k帧差分图dif(k); 步骤3. 2 :第k帧差分图dif (k)中处于监控区域内且灰度值大于阈值Tl的像素称为前景像素,否则称为背景像素,令前景像素灰度值为255,背景像素灰度值为0,得到第k帧二值图binary (k),Tl可取值为20 50 ; 步骤3. 3 :,对第k帧二值图binary (k)进行形态学开运算,得到第k帧前景图像obj (k),形态学开运算中的核是边长为m/2的矩形,核的参考点是核的中心点; 步骤3.4 :采用公知的Canny边缘检测法检测第k帧前景图像obj(k)中的边缘像素点,令边缘像素点的灰度值为255,非边缘像素点的灰度值为0,得到第k帧边缘图con(k);步骤3. 5 :采用公知的爬虫法获取第k帧边缘图con(k)中的所有车身轮廓,第k帧图像中的车身轮廓的集合表示为BODYS (k),车身轮廓是第k帧边缘图con (k)中边缘像素点的集合,对于任意一个车身轮廓body I内的任意一个像素点Dl,存在一个车身轮廓body I内的像素点D2,像素点D2是像素点Dl的8邻域像素点之一。
步骤3.6 :从第k帧图像的车身轮廓集合BODYS (k)中删除边界框脱离触发线的车身轮廓,轮廓的边界框是指包围轮廓的最小矩形,边界框脱离触发线是指如果车辆行驶方向为从下至上,边界框的4个顶点的Y轴坐标值均小于Y_T0UCH,如果车辆行驶方向为从上至下,边界框的4个顶点的Y轴坐标值均大于Y_T0UCH ; 步骤4:跟踪旧车 如果第k-1帧图像的车辆集合CARS (k-1)为空集,则进入步骤5,否则将第k-1帧图像中的车辆集合CARS(k-1)中的每辆车跟踪到第k帧图像,将第k-1帧图像的车辆集合CARS (k-1)中编号为n的车car (n, k-1)跟踪到第k巾贞图像的步骤如下 步骤4. I :在第k帧图像的车辆集合CARS(k)中添加编号为n的车car (n,k),令车 car (n, k)的块集合SUBS (n, k)为空集; 步骤4. 2 :将车car (n,k-1)的块集合SUBS (n,k-1)中每一个块跟踪到第k帧图像;步骤4. 3 :如果车car (n,k)的块集合SUBS (n,k)为空集,则从第k帧图像的车辆集合CARS (k)中删除车car (n, k),并结束对车car (n, k-1)的跟踪,否则进行步骤4. 4 ; 步骤4. 4 :标记车car (n, k)为旧车; 步骤4.5 :获取包围车car (n,k)的块集合SUBS (n,k)中所有块的顶点的凸包,令车car (n, k)的轮廓c (n, k)等于该凸包; 步骤4. 6 :计算车car (n, k)的块集合SUBS (n, k)中所有块的运动矢量的平均值,将该平均值保存为车car (n, k)的运动矢量mean (n, k); 块的运动矢量是指块的中心点坐标减去前一帧与该块对应的块的中心点坐标得到的矢量; 步骤5:更新旧车轮廓 如果第k帧图像的车辆集合CARS (k)为空集或者第k帧图像的车身轮廓集合BODYS (k)为空集,则进入步骤6,否则进入步骤5. I ; 步骤5. I :将第k帧图像的车身轮廓集合BODYS (k)中的所有车身轮廓标记为未查看;步骤5. 2 :从第k帧图像的车身轮廓集合BODYS (k)中获取一个标记为未查看的车身轮廓,如果获取成功,将该车身轮廓标记为已查看,否则进入步骤6 ; 步骤5.3 :从第k帧图像的车辆集合CARS(k)中找出边界框与该车身轮廓的边界框距离最近的车辆,两边界框之间的距离是指边界框中心点之间的距离,车辆的边界框是指车辆的轮廓的边界框; 步骤5. 4 :判断该车辆能否吞并该车身轮廓; 步骤5. 5 :如果该车辆能吞并该车身轮廓,则该车辆吞并该车身轮廓; 车辆吞并车身轮廓的方法如下 步骤5. 5. I :合并车辆的轮廓与车身轮廓,得到点集A ; 步骤5. 5. 2 :采用公知的Graham扫描法获取点集A的凸包,令该车身轮廓等于点集A的凸包; 步骤5. 5. 3 :从第k帧图像的车身轮廓集合BODYS (k)中删除该车身轮廓; 步骤5. 6 :返回步骤5. 2 ;步骤6 :检测新车 如果第k帧图像的车身轮廓集合BODYS (k)为空集,则进入步骤7 ; 步骤6. I :从第k帧图像的车身轮廓集合BODYS (k)中获取一个边界框宽度大于WIDE/3的车身轮廓,如果获取失败,则进入步骤7 ; 步骤6. 2 :车辆总数S自增1,在第k帧图像的车辆集合CARS(k)中增加编号为S的车car (S,k),标记car (S,k)为新车,令车car (S,k)的轮廓c(S,k)等于由步骤6. I获取的车身轮廓的凸包,令车car (S,k)的块集合SUBS(S,k)为空集; 步骤6.3 :从第k帧图像的车身轮廓集合BODYS(k)中删除由步骤6. I获取的车身轮 廓; 步骤6. 4 :采用车辆吞并车身轮廓的方法,用车car (S,k)吞并第k帧图像的车身轮廓集合BODYS (k)中所有能被car (S,k)吞并的车身轮廓; 步骤6. 5 :返回步骤6. I ; 步骤7 :添加填充块 如果第k帧图像的车辆集合CARS(k)为空集,则返回步骤2,否则在为第k帧图像的车辆集合CARS(k)中的每辆车添加填充块之后返回步骤2,为CARS(k)中任意一辆车car (n, k)添加填充块的步骤如下 对车car(n, k)的轮廓c (n, k)上的每个点进行如下操作 一设车car (n, k)的轮廓c (n, k)上的点坐标为(xl, yl),从以车car (n, k)的轮廓c(n,k)上的点(xl,yl)为顶点之一的四个块sub (xl_m/2,yl_m/2,k)、sub (xl-m/2, yl+m/2, k)、sub (xl+m/2, yl-m/2, k)、sub (xl+m/2, yl+m/2, k)中找出 4 个顶点全被c(n, k)所包围的块作为填充块,并标记填充块为sub(x2, y2, k),判断一个点D3是否被一个轮廓包围的方法是如果一个轮廓上有奇数个点满足X轴坐标值大于点D3的X轴坐标值,Y轴坐标值等于D3的Y轴坐标值,则点D3被该轮廓包围,二在第k帧二值图binary (k)中与填充块sub (x2,y2, k)位置和大小都对应的像素矩阵称为填充块sub (x2, y2, k)的二值块,如果填充块sub (x2, y2, k)的二值块的非零像素个数大于阈值T2并且车car(n,k)的块集合SUBS (n, k)中没有与填充块sub (x2, y2, k)重叠面积大于mXm/2的块,则将填充块sub (x2,y2, k)加入车car (n,k)的块集合SUBS (n,k),阈值T2取值为mXm的 0. 6^0. 8 倍。
2.如权利要求I所述的视频多车辆轮廓检测方法,其特征在于步骤4. 2中将第k-1帧图像中编号为n的车car (n, k-1)的块集合SUBS (n, k_l)中的块sub (x, y, k_l)跟踪到第k帧图像的步骤如下 步骤4. 2. I :设置矩形搜索区域rect, rect的中心点坐标表示为(xr, yr),如果车car(n,k_l)被标记为新车,则rect的中心点坐标等于块sub (x, y, k_l)的中心点坐标,xr等于x, yr等于y, rect的边长为WIDE/2,如果车car (n, k-1)被标记为旧车,则xr等于 x+mean (n, k-1). x, yr 等于 y+mean (n, k-1). y, rect 的边长为 mean (n, k-1)的长度,其中mean (n, k-1). x 和 mean (n, k-1). y 分别表示车 car (n, k-1)的运动矢量 mean (n, k-1)的 X 轴分量和Y轴分量; 步骤4. 2. 2 :按下式计算块sub (X,y, k_l)与第k巾贞图像中矩形搜索区域rect内的每个块的匹配值式中,match (x3, y3, k)表示块sub (x, y, k_l)与第k巾贞图像中矩形搜索区域rect内中心点坐标为(x3, y3)的块sub(x3, y3, k)的匹配值,(zx, zy)表示块sub(x,y, k_l)中的像素的坐标,P(zx+x3-x, zy+y3-y, k)表示第k巾贞图像f(k)中坐标为(zx+x3_x, zy+y3_y)的像素的灰度值,P(zx,zy,k-1)表示第k-1帧图像k-1)中坐标为(zx,zy)的像素的灰度值,将第k帧图像中矩形搜索区域rect内的所有块中与块sub (x,y,k-1)的匹配值最小的块表示为 sub (x4, y4, k); 步骤4. 2. 3 :在第k帧差分图dif(k)中与块sub (x4, y4, k)位置和大小都对应的像素矩阵称为块sub (x4, y4, k)的差分块,如果块sub (x4, y4, k)的差分块中的所有像素的平均灰度值大于阈值T3,则将块sub (x4, y4, k)加入到车car (n, k)的块集合SUBS (n, k)中,并保存块sub (x4, y4, k)的运动矢量为(x4-x, y 4_y),T3取值20 30。
3.如权利要求I所述的视频多车辆轮廓检测方法,其特征在于步骤4.5中获取包围车car(n,k)的块集合SUBS(n,k)中所有块的顶点的凸包的步骤如下 步骤4. 5. I :将SUBS (n, k)中每一个块的4个顶点加入点集B ; 步骤4. 5. 2 :采用公知的Graham扫描法获取点集B的凸包,该凸包即包围SUBS (n,k)中所有块的凸包,点集的凸包是指一个最小凸多边形,满足点集中的点或者在多边形边上或者在其内。
4.如权利要求I所述的视频多车辆轮廓检测方法,其特征在于步骤5.4中判断车辆能否吞并车身轮廓的步骤如下 步骤5. 4. I :如果车辆的轮廓的边界框与车身轮廓的边界框之间有交集,则车辆能吞并车身轮廓,结束判断车辆能否吞并车身轮廓,否则进入步骤5. 4. 2 ; 步骤5. 4. 2 :如果车辆的轮廓的边界框脱离最小车长线,则车辆不能吞并车身轮廓,结束判断车辆能否吞并车身轮廓,否则进行步骤5. 4. 3 ; 边界框脱离最小车长线是指如果车辆行驶方向为从下至上,边界框的4个顶点的Y轴坐标值均小于Y_LONG,如果车辆行驶方向为从上至下,边界框的4个顶点的Y轴坐标值均大于 Y_LONG ; 步骤5. 4. 3 :如果车辆的轮廓的边界框与车身轮廓的边界框的并集的宽小于WIDE,则车辆能吞并车身轮廓。
全文摘要
一种视频多车辆轮廓检测方法,首先画虚拟围栏圈出监控区域,画虚拟检测器获取车宽、最小车长等参数;再通过背景差分、二值化、形态学开操作、轮廓提取等一系列步骤得到车身轮廓集合;通过跟踪组成车辆的像素块,实现车辆的跟踪,得到车辆的初始轮廓;以车辆的初始轮廓为基础,吞并同属本车的车身轮廓,使正在驶入监控区域的车辆的轮廓更完整;从剩余的车身轮廓中选择较大的轮廓,作为新车初始轮廓,再吞并同属本新车的车身轮廓,使得新驶入监控区域的车辆被及时地检测出来。该方法解决了摄像机抖动、道路两旁图像干扰、车辆前景不连通、邻近车辆轮廓粘连问题。
文档编号H04N5/14GK102799857SQ201210202508
公开日2012年11月28日 申请日期2012年6月19日 优先权日2012年6月19日
发明者路小波, 熊阳, 路畅 申请人:东南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1