数字图像处理学习笔记-03(基于Matlab的车牌识别系统的设计)

数字图像处理学习笔记-03(基于Matlab的车牌识别系统的设计)

开始学习使用OpenCV对图像进行处理了,将陈年旧物整理一下,这是数字图像处理课程的期末课题实验之一。

一、实验目的

(1)巩固和综合应用数字图像相关知识;
(2)实现车牌识别;
(3)提高分析问题和解决问题的能力 。

二、理论基础及算法设计

实验要求:实现车牌定位、车牌字符分割和光学字符识别等,最终组成牌照号码输出。
一个完整的车牌号识别系统要完成从图像采集到字符识别输出,过程相当复杂,基本可以分成硬件部分跟软件部分,硬件部分包括系统触发、图像采集,软件部分包括图像预处理、车牌定位、字符分割、字符识别四大部分,一个车牌识别系统的基本结构如图:
在这里插入图片描述

(一)图像预处理

1.1RGB图像

RGB图像:又称彩色图像,RGB色彩就是常说的三原色,R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色)。自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成,RGB图像用三维数组表示,最后一维长度为3,(1,2,3分别表示RGB三个分量),对于每一个分量,数值范围也是0~255。
红、绿、蓝三个通道的缩略图,都是以灰度显示的,用不同的灰度色阶来表示“ 红,绿,蓝”在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255,0表示亮度最低,255表示亮度最亮。只有三个通道同时有值才可以显示出彩色(如红色通道显示为红色)。所以车牌原始图像是RGB图像。

1.2灰度图像

灰度图像:是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像的每个像素只有一个亮度信息的单色图像。其中的亮度信息,采样自从白色与黑色之间划分的若干等级。我们常说的灰度阶,就是从白色到黑色划分的等级数。一般为2n,常用的灰度阶为256,用单个字节(8bit,256=28)就可以存储每一个灰度值,灰度图像用二维数组表示。
目前,汽车牌照识别系统通常采集到的都是彩色图片。彩色图像中的每个像素的颜色有 R、G、B 三个 分量决定,每一个像素点可以有 1600 多万的颜色值, 需要大量的存储空间,不利于图像的快速处理,而灰度图像 R、G、B 三个分量都相同,其每一个像素点的 变化范围为 255 种,大大减少了存储的空间和计算量灰度图像的描述仍然反映了整幅图像的整体和局部的 色度和亮度等级的分布和特征,所以在车牌定位处理 中一般先将彩色图像转变成灰度图像来提高处理的速度。
将彩色图像(RGB图像转化为灰度图像的过程称为图像灰度化。)要表示灰度图,就需要把亮度值进行量化,有四种方法:见表1
在这里插入图片描述
在本文中,我们利用加权平均法将彩色图像转换为灰度图像后,为了更好地突出车牌的区域,需要对灰度图像进行拉伸和图像增强处理,突出对比度。图2右图是经过拉伸和增强处理后的图片。
在这里插入图片描述

1.3二值化图像

对采集的图像进行灰度处理后需要对图像进行二值化的处理来区分前景和背景。车牌图像的二值化的好坏直接影响着车牌的定位。对灰度图像进行二值化 要设定一个阀值,如公式(2)。根据阈值来判断像素是黑还是白。
在这里插入图片描述
公式(2)中,T 为阀值,当灰度图像的值大于或 等于 T 的时候取 1,否则取 0,可见图像二值化的关键 在于阀值的选取。阀值的选取常用的有全局阀值、局部阀值和自适应阀值三种方法。

图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。在matlab中,二值化图像常常为0和1数组表示,二值化的常用算法有几种:

  1. 最大方差阈值:把直方图在某一阈值处分割成两组,当被分成的的两组之间方差最大时,决定阈值。

  2. 双峰法选择阈值:双峰法的原理认为图像由前景和背景或者两族颜色组成,在灰度直方图上,两族颜色像素灰度值的分布形成山峰状态。在双峰之间的最低谷处就是图像分割的阈值所在,根据这一原理可以简单算出阈值,进行图像分割。Show一下直方图即可确定阈值。但是这种方法容易丢失一些图像细节。

  3. 迭代法:设置阈值的初始值为图像灰度最大值和最小值的平均,根据阈值划分图像为目标和背景,并分别将其灰度值求和,计算目标和背景的平均灰度,并判断阈值是否等于目标和背景平均灰度的和的平均,若相等,则阈值即为其平均,否则,将阈值设置为目标和背景灰度平局值的和的一半,继续迭代,直至计算出阈值。

    • 算法过程:
      1、求出图象的最大灰度值和最小灰度值,分别记为Pmax和Pmin,令初始阈值T0=(Pmax+Pmin)/2;
      2、根据阈值T(k)(k=0,1,2…,k)将图象分割为前景和背景,分别求出两者的平均灰度值H1和H2;
      3、求出新阈值T(k+1)=(H1+H2)/2;
      4、若T(k)=T(k+1),则所得即为阈值;否则转2,迭代计算
  4. 最大类间误差法(Otsu)
    大津法是属于最大类间方差法,它是自适应计算单阈值的简单高效方法,或者叫(Otsu)。

