我的模式识别之旅

来源:互联网 发布:vlan环路 镜像端口 编辑:程序博客网 时间:2024/04/29 15:12

之前写了分类器的算法, 心中冲动想试下实现.

快毕业了, 在人才网上看到一个很好的职位, 要求模式识别, 做过相关软件: 车牌识别等

所以我就朝这方向, 做下车牌识别.

先复制下别人总结的特征:

3.1车牌的特征
车牌的本身具有许多固有特征,这些特征对于不同的国家是不同的,我国现在使用的车牌的模型化知识,主要是根据中华人民共和国机动车牌号GA36-92标准。它具有以下的特征:
1.字符特征:标准的车牌(军车,警车,教练车,外交车除外)上有七个字符,字符样式为X,XzX3X4X5X6X7}。其中X,是各省、直辖市的简称,Xz是英文字母,X3X4是英文字母或者阿拉伯数字,X5X6X7是3位阿拉伯数字。它们基本呈水平排列,在矩形内部存在较丰富的边缘。由此待识别的字符模板可以分为以下三类,汉字(包括省级简称、天干、地支以及“警”字),英文字母和阿拉伯数字。这部分特征多用在字符切分、构件字符特征数据库,对字符进行匹配识别方面。

2.形状特征:汽车前车牌的标准外轮廓尺寸为440 ×140,每个字符宽度为45,字符高度为90,间隔符宽10,字符间隔12,整个车牌的宽高比近似为3:1。车牌的边缘是线段围城的有规则的矩形,大小变化有一定的范围,存在最大长度和宽度。这部分特征主要用在车牌的定位分割方面。

3.灰度变化特征:车牌的底色、边缘颜色以及车牌外的颜色往往都是不相同的,表现在图像中就是灰度级互不相同,这样在车牌边缘形成了灰度突变边界。实际上,车牌的边缘在灰度上的表现是一种屋脊状边缘。在车牌区域内部,字符和车牌底的灰度较均匀的呈现波峰波谷。这部分特征主要用在对灰度图像进行车牌定位分割、字符切分方面。

4.颜色特征:现有的车牌底色和字符颜色搭配有四种类型,小功率汽车的蓝底白字车牌,大功率汽车的黄底黑字车牌,军警用的白底黑字车牌,国外驻华使馆用的黑底白字车牌。可以发现,车牌二值化有两种结果,其中蓝底白字车牌和黑底白字车牌的二值化结果是黑底白字,而黄底黑字车牌和白底黑字车牌的二值化结果是白底黑字。这部分特征主要用在对彩色图像进行车牌的定位分割。
张洁玮 -- <车牌识别系统中定位算法的研究>

我看其他的资料还有白底红字D

过了几天了, 为了车牌定位, 又被那些时而写错公式的论文忽悠一轮, 写了好几个基础算法, 不断配合着使用, 终于, 总结出自己合适的方法了, 只是粗定位哦~

1. 灰度化.

2. 灰度拉伸(感觉可有可无...因为有跟没有我的定位结果都一样........)

3. 中值滤波, 去下噪点, 平滑下图像.(这可是我初接触图像处理时理解的第一个平滑算法哦, 看来以后都用它了, 当然要看场景啦~)

3. 用(1, 1, 1, 1, 1, 1, 1)边缘算子, 检测水平边缘(为什么水平? 人家论文说, 车牌上的字, 水平边缘特征明显, 呵呵), 大概如下:

f(x, y) = abs([f(x-3, y) + f(x-2, y) + f(x-1, y) + f(x, y) + f(x+1, y) + f(x+2, y) + f(x+3, y) / 7] - f(x, y))

顺便阈值二值化, 我取阈值30

4. 忘了...看下代码...哦~~~~膨胀下先~特征明显点嘛.

5. 水平投影~呵

6. 水平定位: 根据水平投影图..................啊!表达不出来, 看下论文~~大家等下........

"从下向上搜索, 当出现第一个较大的波峰时,认为该波峰即为车牌的水平投影区域,波峰的起点和终点就是车牌的上下边界。车牌由7个字符组成,在图像边缘检测并二值化之后,正常情况下,车牌水平投影区域内每行的边缘点数大于14,根据实验结果,以15为限,作为判断波峰起点和终点的标准;车牌有一定的高度,根据实验结果,要求波峰的终点和起点之差大于20,小于120"

而我稍微改了下

从上向下搜索,(也可以下向上哇) 当出现较大的波峰时,认为该波峰为车牌的水平投影候选区域之一,波峰的起点和终点就是车牌的上下边界。车牌由7个字符组成,在图像边缘检测并二值化之后,正常情况下,车牌水平投影区域内每行的边缘点数大于14,根据实验结果,以14为限,作为判断波峰起点和终点的标准;车牌有一定的高度,根据实验结果,要求波峰的终点和起点之差大于图像高度除以36,小于图像高度除以6. 为什么是36和6呢??我自己测试之后得出的经验数据, 大家可以自己改~这步之后, 水平定为了几个候选水平区域, 也可能只有一个, 如果运气好的话.

7. 资料原话:

"在确定了车牌上下边界之后,对车牌上下边界内的图像进行垂直投影。由于车牌区域包含7个字符,字符间有字间距,所以投影后,车牌区域会出现峰、谷、峰的特性[3]。相邻的两个波峰,如果它们的间隔小于T(T为经验值),则进行区域合并,得到若干候选区域。根据以下规则[4]筛选出车牌区域:(1)二值化图像中灰度为1和灰度为0的像素比大于0.25;(2)二值化图像灰度跳变次数范围[5,15];(3)区域的长宽比[2,5]。"
我不用这种方法..自己想了下, 得出:

对6所得出的每一个候选水平区域, 做垂直投影(即只对水平区域内的几行进行投影), 如资料所说, 字符间有字间距,所以投影后,车牌区域会出现峰、谷、峰的特性, 而且,两个相邻的波峰, 中间会有间隔(就是有一段小距离没有边缘点). 所以我设置一个间隔值20,如果相邻2波峰之间的间隔小于20, 则认为是同一区域(如果在车牌左右20像素都有边界, 那么定位将会被拉伸而不准确, 但这种情况暂时遇到较少~).如果大于20, 则认为找到了一物体, 接着判断此物体是否为车牌, 因为车牌大小是440 * 140 ≈ 3.14, 且不论除不尽而带来的误差, 即使是整除, 也难以保证物体长宽比为此比值....因为图像存在噪声, 又可能车牌倾斜了, 还有很多说不尽的秘密, 所以我定了比值为2.0到5.5之间, 为什么? 测试得出, 大家可以自己测试, 定下自己的值. 如果物体长宽比为2.0到5.5之间, 那么我就认为是车牌的候选区域. 如此对6得出的每一个候选水平区域做这样的操作. 最终定了一组车牌的候选位置.

 

我也说了是粗定位~~所以之后还有精确定位, 倾斜矫正. 不过还得继续看论文研究.

发几张测试的图片.本人MFC较烂~大家不要笑

 

 

 

 

 

 

 

原创粉丝点击