3.1 特征提取
利用SVM自身结构可以实现有效的特征提取,选择直接提取像素灰度特征。图像像素点之间不是孤立的,相互之间存在着相关性,体现了一种纹理。可以通过提取一些特定像素的灰度值作为整幅图像的特征,同时减少了计算量。首先将每幅图像切割成若干个N×N子块,再将每一子块标注为牌照区域(+1)和非牌照区域(-1)两类,然后使用图1所示“米”字型模型提取像素灰度值(图中阴影为要提取的像素点)。这样每幅子图的特征维数由N×N减少到4N-3,提高了训练和分类速度。
3.2 SVM分类器
SVM分类器分为三层结构,结构示意见图2。输入层的维数为子图的特征维数4N-3,输入值是灰度值。隐含层的维数是由训练获得的支持向量决定,即由训练阶段自动获得,而且二次规划在凸集下的解是全局最优解,避免陷入局部最小。隐含层计算输入向量与支持向量之间的内积,完成非线性映射,通过核函数一步来实现的。输出层的输出就是对隐层的输出与权值ωi的乘积求和,权值aiyi也是在训练中获得的。
SVM中研究最多的核函数主要有三类:多项式、径向基函数(RBF)和多层Sigmoid神经网络。实验中使用的是多项式核函数,形式为:
作为一种基于样本学习的方法,我们希望训练样本集尽可能地大,以获得比较充分的代表性。然而考虑到实际的限制,这个尺寸又必须是适中的。因此,问题就是如何构造一个全面又可行的训练样本集。对于车牌定位问题,所有包含牌照区域的图像可以作为正样本,困难点是收集负样本,因为实际上存在太多的不包含牌照的图像可以作为负样本。如何在这些图像中选取具有代表性的子集,实验中采用了一种叫“自举”(bootstrap)的方法,他已被Sung和Poggio成功地应用于人脸识别。主要思想就是一些负样本(非牌照)是在训练中获得而不是在训练以前,具体实现步骤如下:
(1)建立包含正样本(牌照区域)和负样本(非牌照区域)的训练集合N1;
(2)用N1训练SVM;
(3)用训练好的SVM分类器对随机选取的非牌照样本进行分类测试,收集那些被错分为牌照的样本;
(4)随机选取20%的错分类样本加入到训练集N1;
(5)重复(2)~(4)步直至没有再发现错分的样本;
(6)使用最终获得的N1训练SVM。