大津法由大津于1979年提出,对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。
图像的总平均灰度为:u=w0* u0+w1 * u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2 最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为 w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。直接应用大津法计算量较大,因此一般采用了等价的公式g=w0 * w1 *(u0-u1)2。(大津法的分割效果是最好的一个)。

5.由灰度拉伸选择阈值:大津法是较通用的方法,但是它对两群物体在灰度不明显的情况下会丢失一些整体信息。因此为了解决这种现象采用灰度拉伸的增强大津法。在大津法的思想上增加灰度的级数来增强前两群物体的灰度差。对于原来的灰度级乘上同一个系数,从而扩大了图像灰度的级数。试验结果表明不同的拉伸系数,分割效果差别比较大。

上面方法基本概括了一些阈值选择的方法,还有一些方法如动态阈值,全局阈值等和基本和上面介绍的方法类似,在具体使用是还需要特别处理。

(二)数学形态学处理进行车牌粗定位

2.1canny算法边缘检测

Canny边缘算子具备对信号干扰适应性强、检测边缘准确等优点。但使用Canny边缘算子进行边缘检测时抗噪声干扰能力弱,会模糊图像边缘,造成假边缘较多、边缘信息缺失。
Canny算子的原理如下:
第一步:使用高斯滤波对图像进行降噪处理;
第二步:使用一阶偏导的有限差分来计算梯度的幅值和方向:
梯度幅值 M(x,y) 和梯度方向/theta (x,y) 的计算公式如下:
在这里插入图片描述
其中,Ex(x,y)和Ey(x,y)分别为边缘通过点乘Sobel算子的到的不同方向梯度值,其计算公式如下:
在这里插入图片描述
第三步:对梯度幅值进行非极大值抑制:
由于在高斯滤波的过程中有将边缘宽度放大的可能,因此为使边缘宽度尽量为一个像素点,我们需要过滤非边缘点。若一个像素点属于边缘点,则此像素点在梯度方向上的梯度值最大,否则其灰度值为0。计算公式如下:
在这里插入图片描述
第四步:使用双阈值算法检测和连接边缘:
这是该算子最核心的一步,主要思想设置两类阈值,上阈值与下阈值。若梯度幅值小于下阈值,即认为是非边缘信息,将其排除(像素值设为0);若梯度幅值介于下阈值与上阈值之间,若该像素点和边缘相连则认为其是连续边缘的一部分,否则排除掉;若梯度幅值大于上阈值,则认为其是边缘。

2.2数学形态学处理

首先介绍一下形态学中的一些基本概念。
(1)用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具;
(2)基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析识别的目的;
(3)形态学图像处理的数学基础和所用语言是集合论;
(4)形态学图像处理的应用可以简化图像数据, 保持它们基本的形状特性,并除去不相干的结构;
(5)形态学图像处理的基本运算有4个:膨胀、 腐蚀、开操作和闭操作。

2.2.1膨胀和腐蚀

二值图像的分析首先是区分所提取的不同的目标物,之后,对不同的目标物特征差异进行描述与运算,最后获得所需要的分析结果。
经过图像分割后,获得了目标物与非目标物两个不同的对象,但是提取的目标物存在以下问题:
(1)提取的目标中存在伪目标;
(2)多个目标存在粘连或断裂;
(3)多个目标形态不同。
我们在车牌处理的过程中,将图像二值化处理后会发现结果与我们想要的目标有较大的区别,通常会有一些其他的图形干扰,这个时候就需要通过图像的腐蚀或者是膨胀将结果变成我们希望出现的样子。
膨胀:膨胀是在二值图像中“加长”或“变粗”的操作。这种特殊的方式和变粗的程度由一个称为结构元素的集合控制。(实际就是将结构元素的原点与二值图像中的1重叠,将二值图像中重叠部分不是1的值变为1,完成膨胀)。
公式:
A和B是两个集合,A被B膨胀定义为:
在这里插入图片描述
若B对称,则把B平移a后得到Ba,若Ba击中A,记下a点,所有满足上述条件的a点组成的集合称A对B的膨胀。
在这里插入图片描述
公式解释:
① B的反射进行平移与A的交集不为空;
② B的反射:相对于自身原点的映象;
③ B的平移:对B的反射进行位移。
图解:
在这里插入图片描述
注意:
(1)膨胀运算只要求结构元素的原点在目标图像的内部平移,换句话说,当结构元素在目标图像上平移时,允许结构元素中的非原点像素超出目标图像的范围。
(2)膨胀运算具有扩大图像和填充图像中比结果元素小的成分的作用,因此在实际应用中可以利用膨胀运算连接相邻物体和填充图像中的小孔和狭窄的缝隙。
应用:膨胀最简单的应用是将裂缝桥接起来和填充目标中的孔洞。
膨胀函数:D = imdilate(A,B)
编码:

