17.3 检测交通视频中的汽车目标http://book.51cto.com 2009-06-24 13:35 张强/王正林 电子工业出版社 我要评论()
第17章 MATLAB图像分割实战 17.3 检测交通视频中的汽车目标 检测视频中汽车目标的基本步骤如下: 读取视频文件; 读取一帧图像并检测图像中的汽车; 使用循环逐帧对图像进行检测。 下面我们通过一个例子来显示如何在交通视文件流中检测浅颜色的汽车。 例17-4 检测运动的汽车。 视频文件是由一帧一帧的图像按照一定顺序连接而成,对图像的处理方法同样适用于对视频文件的处理,只不过是逐帧选取图像,然后对每一帧图像进行处理,最后再将处理后的每帧图像按照原来的顺序连接成视频。 在智能交通中,我们通常需要对汽车的车牌号进行识别或者对某种颜色的汽车进行检测。 【本例要点】本例中使用了图像处理工具箱中很多视频处理的函数,如读取文件mmreader函数,并且使用implay函数使视频可视化。视频处理的基础仍是图像处理,在本例中根据汽车的颜色和形状来确定汽车的存在,这其中涉及很多数学形态学的操作,包括imextendedmax,imopen,bwareaopen等函数。 本例的基本步骤如下: 读取视频文件。 代码如下:
在这一步骤中,首先使用mmreader函数从多媒体文件中读取视频数据,mmreader函数可以读取的文件格式包括:AVI,MPG,MPEG,WMV,ASF和ASX,本例程序中读取的视频格式为AVI格式,使用implay函数播放视频如图17-11所示,mmreader函数还可以返回关于多媒体文件的信息,如下所示:
为了获取关于多媒体文件更多的信息,可以使用get函数,它可以获得诸如视频持续时间、路径等更多的信息,如下所示:
读取一帧图像并进行处理。 代码如下:
对于视频数据,包含很多帧图像,我们一般采取的处理方法是在视频数据中选取一幅有代表性的图像帧,在这幅图像中开发相应的算法,然后把这个算法应用到所有帧图像中。 我们选取一帧图像,这帧图像中包含深颜色的汽车和浅颜色的汽车。除了汽车外,还有很多其他结构的目标,例如公路、草坪等。 在检测浅颜色汽车前,一般需要尽可能地简化图像,通常使用的方法是采取一系列的形态学操作来去除这些无关的目标。由于这个视频文件的每帧图像都是真彩色图像,因此首先将真彩色图像转化为灰度图像,如图17-12左图所示。
在视频数据中,去除深色汽车一般使用imextendedmax函数,这个函数返回二值图像,其中亮度值大于某个阈值的区域会在结果中显示出来,而亮度值小于这个阈值的目标则变成背景,如图17-12中间的图像所示。 为了去除深颜色的汽车,可以使用像素区域工具确定图像中深颜色汽车所在区域的像素值,在这个程序中,调用imextendedmax函数时使用50作为阈值。 虽然在处理后的图像中,大部分深颜色目标已经被去除,但仍然有少部分无关的目标存在,尤其是公路上的标志线。使用imextendedmax函数不能去除公路上的标志线,因为公路标志线区域的像素值也超过给定的阈值。 为了出去这些目标,可以使用形态学的开操作函数imopen来进行开操作。这个函数在使用形态学处理二值图像,在保留大目标的同时,可以去除小目标,如图17-12右图所示。 在使用形态学操作时,要首先确定函数使用的结构元素大小和形状,由于公路上的标志线是很长很细的,因此可以使用圆形的结构元素对这些目标进行去除,其中圆形结构的半径等于标志线的宽度。在这个程序中,标志线的宽度大约为2,因此结构元素的半径也为2。 经过处理后的图像中,包含的目标为浅颜色的目标,即图像中浅颜色的汽车。使用bwlabel函数可以返回一个标签矩阵,通过这个标签矩阵可以进一步求得更多的参数。例如可以使用regionprops函数获取目标的质心,并且使用质心来确定浅颜色汽车标签的位置。 使用循环处理视频数据。 代码如下:
由于交通视频是由一系列的图像连接而成,在处理时需要使用循环逐帧对数据进行处理。处理后的视频数据中使用标签对浅颜色汽车进行标注,如图17-13所示。
|
|