车牌识别(字符切割)大作业
汽车牌照字符分割方法
2010年第 34 卷第 11 期(总第 349 期)
Video application & project
底白字车牌则为黑底白字, 黄底黑字车牌则为白底黑 字 ,两 者 正 好 相 反 (如 图 1c 和 图 2c 所 示 ),因 此 无 法 使 用统一的字符分割算法, 必须判别车牌的颜色类型,然 后将二值化后的黄底黑字车牌再进行反色,统一为黑底 白字。 在大量实验的基础上,笔者提出基于 RGB 颜色分 量比例的统计分析法来判别车牌颜色类型。
3.1 分隔符区域特征 车牌的分隔符即是车牌中第 2 个字符与第 3 个字
符之间的“●”号,该符号所处的区域具有一些特征。 中国 目前使用的 92 式号牌在去掉边框后, 实际字符区域的
制式如图 3 所示。
图 3 中字符高度 H=90 mm, 字符宽度 W=45 mm,字 符 间 距 、 字 符 与 分 隔 符 间 距 D=12 mm, 分 隔 符 直 径 R= 10 mm。 由图 2 可以得到分隔符区域(第 2 个和第 3 个字符 之间)的特征如下:
1) 设定搜索范围。假设定位后车牌图像最左端的起 始 位 置 为 L,宽 度 是 PLen,理 论 上 的 分 隔 符 区 域 区 间 为 [L+(102/409)PLen,L+(136/409)PLen]。 由于定位误差的 存在导致实际 L 偏小而 PLen 偏大,必须扩大搜索范围。 因此设定搜索范围在第 2 个字符的起始位置到第 3 个字 符的结束位置。 根据图 2,搜索区间为[L+(57/409)PLen, L+(181/409)PLen]。
4) 垂直投影特征。 分隔符区域经二值化后,假设车 牌背景像素为 0,字符像素为 1,则理想化的垂直投影特 征是一个两边为 0、中部凸起的形态,凸起部分的最高点 即为分隔符原点的直径。 该最高点一般都低于字符区域 的垂直投影值。
车牌的定位与字符分割报告
车牌的定位与分割实验报告一实验目的针对交通智能系统所拍摄的汽车图片,利用设定的算法流程,完成对汽车车牌部分的定位,分割车牌部分,并完成字符的分割,以便于系统的后续分析及处理。
二实验原理详见《车牌的定位与字符分割》论文。
三概述1一般流程车牌自动识别技术大体可分为四个步骤:图像预处理、车牌定位与分割、车牌字符的分割和车牌字符识别。
而这四个步骤又可归结为两大部分:车牌分割和车牌字符识别。
图1-1为车牌自动识别技术的一般流程图。
2本实验的流程(1)图像预处理:图像去噪(2)车牌的定位:垂直边缘检测(多次)形态学处理的粗定位合并邻近区域结合车牌先验知识的精确定位(3)车牌预处理:车牌直方图均衡化倾斜校正判定(蓝底白字或者黄底黑字)归一化、二值化(4)字符的分割:垂直投影取分割阈值确定各个字符的左右界限(结合字符宽度、间隔等先验知识)分割字符四实验过程4.1图像预处理4.1.1图像去噪一般的去噪方法有:空间域上的均值滤波和中值滤波;频率域上的巴特沃斯滤波器。
图4-1是各滤波器处理椒盐噪声的效果。
a.被椒盐噪声污染的图片 b.均值滤波的效果图 c.中值滤波的效果图 d.BLPF的效果图图4-1 各滤波器处理椒盐噪声的仿真可见,中值滤波对椒盐噪声的处理效果极好,而一般所拍摄的图片上最多的便是孤立的污点,所以此处以中值滤波为主进行去噪。
图4-2是采用中值滤波处理实际汽车图片的效果。
a.原始图像b.灰度图像c.中值滤波后的图像图4-2 中值滤波处理实际汽车图片的效果很显然,经过中值滤波后去除了原图上的部分污点。
4.1.2图像复原由于通常情况下都不知道点扩展函数,所以我们采用基于盲解卷积的图像复原策略。
图4-3~4-7图是函数进行盲解卷积的实验结果,其中图4-3是图像cameraman 的模糊图像。
图4-3 模糊图像在盲解卷积处理中,选择适当大小的矩阵对恢复图像的效果很重要。
PSF的大小比PSF的值更重要,所以首先指定一个有代表性的全1矩阵作为初始PSF。
【车牌识别】-车牌中字符分割代码详解
【车牌识别】-车牌中字符分割代码详解车牌识别项⽬中,关于字符分割的实现:思路: 1. 读取图⽚,使⽤ cv2 。
2. 将 BGR 图像转为灰度图,使⽤ cv2.cvtColor( img,cv2.COLOR_RGB2GRAY) 函数。
3. 车牌原图尺⼨(170, 722) ,使⽤阈值处理灰度图,将像素值⼤于175的像素点的像素设置为 255 ,不⼤于175的像素点的像素设置为0 。
4.观察车牌中字符,可以看到每个字符块中的每列像素值的和都不为 0 ,这⾥做了假设,将左右结构的省份简写的字也看作是由连续相邻的列组成的,如 “ 桂 ” 。
5. 对于经过阈值处理的车牌中的字符进⾏按列求像素值的和,如果⼀列像素值的和为 0,则表明该列不含有字符为空⽩区域。
反之,则该列属于字符中的⼀列。
判断直到⼜出现⼀列像素点的值的和为0,则这这两列中间的列构成⼀个字符,保存到字典character_dict 中,字典的 key 值为第⼏个字符 ( 下标从0开始 ),字典的value值为起始列的下标和终⽌列的下标。
character_dict 是字典,每⼀个元素中的value 是⼀个列表记录了夹住⼀个字符的起始列下标和终⽌列下标。
6. 之后再对字符进⾏填充,填充为170*170⼤⼩的灰度图(第三个字符为⼀个点,不需要处理,跳过即可。
有可能列数不⾜170,这影响不⼤)。
7. 对填充之后的字符进⾏resize,处理成20*20的灰度图,然后对字符分别进⾏存储。
代码实现:1### 对车牌图⽚进⾏处理,分割出车牌中的每⼀个字符并保存2# 在本地读取图⽚的时候,如果路径中包含中⽂,会导致读取失败。
34import cv25import paddle6import numpy as np7import matplotlib.pyplot as plt8#以下两⾏实现了在plt画图时,可以输出中⽂字符9 plt.rcParams['font.sans-serif']=['SimHei']10 plt.rcParams['axes.unicode_minus'] = False111213# cv2.imread() 读进来直接是BGR 格式数据,数值范围在 0~255 。
车牌识别中字符分割算法的研究与实现毕业答辩PPT课件
LOGO
2021
一:论文的背景意义
背景和意义:车牌识别是现代智能交通系统中的重要组成
部分之一,可用于公路电子收费、出入控制和交通监控等众多 场合。它以数字图像处理、模式识别、计算机视觉等技术为基 础,对摄像机所拍摄的车辆图像或视频序列进行分析,得到每 一辆汽车唯一的车牌号码,从而完成识别过程。它主要包括三 个关键部分:车牌区域定位、车牌字符分割、车牌字符识别, 其中车牌字符分割的好坏直接影响到车牌识别的正确率,因此 本文对字符分割的算法进行了深入的研究。
车牌灰度图像 车牌二值化图像
车牌膨胀或腐蚀处理后图像
2021
LOGO
四:车牌分割
本文所采用的车牌字符分割方法为:
车牌像素和模板匹配相结合的车牌字符分割方法
(1)通过车牌字符串的高度H,构建符合实际车牌的
模板。
(2)将车牌模板在字符串上从左向右滑动,同时分
别求取当前位置的M1和N1。其中
, 6 bi
车牌图像分割结果
2021
LOGO
车牌字符分割结果的例证续:
车牌原图像
车牌灰度图像
车牌边缘检测图像
2021
车牌腐蚀后图像
LOGO
车牌平滑图像的轮廓
从对象中移除小对象
车牌图像定位结果
2021
LOGO
车牌图像预处理结果
车牌图像分割结果2021Fra bibliotekLOGO
总结:
本文对其中的车牌分割技术做了深入的研究,主要探讨了车牌定位、预处理以 及字符分割的算法。
LOGO
2021
论文研究步骤:
车牌图像的字符分割
由于有些 车牌 是两 行的形 式,所 以首 先 分割出各行文字的上下边界。从 上向下描标 记 像素点和不为零的行第一个像 素点和不为零的 行为第一行字符的上边界;接着向下扫描标记 像素点和再次变为零的行为第 一
行 字 符 的 下 边 界 ; 接 着 向 下 扫 捕 重 复 以 上操作知道全部扫描完毕。
( 3 ) 同样 利 用 me a n函 数 求 出 竖 直 投 影
具体算法流程图如图 4所示。
图 1 : 水 平 投 影
图2 :垂 直投 影
8 8 ・电子技 术与软 件工 程
E l e c t r o n i c T e c h n o l o g y &S o f t w a r e E n g i n e e r i n g
处 理 。 为 了 适 应 字 符 分 割 和 匹 配 识 别 , 还 要将 竖 直 投 影 即 竖 直 方 向 上 的 投 影 是 图 像 各
灰度图进 行二值 化处理 。
行的叠加 ,即图像 行像 素点 的叠加 。投影如 图2 ,图中第一个和最后一个 大 于平均值的峰 值 为车牌 的上边框和下边框的投影值 。
影值 ) 的形态各异 ,变化 很大,波峰和波谷之 间像素值大小存在很大 的差别 这样就可 以利 用求投影平均值 的方法 去除车牌边框 。主要包
括 以下 步 骤 :
首先 将去边 框后 的车 牌 图像反 二值化 , 反二值化后背景像 素值 为零 , 字符像素不为零。
3 . 2 行 分 割
景在智能交通 系统 中,准确 定位车牌 后,字符 分割是下一步字符识别 的前提 ,字符分割的好 坏对字符识别率起着至关重要的作用 。虽然 目 前在 已有的印刷体字符分割技术的基础上 .提
车牌识别中的号码分割方法
车牌识别中的号码分割方法刘聪074301027车牌拍照自动识别技术是实现车辆身份自动识别的一种途径。
是近年来计算机视觉与模式识别技术在智能交通领域应用的重要研究课题之一。
因为车辆牌照号码和车辆是一一对应的,如同居民身份证和每个公民的关系一样,因此车辆牌照字符自动识别系统可用于一切需要对车辆进行管理的场合,比如公路收费站、停车场、十字路口等交通关卡等处,对于道路交通、园区和停车场车辆管理具有巨大的经济价值和现实意义。
车牌识别方法可以分为3个部分:车牌定位;车牌字符分割;车牌字符识别.这3部分紧密相关,每一步的输出都将作为下一步处理的输入,因此每一步的精确度都直接影响下一步的工作,从而影响车牌识别的最终结果。
首先要输入原始图像,从原始图像中确定车牌的相对位置,,完成对车牌的倾斜度校正;从提取的图像中切分出单个字符;最后输出车牌号码的字符串。
其中车牌字符的正确分割是进行下一步车牌字符识别的基础,目前常用的方法有如下几种:(1)车牌区域纹理特征的方法。
这种方法是利用车牌区域字符和底色具有不同的灰度特征从而进行边框去除和字符分割的方法。
(2)基于数学形态学的方法。
利用形态学的腐蚀和膨胀,将车牌字符区域组成连通域的方法去除边框,再进一步采用字符连通域的形式进行字符切分。
(3)基于Hough变换的字符分割方法。
还有人完全利用Hough变换,寻找车牌字符的上下边界,再结合车牌字符的排列特征进行字符的分割。
在得到一个或几个车牌区域后,先将其分割为单个的字符,然后进行单个字符的识别.传统的方法是使用投影法进行分割.先统计定位出的车牌区域的直方图,然后将统计值等于。
的几列中的一列作为分割的界限.这种分割方法实现起来比较简单,但是适应性很差,在预处理效果不好的情况下,很难有满足条件的列.而为了获取满足传统方法的条件,只有增加预处理的条件.因此,处理完后的图像不可避免地损失一部分有用信息,为进一步的处理造成不必要的困难,还可能引入额外误差.并且,在车牌倾斜的角度比较大或被拍摄车牌上的字符比较密集时,投影的方法从本质上失去了意义.为了避免上述两种弊端,采用一种新方法分割单个字符.该方法既可从一定程度上消除了预处理效果较差带来的影响,又可从根本上解决了倾斜车牌分割的间题.为了说明该方法的效果,使用了一个有较大倾斜角度的车牌做试验,如图3所示.首先,按照上一个步骤中精确定位车牌位置的方法,确定各个连通区域,去掉矩形区域中一些不可能是字符区域部分,例如宽度过大(约大于1/7车牌)或是连通区域中像素的个过少的区域,然后做出剩余各个连通区域的外接矩形,选取高和宽比值最为接近的4个连通区域,如图d所示.通过研究发现,车牌在正常或倾斜的情况下,(这种倾斜的情况包括车牌本身倾斜或由于拍摄的角度造成的倾斜),车牌上各个字符的顶点实际上是在一条直线上,而大部分的数字、字母的结构是上下、左右基本对称的,所以各个数字和字母的中心也基本在一条直线上.因此,依据各连通区域的信息拟合一条直线可以取各连通区域的中点,也可以取各连通区域的最高和最低点拟合这条直线,在多数情况下,能够得到较好的拟合效果.利用拟合出的1条或2条直线,就能够比较准确地确定车牌上字符的上下边界.图c中所示的2条直线就是利用字符的上边缘和下边缘拟合出来的.假设拟合的直线斜率为k,则所有字符的外接矩形与这条直线的相交角度是相同的.从图d中的4个矩形中任意选取一个,将其假定为字符的大小,然后将这个矩形沿斜率为k的直线来回运动,按照车牌字符分布的特点,这个矩形框应该可以包含每一个字符.由此可提取每一个字符,因为如果将汉字看作连通区域,1个汉字则是由几个连通区域组成,而这个矩形框恰好可以将这些连通区域包含在内.并且像1这个高和宽的比值与其他的字符不同的数字,也能借助拟合的直线解决这一问题.本系统并未对倾斜的字符进行矫正,因为经研究发现,车牌上的字符因倾斜会产生一定程度的变形,但是这种变形并非是在二维空间上产生的.因此对其进行矫正仍有一定的困难.所以,对于倾斜字符的识别,可以通过在下一步中加大训练集解决.。
车牌的字符分割和字符识别的研究与实现
nu mbe fp cu e r m ho e t e r c n z d w t h e t r e t ro o r s o i e pae b ro it r sfo t s o b e og ie h t e fau e v co ft c rep ndng tm lt y i he
Hale Waihona Puke v rcl r et no ewht p e ia gs T e eont no m e o e yuigte e i o co fh i i li bnr i e. h c g io f u b r id n s tap j i t e x sn y ma r i n ss b n h
v corw h c m e cas d a he ihet s i rt e pae Ex rm e s h w ha t ee e t ih w b lse s t h g s i li y tm lt . m a pei nt s o t t h s m eho s t d rs l n h e e r e o e o n t n a d b te fe t e uti i rd g e fr c g ii o n e tre c .
一
项 重要研 究课题 , 是实 现交通 管理智 能化 的重要 环节 。它是 以数 字 图像 处理 、 式识 别 、 算 机 视觉 等技 模 计
术 为基础 的智能识 别系统 。它利 用每一 辆汽 车都有 唯一 的车牌号 码 , 过摄像 机所拍 摄 的车辆 图像 , 通 在不 影
响汽车状态的情况下 , 计算机 自动完成车牌的识别 , 从而可降低交通管理工作的复杂度。 由于车 牌识别 涉及到很 多复 杂因素 , 现有理 论和 方法还存 在识别 速度 慢 、 度低 、 干扰性 能差 等问题 , 精 抗 因此 有必要 进一步研 究 。本 文提 出 了一种 基 于模 板 匹配 的车牌 识别 方 法 ¨ , J 能有效 地 完成 不 同解析 度 和不
python中超简单的字符分割算法记录(车牌识别、仪表识别等)
python中超简单的字符分割算法记录(车牌识别、仪表识别等)背景在诸如车牌识别,数字仪表识别等问题中,最关键的就是将单个的字符分割开来再分别进⾏识别,如下图。
最近刚好⽤到,就⾃⼰写了⼀个简单地算法进⾏字符分割,来记录⼀下。
图像预处理彩图⼆值化以减⼩参数量,再进⾏腐蚀膨胀去除噪点。
image = cv2.imread('F://demo.jpg', 0) # 读取为灰度图_, image = cv2.threshold(image, 50, 255, cv2.THRESH_BINARY) # ⼆值化kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7)) # 腐蚀膨胀核kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 腐蚀膨胀核image = cv2.erode(image, kernel=kernel1) # 腐蚀image = cv2.dilate(image, kernel=kernel2) # 膨胀确定字符区域考虑最理想的情况,图中的字符是端正没有倾斜歪曲的。
将像素灰度矩阵分别进⾏列相加、⾏相加,则在得到的列和、⾏和数组中第⼀个⾮ 0 元素索引到最后⼀个⾮ 0 元素索引包裹的区间即就是字符区域。
h, w = image.shape # 原图的⾼和宽list1 = [] # 列和list2 = [] # ⾏和for i in range(w):list1.append(1 if image[:, i].sum() != 0 else 0) # 列求和,不为0置1for i in range(h):list2.append(1 if image[i, :].sum() != 0 else 0) # ⾏求和,不为0置1# 裁剪字符区域# 求⾏的范围flag = 0for i, e in enumerate(list1):if e != 0:if flag == 0: # 第⼀个不为0的位置记录start_w = iflag = 1else: # 最后⼀个不为0的位置end_w = i# 求列的范围flag = 0for i, e in enumerate(list2):if e != 0:if flag == 0: # 第⼀个不为0的位置记录start_h = ielse: # 最后⼀个不为0的位置end_h = iprint(start_w, end_w) # ⾏索引范围print(start_h, end_h) # 列索引范围分割单个字符与分割全部字符区域同理,在⾏和数组中⾮ 0 元素索引的范围即是单个字符的区域。
《数字图像处理》大作业:车牌识别
将图中字符分割出来 将每个字符单独分割出来进行操作方便字 符识别 用d=bwareaopen(d,150);将第二个 和第三个字符中间的点去除点。
分割第一个字符的程序
wide1 = 0 while sum(d(:,wide1+1))<3 && wide1 <= n-2 wide1 = wide1 + 1; end wide2 = wide1; while sum(d(:,wide2+1))>2 && wide2 <= n-2 wide2 = wide2 + 1; end % temp = imcrop(d, [wide1 1 wide2-wide1 m]); % figure;imshow(temp); % tp=3;bottm=m-5; while sum(d(tp,wide1:wide2))==0 tp = tp + 1; end while sum(d(bottm,wide1:wide2))==0 bottm = bottm - 1; end e1 = imcrop(d, [wide1 tp wide2-wide1 bottm-tp]);
%求出一列中满足蓝色区域点的个数
%找出车牌区域左右边界
车牌字符处理
首先要对定位好的车牌图像进行处理,再将车牌 上的字符分割出来,方便后续识别操作。ຫໍສະໝຸດ 图像灰度化图像二值化
图像滤波处理
车牌图像处理
图像处理部分程序
X = im2bw(Plate); 像 [H, L] = size(X); X = imcrop(X, [5 5 L-10 H-10]); %im2bw使用阈值变换法把灰度图 转换成二值图像。
车牌字符分割
图像处理包括图像二值化、车牌定位、字符分隔、字符识别。
每一步都关系系统成功与否以及好坏。
如果图片二值化不好就不方便车牌定位,如果定位的车牌图片不准确就谈不上字符的切割,字符图片切割不好就难以识别。
这些应该很好理解,可见成员之间需要很好的默契。
而我负责了图像处理中的字符分隔模块,起初我不知道位图形式以及如何读取位图,可见我获取信息的主动性和能力并不好。
非常感谢其他组员提供了读取位图像素数据的相关方法,才能使我能放心去思考切割的算法,而不必去担心如何获取数据的问题。
我使用了一种字符像素横向和纵向扫描的算法,得到字符在横向和纵向的像素分布波形,通常是缓慢的连续变化,车牌越模糊,变化越缓慢。
自然,波峰是字符区,波谷是字符间的空隙区。
它们的分界点并不明显,必然需要找到介于波峰与波谷之间的一个阀值,将波形变成01直方波形。
那么阀值自然是个关键,如果定得不准,就可能切不出所有字符,这是我之前遇到的问题,那时我固定了阀值,使它介于平均波峰值和平均波谷值之间的某个固定点,但这通常只能切割出模糊图片的部分字符,因为有些波峰和波谷并没有被切分开来。
于是我采用了另一种策略,即使用动态扫描,从最小的波谷扫到最大的波峰,并不断计算切得的波峰数量(实际就是字符数量)。
然后判断这个切割数是否符合实际车牌上的字符数量,如果符合,可以停止扫描,切割位置可以明确定在波峰和波谷的变化点上。
当然,我进行了各种优化,比如更多判断来排除各种车牌边框等干扰。
在DOS窗口上经过反复的数据显示测试,终于得到了非常不错的字————————————————————————————————————————————(1)利用字符像素XY方向扫描;(2)分析波形;(3)动态指定阀值;(4)获得01分布;(5)判断波形变化次数;(6)去干扰;(7)获得切割位置;时间有限,有不完善之处可以去本人博客提问:/flashforyou#pragma once#include <cstring>#include <cmath> //数学函数库#include <cstdio>#include <cstdlib>#include <cmalloc>#include "stdafx.h"#include <complex>#define WIDTHBYTES(bits) (((bits)+31)/32*4)/////////////////////////////////////typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned long DWORD;typedef long LONG;///////////////////////////////////////***位图文件头信息结构定义//其中不包含文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确读取文件信息)typedef struct tagBITMAPFILEHEADER {DWORD bfSize; //文件大小WORD bfReserved1; //保留字,不考虑WORD bfReserved2; //保留字,同上DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和} BITMAPFILEHEADER;///////////////////////////////////////***信息头BITMAPINFOHEADER结构,其定义如下:typedef struct tagBITMAPINFOHEADER{//public:DWORD biSize; //指定此结构体的长度,为40LONG biWidth; //位图宽LONG biHeight; //位图高WORD biPlanes; //平面数,为1WORD biBitCount; //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32 DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩DWORD biSizeImage; //实际位图数据占用的字节数LONG biXPelsPerMeter; //X方向分辨率LONG biYPelsPerMeter; //Y方向分辨率DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的} BITMAPINFOHEADER;/////////////////////////////////////////***调色板Palette,当然,这里是对那些需要调色板的位图文件而言的。
车牌字符分割及识别算法研究的开题报告
车牌字符分割及识别算法研究的开题报告一、选题背景与意义随着车辆数量的增多,交通管理越来越复杂,车牌识别技术已成为现代交通管理中不可或缺的手段。
目前,车牌识别技术已广泛应用于智能交通系统、停车场管理等领域,尤其在车辆安全检测和追踪、交通违法行为的识别等方面具有非常重要的应用价值。
车牌识别技术的关键就是字符分割和识别,因此本课题将重点研究车牌字符分割及识别算法。
通过对车牌进行有效的字符分割,能够准确快速地识别车辆信息,提高交通管理效率,确保道路畅通,维护公共安全。
二、研究内容及思路1. 车牌字符分割算法研究车牌字符分割是车牌识别的重要步骤,其目的是将车牌图像中的字符区域分割出来。
车牌字符分割算法的研究是本课题的重点之一。
在此基础上,我们将探讨如何对分割出的字符进行有效的识别和匹配,以保证车牌信息的准确性和可靠性。
2. 车牌字符识别算法研究车牌字符识别技术是车牌图像处理的核心问题之一,其目的是将车牌图像中的字符信息自动识别出来。
本课题将通过深入研究神经网络算法、模式识别算法等相关技术,构建有效的字符识别模型。
通过训练这个模型,能够快速而准确地识别出车牌中的字符信息。
三、研究方法1. 数据采集本课题将采用公开数据集进行研究,如CCPD、车牌字符数据集等。
同时,还将根据实际情况采集一些本地车牌图像进行测试和验证。
2. 图像处理技术本课题将应用多种图像处理技术,包括图像增强、二值化、边缘检测、形态学处理等,以有效处理车牌图像。
3. 算法开发本课题将基于Python平台,运用相关算法对车牌图像进行处理、字符分割和字符识别,在此基础上通过对实验结果进行分析,优化算法传统算法的表现,提高算法的准确率和稳定性。
四、预期研究成果1. 建立车牌字符分割及识别算法本课题将建立车牌字符分割算法和字符识别算法。
通过完整的实验流程,优化相关算法,建立出相应的模型以及算法,实现车牌字符的准确分割和识别,并进行实验验证。
2. 测试和结果分析本课题将基于实际数据和公开数据集进行测试,在此基础上对模型进行优化,并对结果进行分析和总结,得出相关结论,为实际应用提供参考。
车牌字符识别与分割
一、实验目的:使用matlab软件提取出给定图像中的字符区域,或分割出各个字符二、设计方案:一个完整的车牌识别系统闭应包括车辆检测、图像采集、图像预处理、车牌定位、字符分割、字符识别等单元。
当车辆到达触发图像采集单元时,系统采集当前的视频图像。
车辆识别单元对图像进行处理,定位出牌照位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出。
车牌识别系统原理如图l所示。
图1 车牌识别系统原理图(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。
(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。
即在一幅车辆图像中找到车牌所在的位置。
(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。
为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。
但由于车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。
牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。
由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。
因此,需要对字符在识别之前再进行一次针对性的处理。
车牌识别的最终目的就是对车牌上的文字进行识别。
汽车车牌自动定位与字符分割
汽车车牌自动定位与字符分割I=imread('Car.jpg'); %读入图片figure(1),imshow(I); %显示出图片[y,x,z]=size(I);myI=double(I); %转化数据为双精度型%%%%%%%%%%% RGB to HIS %%%%%%%% tic % 测定算法执行的时间,开始计时%%%%%%%%%%% 统计分析 %%%%%%%%%%%%%%%%=========== Y 方向 =============Blue_y=zeros(y,1);for i=1:yfor j=1:xif((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j ,3)<=142)&&(myI(i,j,3)>=119)))% 蓝色RGB的灰度范围Blue_y(i,1)= Blue_y(i,1)+1; % 蓝色象素点统计endendend[temp MaxY]=max(Blue_y); % Y方向车牌区域确定 PY1=MaxY;while ((Blue_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);%======================% X 方向%======================Blue_x=zeros(1,x); % 进一步确定X方向的车牌区域 for j=1:xfor i=PY1:PY2if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j ,3)<=142)&&(myI(i,j,3)>=119)))Blue_x(1,j)= Blue_x(1,j)+1;endendendPX1=1;while ((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((Blue_x(1,PX2)<8)&&(PX2>PX1))PX2=PX2-1;end%======对车牌区域的修正=========PX1=PX1-2; %PX2=PX2+2;Plate=I(PY1:PY2,PX1-2:PX2+2,:); %======像素点数在X、Y方向上的统计并且显示数量统计图 t=toc; % 读取计时figure(2),plot(Blue_x);grid figure(3),plot(Blue_y);gridfigure(4),imshow(IY);figure(5),imshow(Plate);%======字符分割并且分别显示IA=I(PY1:PY2,PX1-2:PX1+12,:); figure(6),imshow(IA);IB=I(PY1:PY2,PX1+ 12:PX1+26,:); figure(7),imshow(IB);IC=I(PY1:PY2,PX1+28:PX1+44,:); figure(8),imshow(IC);ID=I(PY1:PY2,PX1+44:PX1+56,:); figure(9),imshow(ID);IE=I(PY1:PY2,PX1+58:PX1+70,:); figure(10),imshow(IE);IF=I(PY1:PY2,PX1+70:PX1+84,:); figure(11),imshow(IF);IG=I(PY1:PY2,PX1+84:PX2+2,:); figure(12),imshow(IG);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 字符分割模块算法% 定位剪切后的彩色车牌图像,,灰度,,二值化,,统一到黑底白字,,去除上下边框 % ,,切割出最小范围,,滤波,,形态学处理,,分割出7个字符% 去除上下边框算法:% 1.黑白跳变小于阈值则被视为背景;2.连续白线大于某阈值则该白线被认为是背景% 3.单行白色大于阈值则被认为是背景,考虑FLAG的值; % 4.做完以上处理后,上边1/2 中搜索连续两条黑线,认为该黑线以上为背景;在下边1/2 中搜索连续两条黑线,认为该黑线以下为背景% 归一化为 40*20 ,商用系统程序中归一化为 32*16 ,此处仅演示作用function [d]=lpcseg(jpg)I=imread('car1.jpg');I1=rgb2gray(I);I2=edge(I1,'robert',0.15,'both'); se=[1;1;1];I3=imerode(I2,se);se=strel('rectangle',[25,25]); I4=imclose(I3,se);I5=bwareaopen(I4,2000);[y,x,z]=size(I5);myI=double(I5);ticwhite_y=zeros(y,1);for i=1:yfor j=1:xif(myI(i,j,1)==1)white_y(i,1)= white_y(i,1)+1;endendend[temp MaxY]=max(white_y);PY1=MaxY;while ((white_y(PY1,1)>=5)&&(PY1>1)) PY1=PY1-1;endPY2=MaxY;while ((white_y(PY2,1)>=5)&&(PY2<y)) PY2=PY2+1;endIY=I(PY1:PY2,:,:);white_x=zeros(1,x);for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)white_x(1,j)= white_x(1,j)+1;endendendPX1=1;while ((white_x(1,PX1)<3)&&(PX1<x)) PX1=PX1+1;endPX2=x;while ((white_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;dw=I(PY1:PY2-8,PX1:PX2,:);t=toc;figure(1),subplot(3,2,1),imshow(dw),title('定位剪切后的彩色车牌图像') imwrite(dw,'dw.jpg');[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像'); jpg=strcat(filepath,filename); a=imread(jpg);%figure(1);subplot(3,2,1),imshow(a),title('1.定位剪切后的彩色车牌图像') b=rgb2gray(a);imwrite(b,'2.车牌灰度图像.jpg');figure(1);subplot(3,2,2),imshow(b),title('2.车牌灰度图像')g_max=double(max(max(b))); g_min=double(min(min(b))); T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 [m,n]=size(b);d=(double(b)>=T); % d:二值图像imwrite(d,'3.车牌二值图像.jpg');figure(1);subplot(3,2,3),imshow(d),title('3.车牌二值图像')% 旋转rotate=0;d=imread('3.车牌二值图像.jpg');bw=edge(d);[m,n]=size(d);theta=1:179;% bw 表示需要变换的图像,theta 表示变换的角度% 返回值 r 表示的列中包含了对应于 theta中每一个角度的 Radon 变换结果% 向量 xp 包含相应的沿 x轴的坐标[r,xp]=radon(bw,theta); i=find(r>0);[foo,ind]=sort(-r(i));k=i(ind(1:size(i)));[y,x]=ind2sub(size(r),k); [mm,nn]=size(x);if mm~=0 && nn~=0j=1;while mm~=1 && j<180 && nn~=0i=find(r>j);[foo,ind]=sort(-r(i));k=i(ind(1:size(i)));[y,x]=ind2sub(size(r),k);[mm,nn]=size(x);j=j+1;endif nn~=0if x % Enpty matrix: 0-by-1 when x is an enpty array.x=x;else % 可能 x 为空值x=90; % 其实就是不旋转endd=imrotate(d,abs(90-x)); % 旋转图像rotate=1;endendimwrite(d,'4.Radon 变换旋转后的二值图像.jpg');figure(1),subplot(3,2,4),imshow(d),title('4.Radon 变换旋转后的二值图像')% 统一到白底黑字[m,n]=size(d);% flag=0 表示原来就是白底黑字,否则表示原来是黑底白字 flag=0;c=d([round(m/3):m-round(m/3)],[round(n/3):n-round(n/3)]);if sum(sum(c))/m/n*9>0.5d=~d;flag=1;end% 对反色后的图像预处理,整列几乎为白的认为是背景if flag==1for j=1:nif sum(sum(d(:,j)))/m>=0.95d(:,j)=0;endend% 对以上处理后的图像再处理% 在左边 1/2 处找连续两条黑线,认为该黑线左边为背景;在右边 1/2 处找连续两条黑线,认为该黑线右边是背景% 左边 1/2jj=0;for j=1:round(n/2)if sum(sum(d(:,[j:j+0])))==0jj=j;endendd(:,[1:jj])=0;% 右边 1/2for j=n:-1:round(n/2)if sum(sum(d(:,[j-0:j])))==0jj=j;endendd(:,[jj:n])=0;endimwrite(d,'5.统一成黑底白字.jpg');figure(1),subplot(3,2,5),imshow(d),title('5.背景色统一成黑底白字') figure(2),subplot(5,1,1),imshow(d),title('5.黑底白字的二值车牌图像') % 去除上下边框% STEP 1 黑白跳变小于阈值则被视为背景% 上面 2/5y1=10; % y1: 跳变阈值for i=1:round(m/5*2)count=0;jump=0;temp=0; for j=1:nif d(i,j)==1temp=1;elsetemp=0;endif temp==jumpcount=count;elsecount=count+1;endjump=temp;endif count<y1d(i,:)=0;endend% 下面 2/5for i=3*round(m/5):m count=0;jump=0;temp=0; for j=1:nif d(i,j)==1temp=1;elsetemp=0;endif temp==jumpcount=count;elsecount=count+1;endjump=temp;endif count<y1d(i,:)=0;endendimwrite(d,'6.黑白跳变小于某阈值的行则被视为背景.jpg');figure(2),subplot(5,1,2),imshow(d),title('6.黑白跳变小于某阈值的行则被视为背景')% STEP 2 单行白色大于阈值则被认为是背景,考虑 FLAG 的值 % 上面 2/5 y2=round(n/2); % y2: 阈值for i=1:round(m/5*2)if flag==0temp=sum(d(i,:));y2=round(n/2);if temp>y2d(i,:)=0;endelsetemp=m-sum(d(i,:));y2=m-round(n/2); if temp<y2d(i,:)=0;endendend% 下面 2/5for i=round(3*m/5):mif flag==0temp=sum(d(i,:));y2=round(n/2);if temp>y2d(i,:)=0;endelsetemp=m-sum(d(i,:));y2=m-round(n/2); if temp<y2d(i,:)=0;endendendimwrite(d,'7.单行白色点总数大于某阈值则该行被认为是背景.jpg');figure(2),subplot(5,1,3),imshow(d),title('7.单行白色点总数大于某阈值则该行被认为是背景')% STEP 3 单行白色大于阈值则被认为是背景,考虑 FLAG 的值 % 上面 2/5 y2=round(n/2); % y2: 阈值for i=1:round(m/5*2)if flag==0temp=sum(d(i,:));y2=round(n/2);if temp>y2d(i,:)=0;endelsetemp=m-sum(d(i,:));y2=m-round(n/2);if temp<y2d(i,:)=0;endendend% 下面 2/5for i=round(3*m/5):mif flag==0temp=sum(d(i,:));y2=round(n/2);if temp>y2d(i,:)=0;endelsetemp=m-sum(d(i,:));y2=m-round(n/2);if temp<y2d(i,:)=0;endendendimwrite(d,'8.单行白色点总数大于某阈值则该行被认为是背景.jpg');figure(2),subplot(5,1,4),imshow(d),title('8.单行白色点总数大于某阈值则该行被认为是背景')% STEP 4 做完以上处理后,上边 1/2 中搜索连续两条黑线,认为该黑线以上为背景; % 在下边 1/2 中搜索连续两条黑线,认为该黑线以下为背景 % 上边 1/2 for i=1:round(m/2)if sum(sum(d([i,i+0],:)))==0ii=i;endendd([1:ii],:)=0;% 下边 1/2for i=m:-1:round(m/2)if sum(sum(d([i-0:i],:)))==0ii=i;endendd([ii:m],:)=0;imwrite(d,'9.搜索上下两条黑线后的结果.jpg');figure(2),subplot(5,1,5),imshow(d),title('9.搜索上下两条黑线后的结果') % 反旋转if rotate==1d=imrotate(d,-abs(x-90)); endimwrite(d,'10.反旋转去毛刺后.jpg');figure(3),subplot(3,2,1),imshow(d),title('10.反旋转去毛刺后') % 切割处最小范围d=qiege(d);e=d;imwrite(d,'11.切割处最小范围.jpg');figure(3),subplot(3,2,2),imshow(d),title('11.切割处最小范围')figure(3),subplot(3,2,3),imshow(d),title('11.均值滤波前') % 滤波h=fspecial('average',3); d=im2bw(round(filter2(h,d))); imwrite(d,'12.均值滤波后.jpg');figure(3),subplot(3,2,4),imshow(d),title('12.均值滤波后')% 某些图像进行操作% 膨胀或腐蚀% se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀% 'line'/'diamond'/'ball'... se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵 [m,n]=size(d);if bwarea(d)/m/n>=0.365d=imerode(d,se);elseif bwarea(d)/m/n<=0.235d=imdilate(d,se);endimwrite(d,'13.膨胀或腐蚀处理后.jpg');figure(3),subplot(3,2,5),imshow(d),title('13.膨胀或腐蚀处理后') % 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割 d=qiege(d);[m,n]=size(d);figure,subplot(2,1,1),imshow(d),title(n)k1=1;k2=1;s=sum(d);j=1;while j~=nwhile s(j)==0j=j+1;endk1=j;while s(j)~=0 && j<=n-1j=j+1;endk2=j-1;if k2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0; % 分割endend% 再切割d=qiege(d);% 切割出 7 个字符y1=10;y2=0.25;flag=0;word1=[]; while flag==0[m,n]=size(d);left=1;wide=0;while sum(d(:,wide+1))~=0wide=wide+1;endif wide<y1 % 认为是左侧干扰d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[1 1 wide m]));[m,n]=size(temp);all=sum(sum(temp));two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:))); if two_thirds/all>y2flag=1;word1=temp; % WORD 1endd(:,[1:wide])=0;d=qiege(d);endend% 分割出第二个字符[word2,d]=getword(d);% 分割出第三个字符[word3,d]=getword(d);% 分割出第四个字符[word4,d]=getword(d);% 分割出第五个字符[word5,d]=getword(d);% 分割出第六个字符[word6,d]=getword(d);% 分割出第七个字符[word7,d]=getword(d);subplot(5,7,1),imshow(word1),title('1');subplot(5,7,2),imshow(word2),title('2');subplot(5,7,3),imshow(word3),title('3');subplot(5,7,4),imshow(word4),title('4');subplot(5,7,5),imshow(word5),title('5');subplot(5,7,6),imshow(word6),title('6');subplot(5,7,7),imshow(word7),title('7'); [m,n]=size(word1);% 商用系统程序中归一化大小为 32*16,此处演示word1=imresize(word1,[40 20]);word2=wordprocess(word2);word3=wordprocess(word3);word4=wordprocess(word4);word5=wordprocess(word5);word6=wordprocess(word6);word7=wordprocess(word7);subplot(5,7,15),imshow(word1),title('1');subplot(5,7,16),imshow(word2),title('2');subplot(5,7,17),imshow(word3),title('3');subplot(5,7,18),imshow(word4),title('4');subplot(5,7,19),imshow(word5),title('5');subplot(5,7,20),imshow(word6),title('6');subplot(5,7,21),imshow(word7),title('7'); imwrite(word1,'14.字符分割归一化后 1.jpg');imwrite(word2,'14.字符分割归一化后 2.jpg');imwrite(word3,'14.字符分割归一化后 3.jpg');imwrite(word4,'14.字符分割归一化后 4.jpg');imwrite(word5,'14.字符分割归一化后 5.jpg');imwrite(word6,'14.字符分割归一化后 6.jpg');imwrite(word7,'14.字符分割归一化后 7.jpg');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clcword='';word(1)=wordrec(word1);word(2)=wordrec(word2);word(3)=wordrec(word3);word(4)=wordrec(word4);word(5)=wordrec(word5);word(6)=wordrec(word6);word(7)=wordrec(word7);clcsave I 'word1' 'word2' 'word3' 'word4' 'word5' 'word6' 'word7' clearload I;load bp net;word='';word(1)=wordrec(word1);word(2)=wordrec(word2);word(3)=wordrec(word3);word(4)=wordrec(word4);word(5)=wordrec(word5);word(6)=wordrec(word6);word(7)=wordrec(word7);word=strcat('识别结果:',word);subplot(5,3,14),imshow([]),title(word,'fontsize',24)% 该子程序用于切割出最小范围function e=qiege(d)[m,n]=size(d);top=1;bottom=m;left=1;right=n; % init while sum(d(top,:))==0 && top<=mtop=top+1;endwhile sum(d(bottom,:))==0 && bottom>=1bottom=bottom-1;endwhile sum(d(:,left))==0 && left<=nleft=left+1;endwhile sum(d(:,right))==0 && right>=1right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,[left top dd hh]);% 分割字符function [word,result]=getword(d) word=[];flag=0;y1=8;y2=0.5; % if d==[]% word=[];% elsewhile flag==0[m,n]=size(d);wide=0;while sum(d(:,wide+1))~=0 && wide<=n-2wide=wide+1;endtemp=qiege(imcrop(d,[1 1 wide m]));[m1,n1]=size(temp);if wide<y1 && n1/m1>y2d(:,[1:wide])=0;if sum(sum(d))~=0d=qiege(d); % 切割出最小范围else word=[];flag=1;endelseword=qiege(imcrop(d,[1 1 wide m]));d(:,[1:wide])=0;if sum(sum(d))~=0;d=qiege(d);flag=1;else d=[];endendend%endresult=d; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 该子程序用于字符归一化处理function d=wordprocess(d)[m,n]=size(d);%top 1/3, bottom 1/3for i=1:round(m/3)if sum(sum(d([i:i+0],:)))==0ii=i;d([1:ii],:)=0;endendfor i=m:-1:2*round(m/3)if sum(sum(d([i-0:i],:)))==0ii=i;d([ii:m],:)=0;endendif n~=1d=qiege(d);end% d=..这个可以通过训练过程设置大小% d=imresize(d,[32 16]); % 商用系统程序中归一划大小为:32*16d=imresize(d,[40 20]);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 编号:A-Z 分别为 1-26; 0-9 分别为 27-36;% 京津沪渝港澳吉辽鲁豫冀鄂湘晋青皖苏 % 赣浙闽粤琼台陕甘云川贵黑藏蒙桂新宁 % 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59% 60 61 62 63 64 65 66 67 68 69 70 % 使用 BP 网络function word=wordrec(xx)% clear% clcload bp net;xx=im2bw(xx);xx=double(xx(:)); % 使用阈值将图像转换为二进制图像a=sim(net,xx); % 归一划为: 32*16,则 xx=512*1; [val,num]=max(a);if num<=26word=char(double('A')+num-1); elseif num<=36word=char(double('0')+num-1-26); elseswitch numcase 37word='京';case 38word='津';case 39word='沪';case 40word='渝';case 41word='港';case 42word='澳';case 43word='吉'; case 44 word='辽'; case 45 word='鲁'; case 46 word='豫'; case 47 word='冀'; case 48 word='鄂'; case 49 word='湘'; case 50 word='晋'; case 51 word='青'; case 52 word='皖'; case 53 word='苏'; case 54 word='赣'; case 55word='浙'; case 56 word='闽'; case 57 word='粤'; case 58 word='琼'; case 59 word='台'; case 60 word='陕'; case 61 word='甘'; case 62 word='云'; case 63 word='川'; case 64 word='贵'; case 65 word='黑'; case 66 word='藏'; case 67word='蒙'; case 68 word='桂'; case 69 word='新'; case 70 word='宁'; endend。
车牌识别综合实验报告大作业
数字图像处理综合实验报告车牌识别技术(LPR)组长:__ ******_____组员:___ _****** ____ _******_________ _*******___指导老师:___ *******_____*****学院****学院2010年6月10日实验五车牌识别技术(LPR)一、实验目的1、了解车牌识别系统的实现,及车牌识别系统的应用;2、了解并掌握车牌识别系统如何实现。
二、实验内容1、车牌识别系统的图像预处理、2、车牌定位、3、字符分割4、字符识别三、实验原理车辆牌照识别(LPR)系统是一个专用的计算机视觉系统,它能够自动地摄取车辆图像和识别车牌号码,可应用在公路自动收费、停车场管理、失窃车辆侦察、门卫系统、智能交通系统等不同场合。
LPR系统的广泛应用将有助于加快我国交通管理自动化的进程。
1、预处理摄像时的光照条件,牌照的整洁程度,摄像机的状态(焦距,角度和镜头的光学畸变),以及车速的不稳定等因素都会不同程度的影响图像效果,出现图像模糊,歪斜或缺损,车牌字符边界模糊不清,细节不清,笔画断开,粗细不均等现象,从而影响车牌区域的分割与字符识别的工作,所以识别之前要进行预处理。
预处理的包括:1)消除模糊——用逆滤波处理消除匀速运动造成的图像运动模糊2)图像去噪。
通常得到的汽车图像会有一些污点,椒盐噪声,应用中值滤波 3)图像增强自然光照度的昼夜变化会引起图像对比度的不足,所以必须图像增强,可以采用灰度拉伸,直方图均衡等通过以上处理,提高了图像的质量,强化了图像区域。
2、车牌定位自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。
首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。
• 图像的灰度化 • 图像灰度拉伸• 对图像进行边缘检测 采用Sobel 算子经行边缘检测该算子包含两组3*3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
尹其畅 数字图像处理大作业
《数字图像处理》大作业——车牌识别(车牌定位和字符分割部分)学院:电子与控制工程学院专业:交通信息工程及控制学号:****************任课教师:***车牌识别系统1 车牌识别系统1.1车牌识别系统的概述目前随着科技和经济的日益发展,智能交通系统在世界范围内引起重视,我国已经将其列入科技计划重点实施。
智能交通系统是交通发展的必然趋势,而车牌识别系统是智能交通系统中的重要组成部分。
该系统可以记录十字路口违章车辆,实现高速公路,收费路口,停车场等地的收费。
既减少了人力,又节约了时间,还提高了效率。
车牌识别系统的主要任务是分析和处理摄取到的复杂背景下的车辆图像,定位分割牌照,最后自动识别汽车牌照上的字符,LPR是利用车辆牌照的唯一性来识别和统计车辆,它是以数字图像处理、模式识别、计算机视觉等技术为基础的智能识别系统。
在现代化交通发展中车牌识别系统是制约交通系统智能化、现代化的重要因素,LPR系统应该能够从一幅图像中自动提取车辆图像,自动分割牌照图像,对字符进行正确识别,从而降低交通管理工作的复杂度。
车牌字符识别的实质是对车牌上的汉字、字母和数字进行快速准确的识别并以字符串的形式输出识别结果,字符识别技术是整个车牌识别系统的关键。
车牌识别系统与其它图像识别系统相比较而言要复杂的多,在字符识别中,汉字识别是最难也是最关键的部分,很多国外较为成熟的车牌识别系统无法进入中国市场的原因就在于无法有效的识别汉字。
1.2车牌识别系统的结构和工作原理车牌识别技术的任务是处理、分析摄取的车辆图像,实现车牌号码的自动识别。
典型的车辆牌照识别系统是由图像采集系统、中央处理器、识别系统组成,一般还要连接相应的数据库以完成特定的功能。
当系统发现(通过埋地线圈或者光束检测)有车通过时,则发出信号给图像采集系统,然后采集系统将得到的图像输入识别系统进行识别,其识别结果应该是文本格式的车牌号码。
图1.1 车牌识别系统原理图车牌整体识别过程大体可分为四个步骤:图像预处理、车牌定位和分割、车牌字符分割和车牌字符识别。
车牌定位分割 实验报告
汽车车牌的号码识别1.车牌号码识别的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,得到输出结果。
2.车牌号码识别系统原理图各部分说明如下:(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。
(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。
即在一幅车辆图像中找到车牌所在的位置。
(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像。
(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。
3.源程序代码及图形(1)I=imread('yuan.bmp');figure;subplot(2,2,1);imshow(I);title('原图');I1=rgb2gray(I);%图像灰度化subplot(2,2,2);imshow(I1);title('灰度化图');m2=medfilt2(I1,[5,5]);subplot(2,2,3);imshow(m2);title('中值滤波');w2=wiener2(I1,[5,5]);%维纳滤波subplot(2,2,4);imshow(w2);title('维纳滤波');(2)图像二值化fmax1=double(max(max(I1)));fmin1=double(min(min(I1)));level=(fmax1-(fmax1-fmin1)/3)/255; bw2=im2bw(I1,level);bw22=double(bw2);figure,imshow(bw22),title('图像二值化 ');(3)图像算法处理lubo=edge(bw22,'log');figure;subplot(2,2,1);imshow(bw2);title('Log算子边缘检测');%图像边缘检测bg1=imclose(lubo,strel('rectangle',[1,33]));subplot(2,2,2),imshow(bg1);title('图像闭运算[1,33]'); bg3=imopen(bg1,strel('rectangle',[1,33]));subplot(2,2,3),imshow(bg3);title('图像开运算 [1,33]'); bg2=imopen(bg3,strel('rectangle',[12,1]));subplot(2,2,4),imshow(bg2);title('图像开[15,1]');(4)图像标记[L,num] = bwlabel(bg2,8);%标注二进制图像中已连接的部分%Feastats = imfeature(L,'basic');%计算图像区域的特征尺寸%Area=[Feastats.Area];%区域面积%BoundingBox=[Feastats.BoundingBox];%[x y width height]车牌的框架大小%RGB = label2rgb(L, 'spring', 'k', 'shuffle'); %标志图像向RGB图像转换figure,imshow(L);title('图像标记 ');%输出框架的彩色图像(5)形态滤波I5=bwareaopen(L,1000);%去除聚团灰度值小于2000的部分figure,imshow(I5),title('形态滤波后图像');(6) [y,x,z]=size(I5);I6=double(I5);Y1=zeros(y,1);for i=1:yfor j=1:xif(I6(i,j,1)==1)Y1(i,1)= Y1(i,1)+1;endendend[temp MaxY]=max(Y1);figure();subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和’),xlabel('行值'),ylabel('像素');PY1=MaxY;while ((Y1(PY1,1)>=50)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Y1(PY2,1)>=50)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);X1=zeros(1,x);for j=1:xfor i=PY1:PY2if(I6(i,j,1)==1)X1(1,j)= X1(1,j)+1;endendendsubplot(3,2,2),plot(0:x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('像数');PX1=1;while ((X1(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((X1(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;%分割出车牌图像%dw=I(PY1:PY2,PX1:PX2,:);subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像')if isrgb(dw)II1 = rgb2gray(dw); %将RGB图像转化为灰度图像else II1=dw;endg_max=double(max(max( II1)));g_min=double(min(min( II1)));T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值[m,n]=size(II1);% d:二值图像%h=graythresh(I1);II=im2bw(II1,T/256);subplot(3,2,4);imshow(II),title('二值化车牌图像');I2=bwareaopen(II,20);subplot(3,2,5);imshow(I2),title('形态学滤波后的二值化图像');[y1,x1,z1]=size(I2);I3=double(I2);TT=1;%%%%%%%去除图像顶端和底端的不感兴趣的区域 %%%%%Y1=zeros(y1,1);for i=1:y1for j=1:x1if(I3(i,j,1)==1)Y1(i,1)= Y1(i,1)+1 ;endendendPy1=1;Py0=1;while ((Y1(Py0,1)<20)&&(Py0<y1))Py0=Py0+1;endPy1=Py0;while((Y1(Py1,1)>=20)&&(Py1<y1))Py1=Py1+1;endI2=I2(Py0:Py1,:,:);subplot(3,2,6);imshow(I2),title('目标车牌区域');(7)%%%%%% 分隔字符按行累计值%%%%%%%X1=zeros(1,x1);for j=1:x1for i=1:y1if(I3(i,j,1)==1)X1(1,j)= X1(1,j)+1;endendendfigure;plot(0:x1-1,X1),title('列方向像素点灰度值来计和 '),xlabel('列值'),ylabel('累计像素量 ');Px0=1;Px1=1;(8) %%%%%%%%%%%%分割字符%%%%%%%%%%%%%%%%%%for i=1:7while ((X1(1,Px0)<3)&&(Px0<x1))Px0=Px0+1;endPx1=Px0;while (((X1(1,Px1)>=4)&&(Px1<x1))||((Px1-Px0)<10)) Px1=Px1+1;endZ=I2(:,Px0:Px1,:);switch strcat('Z',num2str(i))case'Z1'PIN0=Z;case'Z2'PIN1=Z;case'Z3'PIN2=Z;case'Z4'PIN3=Z;case'Z5'PIN4=Z;case'Z6'PIN5=Z;otherwisePIN6=Z;endfigure(8);subplot(1,7,i);imshow(Z);Px0=Px1;end。
车牌识别系统中字符分割的算法
车牌识别系统中字符分割的算法刘力荣;何正伟;胡君萍【摘要】车牌字符分割算法是车牌识别系统的重要组成部分.针对中国车牌的7个字符间的普遍性和特殊性,考虑倾斜和无倾斜这两种车牌图像,采用投影法并辅之以连通域法,通过图像预处理、车牌定位、字符分割三个主体流程,综合运用图像灰度化处理、边缘检测、灰度图腐蚀、平滑处理、车牌定位、车牌校正、切除边框、图像去噪处理和图像膨胀等关键技术,最终成功分割出车牌字符.实验结果表明,该字符分割算法的实时性和准确性较高,能很好地适用于倾斜和无倾斜的车牌图像,受图像拍摄环境条件的影响较小,为车牌识别系统的优化提供了一种新方法.【期刊名称】《泉州师范学院学报》【年(卷),期】2017(035)006【总页数】6页(P42-47)【关键词】车牌字符;有无倾斜;投影法;图像预处理;车牌定位;字符分割【作者】刘力荣;何正伟;胡君萍【作者单位】武汉理工大学航运学院,湖北武汉 430063;内河航运技术湖北省重点实验室,湖北武汉 430063;武汉理工大学航运学院,湖北武汉 430063;内河航运技术湖北省重点实验室,湖北武汉 430063;国家水运安全工程技术研究中心,湖北武汉 430063;武汉理工大学信息工程学院,湖北武汉 430070【正文语种】中文【中图分类】TP311.1车牌自动识别技术是智能交通管理的重要组成部分,该技术主要包括图像预处理、车牌定位、字符分割和字符识别[1].目前,该技术已被广泛应用,如:高速公路出入口、过山隧道、海港等处的智能缴费系统,对在监控路段违章的车辆进行取证、记录和鉴别,严密监视军管区、两国接壤地区、贸易口岸等地的车辆,优化停车场车位安排等[2].然而,在上述应用中,该技术的缺陷依然明显:对汉字、英文字母和数字的定位效果不是很理想;识别耗时长,难以达到实时监控的目的等[3].为减少上述缺陷的不利影响,本文针对该技术中的字符分割环节,根据中国车牌字符的特点,考虑倾斜和无倾斜这两种车牌图像,采用投影法并辅之以连通域法,通过图像预处理、车牌定位、字符分割三个主体流程,运用Matlab编程,实时分割车牌字符.1 图像预处理1.1 图像转化为灰度图倾斜车牌原图如图1所示.图1 倾斜车牌原图Fig.1 The tilting license plate image由于字符和车牌底色的色彩差异很大,当彩色图像转化为灰度图像时,字符色和底色的灰度差异也很明显.用式(1)能计算出图像灰度值H:H=0.229R+0.589G+0.114B.(1)式(1)使用加权平均值法来计算灰度值.先给三基色设立不同的权,再进行加权,求出加权平均值,用该值取代三基色的初始值.由于人眼对三基色的感知程度有较大差异,当R、G、B的权分别为0.229,0.587,0.114时,获得的灰度图像是最理想的[4].使彩色图像转化为灰度图,可用函数rgb2gray(),它运用式(1),程序运行得到的灰度图如图2灰度图所示;为确定图像中灰度级的分布,了解各种灰度出现的频数,在图2同时给出灰度图直方图.由图2知,车牌区域与周边区域的灰度存在显著差异,蓝底区域与周边区域的差异尤为显著,车牌区域可被轻易辨识.图2 车牌灰度图及直方图 Fig.2 The grey-scale map and histogram of the license plate1.2 图像的边缘检测边缘是由图像中灰度发生剧变的像素点构成的,常见的图像边缘有房顶形、脉冲形和阶跃形[5].测定图像边缘的像素灰度变化水平,可利用代数求导实现,经求导可确定图像边缘的像素点的分布区位,通过判决就能得到图像边缘.对图像作边缘检测时通常用到Roberts算子,其原理是在局部运用差分法来搜寻图像边缘.该算子运用对角线上相邻像素的差值类似于阶梯形幅值的特点来检测边缘,竖直边缘检测的结果优于水平边缘,能准确确定像素点的位置.在函数edge()中,利用Roberts 算子可进行边缘检测,边缘检测效果如图3所示.由图3可知,经边缘检测后的车牌雏形清晰可见,车辆标识的边缘也清晰显现出来,大体实现了边缘检测的目的.然而,车牌周边有一些点状噪声,为消除它们,要通过腐蚀.图3 边缘检测效果图图4 腐蚀效果图Fig.3 The effect of edge detection Fig.4 The effect of erosion1.3 灰度图腐蚀腐蚀的目的是抹除边界点,让边界向里收缩[6].通过腐蚀可以抹除微小且无关的物体.腐蚀遵循的法则为:图像输出的像素值是图像输入邻域里的最小值.如果有一个像素值是0,那么对应的像素输出值肯定是0.假设A的原点平移至点(x,y),则A会全部包含在Y里面,符合这个条件的所有点构成了A对Y腐蚀后得到的二值化图像.用imerode()函数可实现腐蚀,腐蚀效果如图4所示. 比较图4和图3可知,图3中微小且无关的物体已被全部抹除,使车牌区域及车辆标识得以保留下来,车牌轮廓很清晰.1.4 图像平滑处理得到车牌轮廓后,在获取脚点前,应先对图像作平滑处理.如果图像存在统计误差和噪声,会给获取脚点造成困难.图像平滑处理可通过中值滤波法来实现[7].中值滤波法的思路是,先从小到大排列好滑动窗口内全部像素点的灰度值,用这些灰度值里处于居中位置的值来代替居于滑动窗口中部的像素点的初始值.中值滤波法的滤波效果较好,使图像边缘清晰,能有效去除独立小区域噪声和冲击干扰.中值滤波有一个对应的图像平滑处理函数imclose(),它是闭运算,能填补小口子,消除小间隙.图像平滑处理后效果如图5所示.图5 平滑处理效果图图6 移除小对象效果图 Fig.5 The effect of smooth processing Fig.6 The effect of removing small objects本步骤实际上使用了连通域法.由图5可知,平滑处理实现了预期目的,图像的统计误差得以消除,对获取脚点产生不良效果的噪声也得以去除.1.5 移除小对象平滑处理结束后,会生成数个大大小小的连通域,因而要设法移除与车牌区域无关的连通域.要移除图像内小于某值的连通域,可用函数bwareaopen(),它一般运用8邻域.本步骤使用了连通域法,小对象被移除后的图像如图6所示.由图中可知,图5中的小物体和车辆标识已被全部移除.2 倾斜车牌的定位过程2.1 倾斜车牌的定位倾斜车牌的定位可采用基于纹理特征的车牌定位法[8].对车牌原始图像作二值化处理,再对车牌轮廓作平滑处理,图像中任意一点只能在两个离散值(关(0)、开(1))里取一个,它们分别代表白和黑的特殊灰度图像,整个图像仅有两个域.全1的域是车牌区域,它和矩形相似,长宽比是4.5∶1.这些特点可被用来检验提取到的车牌区域是否准确.车牌区域确定后,采用水平和垂直双向投影法计算车牌的4个边界值.确定水平坐标时,先定义一个1×x的数组(x为车牌原始图像的宽度),把二值化图像垂直投影在x轴上.在直方图中,能看到水平方向上呈现两条分界线,为方便操作,把像素临界值作定量化处理,其取值定为28个像素.从左往右搜寻第一个像素为1值且大于28的x坐标,将其作为水平方向上的左侧分界线;从右往左搜寻第一个像素为1值且大于28的x坐标,将其作为水平方向上的右侧分界线,其程序可利用for 循环语句实现.垂直方向上的分界线亦可采用上述方法确定出来.确定好分界线后,就能从车牌原图中剪切出一个仅包含车牌区域的图像.定位剪切后得到的彩色车牌图像如图7所示.在保持各字符完整性的同时,尽可能多地切除了无关区域和边框,为后面的倾斜校正和切除边框打下了良好的基础.图7 定位剪切后的彩色图像Fig.7 The color image after positioning and shearing图8 倾斜校正后的图像Fig.7 The color image after positioning and shearing 2.2 倾斜车牌的校正首先,用Sobel算子对车牌图像作边缘检测,搜寻图像和背景的相交线,然后,检测出图像的直线,用Radon变换法计算直线的倾角.Radon变换法属于连通域法,其投影理论为:一条直线在其法线方向上的投影是最长的,而在其平行方向上的投影是最短的[9].用Radon变换法检测直线倾角的大致思路为:1)用edge()函数计算图像的边缘二值图像,检测出车牌原始图像中的直线;2)计算边缘二值图像的Radon变换,对全部像素值为1的点进行运算(0~179度方向上分别投影);3)检测出Radon变换矩阵的峰值,这些峰值与车牌原始图像中的直线对应,Radon 变换矩阵中的全部峰值的列坐标θ就是和车牌原始图像中的直线垂直的直线的倾角,因此图像中直线倾角是(90-θ).倾斜校正后的结果如图8所示,校正后的车牌四方端正,效果良好.图像有些许模糊,这是不可避免的,即使用其他算法作倾斜校正,也有一定的失真度,但由于计算机有强大的识别能力,故不影响后面的步骤.2.3 切除边框车牌定位有一个条件是,找出一个包含车牌的区域.该区域要比车牌略大,以确保车牌信息的完整.因而提取到的车牌一般都有边框,但边框的存在会造成字符的垂直投影值全大于0,导致各字符间出现不同程度的粘连,分割点难以确定,给字符分割与识别带来很大麻烦,故要先设法去掉车牌边框.先切除车牌的上下边框,其步骤为:1)运用Sobel垂直方向算子作垂直边缘检测,使车牌的垂直边缘突出;2)运用膨胀运算突出车牌字符区域,取结构元素为2×2;3)各个字符均匀排列在车牌中心区域,它们与上下边框之间留有一个间隙,使车牌图像在水平方向上投影,这样就能在水平投影图上找出相应规律,并据此确定字符的上下边界;4)参照经验值切除车牌上下边框.切除车牌的左右边框可参照上述方法进行.切除上下边框的效果图如图9所示,再切除左右边框的效果图如图10所示.由图10可知,车牌的上下左右边框大部分已被切除干净.由于倾斜校正后的车牌边框并非直线,所以在一定程度上影响了边框的完整切除.但由于残留边框很少,故不影响后面的步骤.图9 切除上下边框的效果图Fig.9 The effect of cutting the upper and lower frames图10 切除左右边框的效果图Fig.10 The effect of cutting the left and right frames3 倾斜车牌的字符分割3.1 图像去噪处理车牌定位后得到的依然是彩色图像,要用投影法对其分割,先把彩色图像转化成灰度图像,再把灰度图像转化成二进制图像.其过程为先定义一个阀值:若比阀值大则取1,若比阀值小则取0.该阀值要求整个图像用统一的阀值T处理,可用于底色和字符有显著差异的图像.虽然不同图像的拍摄条件各异,但不会对去噪过程产生大的影响,也不会影响到计算的准确性.由于同步收集到的图像仍有干扰信号,故要用高通滤波法处理图像的低频信号,使图像锐化.3.2 图像膨胀或腐蚀处理膨胀[10]的运算法则和腐蚀恰好相反,其图像输出的像素值是图像输入邻域里的最大值.在一个图像里,只要一个像素值是1,对应的像素输出值就肯定是1.字符面积和车牌面积之比一般介于0.235和0.365之间,故得到字符面积和车牌面积之比后,若该比值比0.235小,就对图像作膨胀处理;若该比值比0.365大,就对图像作腐蚀处理.本文选取的结构元素是一个二阶单位矩阵.对于该车牌图像,经系统判决,决定作膨胀处理.图像去噪、膨胀或腐蚀的过程如图11(a~d)所示,由图11(e)的最后一幅图可知,经处理后的车牌边框已不太明显,对后续的字符分割不会造成影响.3.3 字符分割中国大陆车牌全长为44 cm,车牌的7个字符全长为40.9 cm ,宽为14 cm,每个字符宽为4.5 cm,高为9 cm,字符间距为1 cm.其中,第二个和第三个字符的间距与众不同,为1.55 cm;第一个和最后一个字符距离边界均为2.5 cm.因此,每个字符在车牌中占有的平均宽度就是w/7(w为车牌区域的宽度).但实际情况是,有一个分隔小圆点位于第二个和第三个字符之间,车牌的左右两边和图像的边缘也有一定的宽度,故每个字符的宽度实质上是比w/7小的.鉴于以上情况,每个字符的最小宽度应为w/9,故字符宽度可在w/9 至w/7 间取得.图11 图像去噪、膨胀或腐蚀Fig.11 Noise removal, dilation or erosion运用投影法分割字符应满足:各个字符在竖直方向上的投影在字符间或字符内的间隔处约为局部最小值,并且该位置要符合车牌字符的排列、大小和形状等必要条件.经分割后的字符图像如图12所示.图12 字符分割后得到的图像Fig.12 The image obtained after character segmentation由图12可知,切割后该字符串变成了独立的字符,这些字符清晰可辨,效果良好,个别字符在肉眼看来可能有点模糊,但由于计算机是通过像素的排列位置来识别字符的,各个字符的笔画皆有迹可循,故计算机能识别这些字符.另外,从车牌图像读入到字符分割完成,整个算法执行时间仅为1.27 s,速度较快.如图13和图14所示,倾斜车牌的整个字符分割方法若应用于无倾斜车牌中,整个算法执行时间为1.14 s,依然能实时、准确地分割出字符,体现了该方法的普适性.图13 无倾斜车牌原图Fig.13 The non-tilting license plate image图14 字符分割后得到的图像Fig.14 The image obtained after character segmentation4 结论本文针对该技术中的字符分割环节,根据中国车牌字符的特点,考虑倾斜和无倾斜这两种车牌图像,采用投影法并辅之以连通域法,通过图像预处理、车牌定位、字符分割三个主体流程,实时分割车牌字符,其分割准确性较高.虽然只研究了蓝底白字的车牌,但对于黑底白字的车牌,整个字符分割方法是通用的;对于白底黑字或黄底黑字的车牌,要先调整车牌定位的算法,使图像反转(0变成1、1变成0),这样整个程序仍是通用的.参考文献:[1] 陈佳浩.车牌识别技术在智能交通中的应用与发展趋势[J].电子测试,2017(4):25-26.[2] HA P S,SHAKERI M.License plate automatic recognition based on edge detection[J].Artificial Intelligence & Robotics,2016(1):170-174.[3] 王准.车牌识别系统的研究与改进[D].沈阳:沈阳工业大学,2016.[4] SALEEM N,MUAZZAM H,TAHIR H M,et al.Automatic license plate recognition using extracted features[C]//International Symposium on Computational & Business Intelligence,2016(2):221-225.[5] 秦雪,王欢,严晔,等.基于图像边缘检测的图像识别算法[J].长春理工大学学报(自然科学版),2015(4):127-131.[6] 邓仕超,黄寅.二值图像膨胀腐蚀的快速算法[J].计算机工程与应用,2017,53(5):207-211.[7] 秦立敏,陈玲,李金龙,等.基于FPGA的快速中值滤波算法研究[J].信息技术,2016(9):209-213.[8] 史东承,丁圆圆,梁超.基于相位一致性和字符纹理特征的车牌定位算法[J].吉林大学学报(信息科学版),2016,34(1):140-146.[9] 仇伟涛.基于Radon变换的图文图像的倾斜校正[J].福建电脑,2016(1):118-119.[10] PYE C J,BANGHAM J A.A fast algorithm for morphological erosion and dilation[J].European Signal Processing Conference,2015,52(5):1-4.。
车牌识别方案范文
车牌识别方案范文一、车牌识别方案的工作流程1.图像获取:车牌识别方案首先需要通过摄像头或者其他图像采集设备获取车辆的图像。
通常情况下,摄像头会安装在交通路口、停车场、高速公路等地方,以捕捉车辆的图像。
2.图像预处理:获取的图像通常会受到光照、角度、遮挡等因素的干扰,需要进行预处理以提高车牌识别的准确性。
图像预处理包括图像灰度化、图像增强、噪声去除以及图像边缘检测等步骤。
3.车牌定位:在预处理后的图像中,需要准确定位车牌位置。
车牌定位可以通过特定的算法来实现,如基于颜色分析、形状分析以及边缘检测等方法。
4.字符分割:车牌定位后,需要将车牌上的字符进行分割。
字符分割是车牌识别的关键步骤,常用的方法包括基于投影法、边缘检测法以及基于神经网络的方法等。
5.字符识别:字符分割后,对每个字符进行识别。
字符识别可以采用传统的模式匹配算法,如模板匹配、特征提取等,也可以使用深度学习的方法,如卷积神经网络(CNN)。
6.结果输出:识别后的字符可以被输出到屏幕、存储设备或者通过网络传输给其他系统进行进一步处理和分析。
二、车牌识别方案的关键技术1.图像处理:图像预处理是车牌识别的基础,包括图像灰度化、直方图均衡化、图像平滑、边缘检测等方法,可以提高车牌识别的准确性和稳定性。
2.特征提取:特征提取是字符识别的关键技术,根据字符的不同特征,可以选择不同的方法进行提取,如基于亮度、颜色、纹理等。
常见的特征提取方法包括傅里叶描述子、局部二值模式等。
3.移动目标检测:车牌识别方案通常需要在复杂的背景中对移动的车辆进行检测和跟踪。
移动目标检测可以通过传统的背景建模、帧差法等方法,也可以使用深度学习的方法,如基于卷积神经网络的目标检测算法。
4.字符识别:字符识别是车牌识别的核心技术。
传统的字符识别方法包括基于模板匹配、形状匹配、统计特征等方法,深度学习方法则可以采用卷积神经网络、循环神经网络等。
三、车牌识别方案的应用场景1.交通管理:车牌识别可以应用于交通路口的交通管理,如自动识别违章车辆、实时监测交通流量等,提高交通管理的效率和准确性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像处理技术
目录
一.引言 (1)
二.目的和意义 (1)
三.设计原理 (1)
四.字符分割程序 (2)
五.结果 (4)
六.测试代码 (5)
七.系统的不足 (5)
八.总结 (5)
九.心得体会 (5)
十.致谢 (6)
十一.参考文献 (6)
一.引言
随着人们生活水平的不断提高,机动车辆数量大幅度增加,与之相配套的高速公路,城市路网及停车场越来越多,显著提高了人们对交通控制方面的要求。
由于计算机技术的发展,信息处理水平的提高使智能交通系统成为世界交通领域研究的重要课题。
其中车牌识别是智能交通系统的重要组成部分。
车牌识别系统能够自动、实时地检测车辆、识别汽车车牌,从而监控车辆的收费、闯关、欠费以及各种舞弊现象。
本系统为基于蓝色车牌的车牌识别系统,它能够识别非蓝色车辆的蓝底白字车牌。
该系统通过车牌提取、车牌定位、预处理、字符分割、字符识别五个模块组成车牌识别系统。
二.目的和意义
通过对车牌识别系统的研究,自己开发小型车牌识别系统,虽有一定的局限性与不完整性,但可以使自己更加的熟悉MATLAB语言,激发对研究的兴趣,拓宽知识面,为自己以后的研究打下基础。
在提升自身科研能力的同时,还能提高团队合作精神,清楚团队成员的分工,协调成员间的工作,为今后的团队合作研究积累经验。
三.设计原理
字符分割在此系统中有着承前启后的作用。
它在前期车牌定位的基础上进行字符的分割,然后利用分割的结果进行字符的识别。
字符识别的算法很多,应为车牌字符间间隔较大,不会出现字符粘连的情况,所以此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为组成该块有两个字符,需要分割。
一般分割出来的字符要进行进
一步的处理,以满足下一步字符识别的需要。
但是对于车牌的识别,并不需要太多的处理就可以达到正确的目的。
在此系统中只进行了归一化处理,然后进行后期处理。
四.字符分割程序
function Img_cat(I)
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(I);
[m,n]=size(d);
k1=1;k2=1;s=sum(d);j=1;
while j~=n
while s(j)==0
j=j+1;
end
k1=j;
while s(j)~=0 && j<=n-1
j=j+1;
end
k2=j-1;
if k2-k1>=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0; % 分割
end
end
% 再切割
d=qiege(d);
% 切割出 7 个字符,首先对车牌图像自左向右逐列扫描,寻找连续有文字的区间块,将该区间块的有效宽度与某一固定阈值(本文设定的阈值为10,可更改)进行比较,若小于该设定阈值,则认为是左侧干扰,裁剪干扰区域;反之,分割出该模糊字符块
y1=10;y2=0.25;flag=0;word1=[];
while flag==0 %flag为自定义,用作标记循环
[m,n]=size(d); %返回矩阵d的尺寸信息,并存储在m,n中。
其中m中存储的是行数,n中存储的是列数
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide<y1 % 认为是左侧干扰
d(:,[1:wide])=0;%将字符区域设置为黑色
d=qiege(d);%处理干扰后切割出该黑色区域
else
temp=qiege(imcrop(d,[1 1 wide m]));%分割出该模糊字符块
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all>y2 图像归一化处理
flag=1;word1=temp;
end
d(:,1:wide)=0;d=qiege(d);
end
end
% 分割出第2~7个字符
[word2,d]=getword(d);
[word3,d]=getword(d);
[word4,d]=getword(d);
[word5,d]=getword(d);
[word6,d]=getword(d);
[word7,d]=getword(d);
[m,n]=size(word1);
% 商用系统程序中归一化大小为 40*20,此处演示word1=imresize(word1,[40 20]);
word2=imresize(word2,[40 20]);
word3=imresize(word3,[40 20]);
word4=imresize(word4,[40 20]);
word5=imresize(word5,[40 20]);
word6=imresize(word6,[40 20]);
word7=imresize(word7,[40 20]);
imwrite(word1,'save\1.jpg');
imwrite(word2,'save\2.jpg');
imwrite(word3,'save\3.jpg');
imwrite(word4,'save\4.jpg');
imwrite(word5,'save\5.jpg');
imwrite(word6,'save\6.jpg');
imwrite(word7,'save\7.jpg');
End
五.结果
六.测试代码
function zln_Main()
a=imread('save\dw.jpg');
[d]=Img_process(a);
Img_cat(d);
figure
subplot(1,7,1),imshow(imread('save\1.jpg')),title('word1');
subplot(1,7,2),imshow(imread('save\2.jpg')),title('word2');
subplot(1,7,3),imshow(imread('save\3.jpg')),title('word3');
subplot(1,7,4),imshow(imread('save\4.jpg')),title('word4');
subplot(1,7,5),imshow(imread('save\5.jpg')),title('word5');
subplot(1,7,6),imshow(imread('save\6.jpg')),title('word6');
subplot(1,7,7),imshow(imread('save\7.jpg')),title('word7');
end
七.系统的不足
基于蓝色车牌的车牌识别系统无法识别蓝色车身的车牌和其他颜色的车牌;以提取的无倾斜车牌为研究对象,忽略了车牌的倾斜问题;提取车牌模板时的光照问题;车牌边框、柳丁以及车牌亮度不均等不利因素;车牌背景的限制(不能有大面积的蓝色障碍物)。
八.总结
在车牌识别系统的字符分割部分实现,通常有间距、间隙切分法,投影法,识别切分法。
本系统采用的是投影法,利用垂直投影(即一列一列的统计像素)来进行字符分割,计算每一列中心黑色像素的总和,这种切分虽然速度快,但对不规范的字符会出现误分割的情况。
字符分割的具体算法:在图像的大致高度中(在qiege程序实现)自左向右的逐列扫描,遇到第一个黑色像素则是字符分割的起始位置,继续扫描,直至有一列没有黑色像素,则认为分割结束,继续这种方法直至图像最右端,这样则找到每个字符的稍精确的宽度范围。
在一直每
个字符的范围内,再自上而下和自下而上逐行扫描。
九.心得体会
本车牌识别系统主要包括车牌提取、车牌定位、预处理、字符分割、字符识别。
本人负责车牌的字符分割,本文主要探讨了字符分割的方法及算法分析。
在字符分割过程中,我们用的是垂直投影法,这种方法的主要优点是在二值化很好的情况下,可以很好的把字符分割出来,但是在二值化并预处理后仍有字符粘连的情况字符无法分割。
在此系统的完成过程中,我发现好多系统项目都有相似之处,我相信在钻研本系统中所得到的收获对以后的其他课题研究有很大帮助。
而且增强团队之间的团结协作的能力,我更喜欢组织的探讨问题的氛围,学习到了他人的长处明白了自己的不足。
十.致谢
组长:xxx。
在他的帮助下我能系统的掌握设计一个项目的流程及应该注意的事项。
他帮助我解决了自己解决不了的许多问题。
十一.参考文献
张德丰.详解MATLAB数字图像处理
杨为民.王世文.车牌自动识别技术及应用
邹永星.车牌字符分割方法的研究
白建华.车牌字符分割及识别算法研究。