A = imread('D:\数字图像处理\第九章学习\Fig0906(a).tif');
B = [0 1 0; 1 1 1; 0 1 0];   %指定结构元素由01组成的矩阵
A2 = imdilate(A, B);    %二值图像
subplot(1,2,1), imshow(A);title('(a)包括断开文本的输入图像:');
subplot(1,2,2), imshow(A2);title('(b)膨胀后图像:');

在这里插入图片描述
腐蚀:与膨胀相反,对二值图像中的对象进行“收缩”或“细化”。(实际上将结构元素的原点覆盖在每一个二值图像的1上,只要二值图像上有0和结构元素的1重叠,那么与原点重叠的值为0)同样由集合与结构元素完成。
公式:
A和B是两个集合,A被B腐蚀定义为:
在这里插入图片描述
把结构元素B平移a后得到Ba,若Ba包含于X,记下这个a点,所有满足上述条件的a点组成的集合称X被B腐蚀的结果。
公式解释:
① A被 B 腐蚀是包含在A中的B由z平移的所有点z的集合。
② B包含在A中的声明相当于B不共享A背景的任何元素。
图解:
在这里插入图片描述
注意:
(1)当结构元素中原点位置不为1(也即原点不属于结构元素时),也要把它看作是1,也就是说,当在目标图像中找与结构元素B相同的子图像时,也要求子图像中与结构元素B的原点对应的那个位置的像素的值是1。
(2)腐蚀运算要求结构元素必须完全包括在被腐蚀图像内部:换句话说,当结构元素在目标图像上平移时,结构元素中的任何元素不能超过目标图像范围。
(3)腐蚀运算的结果不仅与结构元素的形状选取有关,而且还与原点位置的选取有关。
(4)腐蚀运算具有缩小图像和消除图像中比结构元素小的成分的作用,因此在实际应用中,可以利用腐蚀运算去除物体之间的粘连,消除图像中的小颗粒噪声。
腐蚀函数:
A2 = imerode(A, se)
图像腐蚀应用:消除图像细节部分
编码:

f = imread('D:\数字图像处理\第九章学习\Fig0908(a).tif');
se = strel('disk', 10);
g = imerode(f, se);
se = strel('disk', 5);
g1 = imerode(f, se);
g2 = imerode(f, strel('disk', 20));
subplot(2,2,1), imshow(f);title('(a)原始图像的尺寸为480x480像素:');
subplot(2,2,2), imshow(g);title('(b)用半径为10的圆形腐蚀:');
subplot(2,2,3), imshow(g1);title('(c)用半径为5的圆形腐蚀:');
subplot(2,2,4), imshow(g2);title('(d)用半径为20的圆形腐蚀');

在这里插入图片描述
分析:
假设要除去图a中的细线,但想保留其他结构,可以选取足够小的结构元来匹配中心方块,但较粗的边缘线因太大而无法匹配全部线。图b几乎成功去掉了模板中的细线,图c中一些引线还没有去掉,图d中引线都被去掉了,但是边缘引线也丢失了,所以选取合适的结构元很重要。

2.2.2膨胀与腐蚀的结合

开操作
应用:使图像的轮廓变得光滑,断开狭窄的间断和消除细的突出物。
公式:使用结构元素B对集合A进行开操作,定义为:在这里插入图片描述

先用B对A腐蚀,然后用B对结果膨胀。
与开操作等价的数学表达式为:在这里插入图片描述
描述:A o B 的边界通过B中的点完成。B在A的边界内转动时,B中的点所能到达的A的边界的最远点。
在这里插入图片描述
则有:
(1)A o B 是 A的子集合。
(2)如果C是D的子集,则 C o B是 D o B的子集。
(3)(A o B) o B = A o B
闭操作
应用:同样使图像的轮廓变得光滑,但与开操作相反,它能消除狭窄的间断和长细的鸿沟,消除小的孔洞,并填补轮廓线中的裂痕。
公式:使用结构元素B对集合A进行闭操作,定义为:在这里插入图片描述

先用B对A膨胀,然后用B对结果腐蚀。
描述:A · B的边界通过B中的点完成 。B在A的边界外部转动 :
在这里插入图片描述
则有:
(1)A 是 A .·B的子集合;
(2)如果C 是 D 的子集 , 则C · B 是 D · B的子集;
(3)(A · B) .·B = A · B。
函数分别为:开操作:C = imopen(A, B)闭操作:C = imclose(A, B)
A为二值图像,B为0,1矩阵组成,并且是指定结构元素。
函数imopen 和 imclose 的应用:
编码:

f = imread('D:\数字图像处理\第九章学习\Fig0910(a).tif');
se = strel('square', 40);
fo = imopen(f, se);
fc = imclose(f, se);
foc = imclose(fo, se);
subplot(2,2,1), imshow(f), title('(a)原图');
subplot(2,2,2), imshow(fo), title('(b)开操作');
subplot(2,2,3), imshow(fc), title('(c)闭操作');
subplot(2,2,4), imshow(foc), title('(d) (b)的闭操作结果');

在这里插入图片描述

