OpenCV-基于浏览器的在线车牌识别系统
车牌识别系统包括视频处理、图像处理、车牌定位、字符分割和字符识别五个模块。其中视频处理模块主要进行视频分帧处理;图像处理模块进行图像灰度化、边缘检测、去噪处理和图像二值化处理;车牌定位模块进行图像倾斜校正、图像分割和图像归一化处理;字符分割模块进行字符图像定位、字符图像分割和字符图像细化处理;字符识别模块进行提取特征、模板比对和结果识别处理。
本系统的系统功能结构图如图所示
基于边缘检测的车牌定位
这里说的“边缘”就是指其周边像素亮度有阶段性跳跃变化的像素的集合。“边缘”的两侧属于不同的两个区域,并且每个区域的灰度均匀一致,但是这两个区域的亮度在特征上存在差异。“边缘检测”的任务是精准定位边缘位置、抑制噪声。检测的方法有多种, 例如罗伯茨算子、Sobel算子和Prewitt算子。这些方法正是利用物体“边缘”处亮度差异大这一特点来检测的“边缘”。不同算子对不同的边缘类型的敏感度是不同的, 产生的检测效果也是不相同的, 经过实验可知, Roberts边缘算子是定位相对准确的,它是利用方差数来寻找边缘的算子的; Sobel算子和Prewitt算子对噪声具有一定程度的抑制的能力的, 但却不能完全不受伪边缘影响。针对不同的环境和要求, 选择合适的算子来对图像进行边缘检测才能达到好的效果。在系统中选用了Sobel算子来进行边缘检测,只采用了两个方向的算子,所以对水平和垂直方向的边缘检测效果良好。边缘检测效果如图所示。
图像灰度化
从视频中截取的彩色的车辆图片中包含了许多的颜色信息,但是这些颜色信息对车牌识别并没有什么用处,首先会非常严重的占用内存的存储资源,其次在运算处理上会极大程度的降低系统的工作效率,延长响应时间。所以图像识别的首要步骤就是将原来截取的彩色图像转化为灰度图,除去其中大量的无用信息。 由彩色转换为灰度的过程就叫做灰度化处理。
在RGB模式中,当R=G =B时,表示一个灰色的颜色,其中R值称为灰度值,因此,灰度图像中,一个字节存放的灰度值就可以直接表示图像中的一个像素了,只有强度信息,而没有颜色信息的图像,存储和处理灰度图像只需要一个数据矩阵,从而降低存储资源的占用,提高系统的运算效率。灰度化处理方法主要有以下三种:
(1)最大值法:让R,G,B的值全部等于最大的一个。公式:R=G=B=max(R,G,B)。
(2)平均值法:求每个像素的R、G、B三个值的平均值,然后将这个平均值赋予给这个像素的R、G、B。公式:R=G=B=(R+G+B)/3。
(3)加权值法:R、G、B三个值的加权值分别为0.11、0.59和0.3。公式:Y=0.3R+0.59G+0.11B。
我采用的是加权值法,通过公式F(x,y)=0.11 × B(x, y)+0.59 × G(x, y)+0.3 × R(x, y)将图片中无用的颜色信息去除,保留有用的亮度图,效果如图
图像二值化
为了让图像进一步简单,减小所占容量,使汽车车牌的轮廓更加明显的显现,就需要对已经经过灰度化处理的的图像进行二值化处理,二值化就是将置灰图像上的点的灰度重新设置为0或255,使整个车牌图像呈现出黑白效果,将图像上的将256个不同亮度的灰度图像像素通过合适的阈值选取而反映图像整体和局部特征的。所有灰度大于或等于阈值的像素全部被判定为特定物体,灰度值用255表示,其余像素点灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他级别灰度值的背景下,阈值法的使用就可以得到比较的分割效果。如果物体背景的差别表现不在灰度值上,我们可以将差别特征转换为灰度值的差别,然后利用阈值技术分割图像。
在二值化过程中,最重要的问题就是阈值的选取,本系统运用的是全局阈值法Ostu。Otsu法就是最大类间方差法,该方法由Otsu在1979年提出,所以又称Otsu二值化方法,是一种经典的全局阈值法。这种二值化阈值选取算法相对比较简单,得到广泛的应用。Otsu方法的思想是对像素进行划分,使划分得到的各类之间的差值最大化来确定最合适的阈值。该方法对于目标和背景的明显分离的图像效果很好,适用于车牌识别系统中的图像处理。
进行图像二值化最关键的在于阈值的选择,根据选择好的值T来为图像进行分层,区分物体本身和周边环境。设定原来的灰度图像为f(x,y),处理后的二值化图像为g(x,y),那么二值化的整个过程可以表示为:,式中f(x, y)是指在原来灰度图像中(x,y)像素点的灰度值,g(x,y)则是经过二值化后该像素点的标志值,其中0表示该像素点是黑点,1表示是白点。实验结果如图
- 微信
- 赶快加我聊天吧
- 开发交流群
- 海纳百川,大家来水