3车辆的特征提取
3.1特征提取
特征提取是车型识别的关键,理论上应尽量选择能唯一标识不同车类的特征,但这在实际中并不现实,根据人类验证知识可知,车辆形状、车长和车高是车型识别的关键参数。为了达到对车辆分类的目的,仅仅确定车辆的轮廓是不够的,应该提取车辆的主要信息与参数,才能对车辆进行准确分类。本文采用的方法是提取车辆长度和车辆高度两个关键参数。找到处理后图像横坐标最大的像素和横坐标最小的像素,将两者横坐标最大的像素和横坐标最小的像素,将两者横坐标相减,便可得到车辆的相对长度,同理,也可求出车辆的相对高度。 车辆图像经过边缘提取和二值化处理后,边缘成了由像素组成的连续曲线。对于车辆轮廓而言,它们是一个不规则的多边形。本文仅按汽车的应用功能对汽车车型进行大致的分类,即可分为客车、轿车和货车三类。通过这三类车型的统计分析,选取车长和车高为特征参数。 从实验中可以得到表3-1:
表3-1车长与车高参数
分类 轿车 客车 货车 长度 <6米 6-9米 >9米 高度 <2.1米 2.1-2.7米 >2.7米
3.2车型轮廓提取
由图像处理后的车辆图像为图3-1。由于光照等原因,该图像存在噪声,所以对车辆图像进行滤波和小面积删除处理,使得更加清晰的从车辆图像中提取出车辆的轮廓。车辆轮廓的提取在本设计中利用的是Matlab程序实现的。滤波和小面积删除的过程如下: szuida=max(max(s));
- -
26
szuixiao=min(min(s)); tk=(szuida+szuixiao)/2; bcal=1;
Sdaxiao=size(s); while(bcal) ifore=0; iback=0; isum=0; backsum=0; for i=1:Sdaxiao(1) for j=1:Sdaxiao(2) tmp=s(i,j); if (tmp>=tk) ifore=ifore+1; isum=isum+double(tmp); else
iback=iback+1;
backsum=backsum+double(tmp); end end end
so=isum/ifore; sb=backsum/iback; tktmp=uint8((so+sb)/2); if(tktmp==tk) bcal=0; else
tk=tktmp; end
- - 27
end
s1=im2bw(s,double(tk)/255); figure,imshow(s1); s2=medfilt2(s1,[7,7]); s3=bwareaopen(s2,200); figure,imshow(s3);
图3-1 图像处理后的车辆图像
滤波和小面积删除后的车辆的图像如图3-2所示。
- - 28
图3-2 滤波和小面积删除后的车辆的图像
3.3目标区域的填充
经过处理后的车辆轮廓图像存在着离散的点与线为了便于提取车辆的信息特征,对车辆边缘化图像需做进一步的处理,可采用图像横向填充、图像纵向填充、图像修正等技术。经过噪声滤波后,背景中的噪声已完全消除,只剩下目标车辆区域。但此时目标车辆的轮廓并不完整,区域内存在孔洞,无法直接提取车辆特征,应此需要对图像做填充以形成完整的车辆区域。
3.3.1图像横向填充
对图像的每一行惊醒扫描,如果在某行从左向右遇到第一个亮点,记下其坐标;然后在同一行从右到左寻找第一个亮点,记下其坐标;那么同一行把两个亮点之间的所有像素点改为亮点,进而实现了车辆图像的横向填充。横向填充的流程图如图3-3所示。
- - 29
开始扫描图像中的第一行记录一行中最左边的亮点坐标X1记录一行中最右边的亮点坐标X2从X1至X2之间像素点改为亮点扫描图像的下一行Y扫描结束N结束图3-3车型图像横向填充流程图
车辆图像横向填充后的效果如图3-4所示。
图3-4横向填充后的车辆图像
- -
30