分析:
(1)图(a)中的图像设计了一些用于演示开操作和闭操作的特征,比如细小突起、细的桥接点、几个弯口、孤立的小洞、 小的孤立物和齿状边缘;
(2)图 (b)显示了结果。注意,从图中可以看出,细的突出和外部点的边缘的不规则部分被去除掉了,细的桥接和小的孤立物也被去除了;
(3)图 ©中的结果: 这里,细的弯口、内部的不规则边缘和小洞都被去除了。先做开操作的闭操作的结果有平滑效果;
(4)图 (d)显示了平滑过的物体。
(5)经过数字形态处理进行了车牌粗定位后,车牌区域形成连通候选区域,还需要采用彩色像素点统计,行列扫描的方式实现车牌精准定位,即改进的像素中线扫描法。自上而下,对每行进行扫描,统计第i行像素值为1的像素点数目Blue_y(i,1),找到Blue_y(i,1)最大值所在的行,分别向下向上扫描,如果满足设定的条件,则停止扫描,这样就找到了车牌的上下边界。下一步就是确定车牌的左右边界,原理和上下扫描一致,这样就得到了准确的车牌区域。
在这里插入图片描述

(三)采用垂直投影法与阈值分割、车牌固定特征分割

在牌照字符的分割基础上,结合目前使用最多的投影法和车牌固定边界的多阈值分割算法。它的大致实现过程如下:第一步先对上一节粗定位完牌照的只有黑白两色的图像bg2实施伪彩色标记。第二步获取标记区域各连通块的尺寸参数,用作下一步遍历的索引。第三步投影得直方图,取一个分割阈值,划分出背景和字符的范围,也就是在直方图histrow(histcol)中区分谷底点和上升点。第四步分析峰谷,得到例如最大峰中心距等参数。最后一步,根据上一步求得的参数分割字符。
在这里插入图片描述

3.1车牌区域彩色标记与特征提取

对粗定位车牌后的二值图像bg2 作连通区域4邻域的伪彩色标记的目的是为了方便计算出车牌区域的面积、宽高度以及车牌框架的大小、区域开始和结束的行列位置等区域特征参数,是为后续的车牌投影分析操作作预准备。在这一步骤中,首先以4领域大小为模块对二值图像bg2 作区域标记,给每块连通区域块标记上序数,获取图像中连通区域的块数和图像矩阵L,初步计算出各连通区域的框架大小,然后再根据车牌的先验知识设置亮度高度的合理阈值筛选出真正车牌区域的连通域,记录下该连通域的序数,最后对车牌区域块作区域特征提取,获取车牌的框架大小、宽高度、宽高比例以及开始位置点的行、列数等参数。
在MATLAB中对车牌号码为粤A6ZC93和粤AC609Z两车辆的车牌粗定位二值图像作伪彩色标记效果如下图:
在这里插入图片描述

3.2车牌预处理
3.2.1基于Radon变换的倾斜校正

从车体侧面拍摄的车辆图像中提取出来的牌照会出现角度的倾斜,为了后续操作的方便,需要进行角度的校正。本系统选择较为简单的Radon倾斜校正。
Radon变换是一种根据图像在某一方向的投影进行变换的方法。Rodan变换的倾斜校正的大致过程如下:
第一步, canny算子提取出已经二值化的牌照的边缘;
第二步, Radon变换计算出牌照的180°和90°方向的倾斜角;
第三步,逆旋转相应角度修正倾斜。
它的具体原理如下:
在高等数学中,要对函数f(x,y)作横轴上的投影,实则是求f(x,y)在横轴这个方向的线积分。对平面空间函数f(x,y)作Radon变换,实则是求该函数在y方向上的线积分,有如下关系:
在这里插入图片描述(5.1)
其中坐标变换公式为:
在这里插入图片描述(5.2)
由此,可得Radan变换有如下性质:

在这里插入图片描述(5.3)

由公式5.3,知道Rθ(x)是与x有关的函数,同时也是θ的周期函数,基波周期为 。由映射关系,若Rθ(x)在x处取得MAX时,角度是 ,则 Rθ+180°(x)也取得MAX,倾斜角为θ+180°。以此为依据,可以实现对车牌图像的倾斜校正。在实际情形中,车牌图像的最大倾斜角一般都不会超过直角( 90°),所以,一般θ 属于0到90°之间。通过边缘检测确定θ之后,就可以将牌照作|90-θ|°的旋转校正。通过MATLAB实验,为更好的突出校正的效果,使用的倾斜角度更大的另一幅车牌图像作对比,实际校正效果如下:
在这里插入图片描述

3.2.2车牌二值化

一节对牌照倾斜校正处理后,需要对牌照实施二值化处理。这里同样使用上一章牌照定位算法中的阈值选取法。即,灰度范围三分点阈值选取法。先统计出牌照图像灰度级范围,得到最大灰度值g_max和最小灰度值g_min。然后使用公式结合垂直投影法与固定边界分割的车牌字符分割算法(附源码和详细解析)确定出最佳二值化阈值。二值化效果如下图:
在这里插入图片描述

3.3.3消除间隔符

从5.1节知道,我国现行标准牌照为九二式。牌照上第2与第3个字符间有一个类似于实心句号的间隔标点,它与字符间的间距为10mm而不是通常的12mm正好能与字符间距区分开来,间隔符的存在容易在字符分割环节被误判为一个字符,导致被错误分割。虽然,后续操作中可以使用车牌字符的先验知识在分割之后筛选剔除掉,但这样做的成本较高,所以最好的办法就是在进行字符分割之前就把间隔符消除掉,本文系统基于数学形态学的相关知识,在车牌二值化后就选择消除间隔符,在MATLAB中,以半径为8的核模,先腐蚀后膨胀,消除掉小对象。

%bg4=imopen(d,strel('rectangle',[1,1]));%取矩形框的开运算
bg4=bwareaopen(d,8);%消除细小对象,即第二和第三之间的标点
figure(15);subplot(3,1,3),imshow(bg4);title('3.消除小对象二值车牌图像');%输出框架的彩色图像
imwrite(bg4,'3.消除小对象二值车牌图像.jpg');

在这里插入图片描述

3.3车牌投影分析

消除间隔符操作之后就得到了只含有7个字符的二值化车牌图bg4(包括车牌的边框),接下来就要对车牌二值图像bg4作投影分析。步骤大致如下:
第一步,作水平方向投影,获得直方图,分析直方图,计算出牌照上字符的最大高度(含框)以及上下边框的位置;
第二步,对车牌二值图像去水平(上下)边框处理;
第三步,作垂直方向投影,获得直方图,分析直方图,计算出水平摆放时牌照上字符间的最大中心距,确定分割阈值的选取间距(字符分割宽度)。
下面章节将对以上3个步骤做详细的论述。

3.3.1水平投影分析

二值牌照图像做水平投影分析的主要任务是从获取的投影直方图上计算出每个牌照上字符的开始(上升点)、结束(下降点)位置以及字符高度(峰宽度)、字符的中心距离(峰中心位置)、字符间距(谷底宽度)、字符上下边框位置等参数。要完成这一过程,往往需要进行峰谷分析,获取一个合理的阈值,分割出字符区域与非字符区域(例如字符间隙等),分析字符区域得到以上所需的参数,并根据这些参数找到车牌字符的最大高度和去除车牌的上下边框。车牌水平投影分析的具体算法如下:
在这里插入图片描述
具体实现步骤如下:
(1)读入车牌区域彩色与特征提取环节提取的车牌字符(含框)高度:hight,并根据直方图的数学定义:
在这里插入图片描述(5.4)
画出水平投影直方图histrow,然后对直方图进行峰谷分析,由我国普通汽车车牌字符是按一列有规律排列的先验知识,可以预测到直方图必定会出现峰谷现象,本文以蓝底白字普通汽车车牌为例,水平投影直方图(含框)至少会出现一个波峰,至多出现3个波峰(含上下边框)。以上文车牌号为粤AC609Z、辽AQ6493的车牌为例,水平投影直方图如下:
在这里插入图片描述

(2)根据水平投影直方图的分布情况,设置一个合理的阈值levelrow用于分割出字符区域与非字符区域,也就是在直方图中区分出上升点和谷底点。本文系统依据车牌字符的先验知识,选取分割阈值。具体原理如下:
第一步:首先取直方图的平均值:
在这里插入图片描述(5.5)
第二步:直方图的最小值:
在这里插入图片描述(5.6)
第三步:然后对直方图平均值和最小值之和求平均,有公式如下:
在这里插入图片描述(5.7)
由上求得最佳分割阈值levelrow)。取得最佳阈值之后,以此判断依据,从车牌区域的顶部扫描到底部,在直方图histrow中就是遍历横轴(x方向),比较第k个点直方图(k[1,hight])与阈值leverlrow的大小,当histrow(k)大于阈值时,判定为字符区域,即第k个上升点,并创建一个数列markrow来记录下该上升点的位置,记为markrow(k),它代表第k个上升点的位置,同理,创建一个数列markrow1记录第k个谷底的宽度,表示为markrow1(k);当histrow(k)小于或等于阈值时,判定为非字符区域,即谷底点,统计谷底点个数记于变量count1中,用来计算第k个谷底的宽度,即markrow1(k)。
(3)提取记录上升点位置的数列markrow1(k)中的元素,让其左边元素减去右边元素,计算出相邻点的峰距(假设波峰的宽度大致相等),即让K+1个(也就是下一个)上升点markrow(k+1)减去第k个(上一个)上升点的位置markrow(k),此时得到的是第k个峰的中心距markrow2(k)(峰中心距=一个峰宽度+一个谷底宽度),把计算得到的峰距(字符中心距)存储于数列markrow2中,例如,第k个峰距记录为markrow2(k)。
(4)获取峰距数列的元素个数,记为n1,由此得到波峰的个数为(n1+1),之后遍历峰距数列markrow2(k)。并由以下公式群5.8,计算出下降点,也就是字符结束的位置以及峰宽度,也就是字符高度、峰中心(字符高度的一半)的位置等参数。
计算公式如下:

  • 第K个下降点=第(k+1)个上升点-第k个谷底宽度
  • 第k个峰宽度=第k个下降点-第k个上升点
  • 第k个峰值中心位置=第k个下降点-1/2(第k个峰宽度)

由此,计算得到第k个下降点(字符结束位置)markrow3(k)、第k个峰宽度(字符高度)markrow4(k)以及第k个峰中心位置markrow5(k)。整个过程和相关参数标识如下:
在这里插入图片描述

(5)确定车牌字符最大字符宽度,并计算出上下边框位置。在第(4)步中已经获取到了车牌字符高度的数列markrow4,使用求最大值函数:MAX{}求得最大字符高度maxw。接下来,检测出车牌顶边,然后从车牌的顶边扫描至第一个字符结束的位置,在直方图histrow3(I)中,即从起点1遍历到第一个下降点histrow3(1)处,当该点不是白色,则判定为上边框与第一个字符之间的间隙点,并记录下字符点的坐标位置,存放于数列 xdata、ydata中,以此确定上边框区域。同样,检测出底边,然后从车牌的底边扫描至最后一个字符的开始位置,即从车牌结束点hight遍历至最后一个上升点 histrow(n1)处,当该点不是白色,则判定为下边框与最后一个字符的间隙点,并记录下最后一个字符的结束的位置,确定下边框区域。
(6)计算旋转角,去水平(上下)边框。在第(5)步中已经获取了第一个字符和最后一个字符的坐标位置,根据坐标数列 xdata、xdata关系,进行线性拟合,计算出x方向的夹角,并旋转车牌图像,鉴于在车牌图像预处理阶段已经对车牌进行Radon变换倾斜校正,因此,此处只是对车牌角度进行微调。微调后图像如图5-10。进行了角度旋转之后,接下来是去框处理,首先找到车牌字符的最大字符中心距maxhight,然后找到最大字符中心距所在峰的上升点位置rowtop=markrow(findc),也就是有最大字符中心距所在的字符的起始位置点,用最大字符中心距的下一个上升点markrow(findc+1)减去最大峰距所在谷底宽度markrow1(findc+1)得到最大字符中心距所在峰的下降点位置rowbot=markrow3(findc),最后公式5.8求出最大峰宽度即最大字符高度maxhight。并得到去水平边框的二值图像sbw2=sbw(rowtop:rowbot;😉 。

图3-9 旋转角度
3.3.2垂直投影分析
上一步操作计算出了牌照上字符的最大字符高度maxhight并成功去除了牌照图像的上下边框,接下来就是要对去框后的牌照图像做垂直投影分析,并同样计算出牌照字符的最大字符中心距(分割的间距)。由车牌字符的先验知识知道,车牌上字符有7个,做垂直投影后,得到的直方图会出现有规律的连续跳变,一般情况下会出现16个跳变点(7x2+2),因此,垂直投影后必定会出现7个大的波峰和8个波谷(6+2)。以此为基础,同样进行直方图峰谷分析,得到诸如峰距(分割间距)markcol6(k)、上升点(字符起始点)markcol(k)、下降点(字符结束点)markcol3(k)以及波谷宽度(字符间隙)markcol1(k)等参数。其原理与水平投影分析大同小异,下图3-10为垂直投影分析算法:

图3-10垂直投影分析算法

对牌照图像做垂直(竖直)投影分析的步骤大致与水平投影分析相同,只是在划分出字符区域与非字符区域时所选取的阈值不同。水平投影分析所选取的阈值是该方向投影直方图histrow的平均值(meanrow)与最小值(minrow)之和的一半,而垂直投影分析所选取的最佳分割阈值是该方向投影直方图histcol的平均值(meancol)和最小值(mincol)的四分之一。之所以如此选取,是以车牌字符的排列特点为依据的,车牌水平投影时最多取上下边框以及两行字符(黄底黑字的车牌)间的间隙共四个谷底,而垂直投影时,车牌包括左右边框共有8谷底,故取垂直投影阈值的一半也就是平均值和最小值之和的四分之一。其他步骤与水平投影操作一样这里就不在累赘,唯一有区别的就是数列名称的改变(如 markrow(k)换为markcol(k))。整个过程和相关参数标识也如下:

图3-11垂直投影参数标识图

对去框车牌图像垂直投影图如下:

在这里插入图片描述

3.4多阈值分割和车牌固定特征筛选
经过垂直投影直方图的峰谷分析之后,得到诸如字符中心距数列markcol6等一系列参数,根据这些参数可以计算找出字符分割的阈值。由于垂直投影后的直方图有多个峰谷,如要进行字符分割需要确定多个阈值,本文系统在直方图双峰平均法单阈值选取的基础上,结合垂直投影分析获取的例如字符(峰)中心距markcol6(k)、字符间隙(谷底)宽度markcol1(k)、字符开始结束(上升点、下降点)位置等特征参数,把双峰法单阈值分割推广到多阈值分割,该方法的原理如下:首先根据前面对车牌做垂直投影分析获得的字符中心距 markcol6数列,查找出数列中最大的字符中心距(max{markcol6()}),即能找到第一个最大中心距实为第2与第3个字符的中心距,得到该中心距在数列中的位序,也就是索引值 findmax,然后把该最大中心距置为0,继续在数列markcol6中查找最大值,并把该寻找到的最大值记为maxwitdh,作为阈值选取的间距。字符分割算法如下:

图3-13多阈值字符分割算法

对去水平边框后的牌照字符分割的效果图如下:

图3-14 车牌字符分割结果

(四)基于模板匹配的字符识别

4.1字符识别方法介绍

目前,用于车牌字符识别的算法主要有基于模板匹配的字符识别算法、特征统计匹配法和基于神经网络的字符识别算法。特征统计匹配法的要点是提取待识别模式的一组统计特征,再按照一定准则所确定的决策函数进行分类判决。汉字的识别是将字符点阵看作一个整体,经过大量的统计得到所用特征,最常用的方法是网格特征匹配法。

然而在实际应用中,由于外部原因的存在常常会出现字符模糊、字符倾斜等情况,从而影响识别效果。因此,此方法实际应用效果不理想,鲁棒性不强。常用的神经网络有BP网络、Hopfield网络和Ko-honen网络等,其优点是对于字符的噪声及变形不敏感,但是存在不容易区别出特征值相近的字符(如O、D和Q;8和B)的缺点,所以神经网络常被应用于进行初级分类。模板匹配方法较神经网络的字符识别方法简单,该方法体现的是待识别字符的整体特征,在车牌字符中有些存在着一定的相似性,因此必须对相似的字符进行进一步的处理,以提高机器识别的准确率。本文在原有模板匹配方法的基础上采用特征区域匹配法,其思想是先用模板匹配法匹配一次,如果遇到待识别字符为非常相似字符时,再选用相似字符差别最大的区域为特征区域与模板中的对应区域进行匹配,从而精确定位是什么字符,最终输出识别结果。

4.2模板匹配法识别原理

模板匹配法是实现离散输入模式分类的有效途径之一,其实质是通过度量输入模式与模板之间的相似性,取相似性最大的作为输入模式所属类别。此方法是由字符的直观形象抽取特征,用相关匹配原理确定的匹配函数进行判决,也就是将输入字符与标准模板字符在一个分类器中进行匹配。下面以一维图像的处理为例,相关匹配算法描述如下:

  • 设输入字符用输入函数f(x,y)表示,标准模板用函数F(x,y)表示
  • 在相关器中比较后输出为T(x,y)。随机变量用x1,x2表示,相关器输出为:
    在这里插入图片描述

当x1=x2,y1=y2,且f(x,y)=F(x,y)时,在这里插入图片描述
,即为输入字符的自相关函数,且有T(0,0)≥T(x,y)成立。T(x,y)会在T(0,0)处出现主峰,而在其它标准字符处出现一些副峰,只要这些副峰和主峰不相等,就可通过选用适当的阈值进行鉴别,从而判断并识别出待识别的车牌字符。
模板匹配法根据建模时所取特征的不同,有图形匹配、笔划分析、几何特征抽取等几种形式。其中图形匹配法在建模和匹配比较时,都是基于字符的图形块本身进行匹配的,再根据其相似度得出识别结果。用图形匹配原理进行字符识别时,一般都是采用二值化字符:0表示黑(背景),1表示白(字符)。其基本思想是为每个字符均建立一个标准模板Ti,待识别的图像用Y表示,它们的大小均为M×N。将未知的模式逐个与模板匹配,由下式求出相似度Si:
在这里插入图片描述

其中,“Y×Ti”是指矩阵中对应象素相乘。上式也可以表述为待识图像上对应点均为“1”的数目与标准模板上“1”点的数目之比。若maxi Si>λ,则判定Y∈Ti,否则拒绝识别。在这里λ为拒识阈值(一般由实验分析得出)。从理论上讲,这种判别法在一定条件下,错误概率和拒识概率最小,但是在实际应用中由于存在众多实际因素的影响,应用这种方法的处理结果并不理想。

4.3特征区域模板匹配法识别原理

模板匹配方法的缺点是抗干扰能力差。由于汽车牌照识别待分类的类别少,只有50多个汉字、10个数字及24个英文字母,所以适合用模板匹配法。但是,由于牌照中的某些字符如O,Q及D非常相似,很容易被误判。为解决此问题,在上一步的基础上采用区域匹配法。特征区域模板匹配法识别思想是先用模板匹配法匹配一次,如果待识别字符为非常相似字符时,再选用相似字符的差别最大区域为特征区域与模板对应区域匹配,从而精确判断出是什么字符。

依据模板匹配识别法的原理:设经过预处理后,归一化字符的二值化图像为{fI(i,y),i=1,2,n,j=1,2,m},I=1,2,P,模板的二值化图像为{Tk(i,j),i=1,2,n,j=1,2,m},k=1,2,q,且各fI(i,j),Tk(i,j)的取值为有图像的点取“1”,没有图像的点取“0”,匹配系数τk通过下式求出:
在这里插入图片描述
式中ΔTK表示二值图像TK中“1”的个数。设{τk}的最大值为τq,则输入图像{fI(i,j)}就是τq所对应的图像。通过试验对比得出匹配系数τk的求法用求相似度方法识别准确率比较高,即为下式:
在这里插入图片描述
特征区域模板匹配法的原理是:以待识别字符的几何中心为原点,将字符分成两部分,一部分为相似字符间差别不大的,另一部分为差别较大的,将差别较大的部分作为特征区域与模板的对应区域相匹配。划分方法为:分别以它们各自的几何中心为原点,以过原点的水平线、垂直线将字符分成4个象限。如为区分0和D,选取第2象限为特征区域,为区分B和8,选取第2,3象限为特征区域,进行模板匹配等等。

通过分析可以得出下列结论:当待匹配字符与模板是同一字符时,模板匹配法的匹配系数τk与特征区域匹配法的匹配系数τI相等;当待匹配字符与模板不是同一字符时,模板匹配法的匹配系数τk较特征区域匹配法的匹配系数τI大。从而被误判的可能性减小了,会提高该系统的机器识别率。

三、源程序

链接:https://pan.baidu.com/s/1vLTdz2kQ7NpdImYay8V-sQ
提取码:brtv

四、结果分析

使用本算法对车牌进行识别结果:
(1)数学形态法车牌定位于分割结果
在这里插入图片描述
(2)Radon算法车牌倾斜矫正结果
在这里插入图片描述
(3)对车牌进行二值化和消除小对象结果
在这里插入图片描述
(4)采用垂直投影法与阈值分割、车牌固定特征分割结果
在这里插入图片描述
(6)车牌识别最终结果
在这里插入图片描述
在这里插入图片描述

五、算法与源程序的评价与改进

本算法结合了较多的知识,参考了较多的文献,基于canny算法边缘检测与数学形态方法进行车牌粗定位、垂直投影法与阈值分割法、基于模板匹配法字符识别等,从车牌图像的读取到图像预处理、对车牌进行定位分割、识别结果的显示与存储于Excel表格中,较完整的搭建了一个车牌识别系统,在此算法上继续改进必能应用于显示当中。但本算法仍有较多的不足,以下是我觉得还能进行改进的地方:
(1)在算法设计中采用的canny算法对有噪声以后的图片处理边缘检测效果并不是很好,可以采用改进版的canny检测算法,详见文献信息:靳艳红. 基于改进canny算法的图像边缘检测的研究[D].重庆师范大学,2011.该篇讲述了对于有噪声的图片如何改进算法。
(2)另外,本算法采用的蓝色像素统计扫描方法对市面上的其他颜色的车牌并不适用,但是阈值设置避免了依赖经验。可以基于本算法进行改进。
(3)本算法采用的字符识别方法为模板匹配法,算法简单但是识别效果也相对一般,可以研究神经网络方面的识别方法,由于时间有限,没有继续深究。
(4)本算原本结合GUI界面运行会有比较好的视觉效果,在前期学习另外一个算法的时候学习了GUI界面的建立(由于前期的算法比较简单识别效果较差,故摒弃,采用了目前的算法)。
在这里插入图片描述

  • 12
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
汽车车牌定位与字符识别 一、 实验目的: 1、巩固理论课上所学的知识。 2、锻炼动手能力、激发研究潜能,增强理论联系实际的能力。 二、 设计原理与步骤: 定位汽车车牌并识别其中的字符,采用Matlab平台提供的一些图像处理函数,以傅立叶变换通过字符模板与待处理的图像匹配为核心思想。基本方法如下: 1、读取待处理的图像,将其转化为二值图像。 2、去除图像中不是车牌的区域。 3、为定位车牌,将白色区域膨胀,腐蚀去无关的小物件,包括车牌字符。 4、此时车牌所在白色连通域已清晰可见,但一个更大的连通域将车牌所在连通域包围了,需将其填充。 5、查找连通域边界。同时保留此图形,以备后面在它上面做标记。 6、找出所有连通域中最可能是车牌的那一个。 判断的标准是:测得该车牌的长宽比约为X:1,其面积和周长存在关系:(X×L×L)/(2×(X+1)×L)2≈1/Y,以此为特征,取metric=Y*area/perimeter^2作为连通域的匹配度,它越接近1,说明对的连通域越有可能是X:1的矩形。 7、将车牌图像反白处理,并扩充为256×256的方阵,以便傅立叶变换中矩阵旋转运算的进行。 8、从文件读取一个字符模板。对图像计算傅立叶描述子,用预先定义好的决策函数对描述子进行计算。变换后的图像中,亮度的高低指示相区域与模板的匹配程度。 9、确定一个合适的门限,显示亮度大于该门限的点,也就是与模板的匹配程度最高的位置。 10、对照图片,可以说明相字符被识别和定位了。 三、 实验记录及分析: 待处理的图像如下所示。图像整体比较清晰干净,车牌方向端正,字体清楚,与周围颜色的反差较大。读取待处理的图像,将其转化为二值图像。 经试验,采用门限值为0.2附近时车牌字符最为清楚,杂点最少。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值