车牌识别(字符切割)大作业
车牌的定位与字符分割 报告
车牌的定位与分割实验报告一实验目的针对交通智能系统所拍摄的汽车图片,利用设定的算法流程,完成对汽车车牌部分的定位,分割车牌部分,并完成字符的分割,以便于系统的后续分析及处理。
二实验原理详见《车牌的定位与字符分割》论文。
三概述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 行 分 割
景在智能交通 系统 中,准确 定位车牌 后,字符 分割是下一步字符识别 的前提 ,字符分割的好 坏对字符识别率起着至关重要的作用 。虽然 目 前在 已有的印刷体字符分割技术的基础上 .提
车牌的字符分割和字符识别的研究与实现
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.绪论1.1背景及现状:基于图像处理的车牌识别技术的研究在国外起步比较早,在美国、意大利、德国、以色列、新加坡等国家,现在都已经有比较成熟的产品投入使用,比如美国的(AUTOSCOF)2003系统、以色列的Hi-Tech公司研制的See/Car System、德国西门子公司的ARTEM7SXI系统、新加坡的Optasia公司研制的VLPRS等车牌识别系统,但因为我国车牌样式的多样性、车牌颜色的多样性以及包含汉字等特点,这些车牌识别系统不适合我国国情。
基于图像处理的车牌识别技术主要包括车牌定位、车牌分割、字符识别等方面的技术。
关于车牌定位方面,主要理由车牌的边缘、形状、颜色等特征,再结合数字图像处理、形态学、小波变换、人工神经网络等技术对车牌进行定位。
基于特征的车牌定位的方法有C.J.Setchel提出的基于字符边缘检测的车牌定位方法,M.M.Mfahmy提出一种基于迭代阈值的车牌定位方法。
完全基于形态学的算法有运用数学形态学的闭运算获得车牌的候选区,然后采用投影的方法剔除假车牌,定位针车牌。
基于神经元网络的方法有基于BP网络的牌照定位方法,基于彩色的车牌定位方法有采用多层感知器网络对输入彩色图像进行彩色分割及多级混合集成分类器的车牌自动识别方法。
车牌字符识别与分割
一、实验目的:使用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。
西电数字图像处理大作业车牌识别出结果
第 1 页共 33 页基于MATLAB软件的车牌识别作者:学号:作者:学号:学院(系):电子工程学院专业:电子信息工程题目:基于matlab的车牌识别指导教师:李洁职称:教授2013年5月摘要随着经济社会的发展及人们生活水平的提高,机动车辆的数量越来越多,第 2 页共 33 页给交通管理带来了很大的压力,所以,我们必须找到一种方法来解决这个问题。
因为车牌号的重要地位,我们第一个想到就是设法利用车牌号来对车辆进行管理,所以车牌提取应运而生,用来提高汽车的安全管理水平及管理效率。
车牌识别系统主要包括了图像采集、图像预处理、车牌定位、字符分割、字符识别等五大核心部分。
关键词:MATLAB、图像预处理、车牌识别与分割目录1. 绪论 (1)1.1 本课题的研究背景 (1)1.2 国内外发展状况 (3)1.3 主要应用领域 (5)1.4 设计原理 (6)2. MATLAB简介 (7)2.1 MATLAB发展历史 (7)3.各模块的实现 (11)3.1设计方案 (11)3.2图像预处理 (11)3.2.1图像灰度化 (11)3.2.2图像的边缘检测 (12)3.3车牌定位和分割 (14)3.3.1车牌的定位 (15)3.3.2车牌的分割 (16)3.3.3对定位后的彩色车牌的进一步处理 (17)3.4字符的分割和归一化处理 (17)3.4.1字符的分割 (18)3.4.2字符的归一化处理 (19)3.5 字符的识别 (19)4.实验结果和分析 (22)5.实验总结 (24)致谢 (25)参考文献 (26)程序附录 (27)第一章绪论1.1 本课题的研究背景随着经济社会的发展及人们生活水平的提高,机动车辆的数量越来越多,给交通管理带来了很大的压力,所以,我们必须找到一种方法来解决这个问题。
因为车牌号的重要地位,我们第一个想到就是设法利用车牌号来对车辆进行管理,所以车牌提取应运而生,用来提高汽车的安全管理水平及管理效率。
尹其畅 数字图像处理大作业
《数字图像处理》大作业——车牌识别(车牌定位和字符分割部分)学院:电子与控制工程学院专业:交通信息工程及控制学号:****************任课教师:***车牌识别系统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。
一种新的车牌字符分割方法
KE YW ORDS:No s lmi a i n ie e i n to ;B n r r n i o ;T r e — lv l— s g n a i n;C n e t d c mp n n s i a ta st n h e y i ee e me t t o o n c e o o e t
No s i n to fLi e s a e ie El mi a i n o c n e Pl t
W U Ho g — me , HE i— r n , U a — la g n iC NJ o g L Xio in
( ies yo S in eadT cn lg f hn , fi n u 2 0 2 C ia Unvr t f cec n eh ooyo ia Hee A h i 3 07,hn ) i C
足, 同时能去 除字 符 内部 的浮动噪声 。 为该 算法 包含 三个 因
于 IS T 的发展有着举足轻重 的影响 。 识别 系统包 括车牌 车牌 定位 、 字符分 割和字符识别 三大部 分 。 由于 目前字符 识别算 法均是针 对单独 字 符进行 识 别 的 , 因此在 准 确地 定位 车 牌 后, 字符分割的好坏对字符识别起着 至关 重要 的作用。
ABS TRACT : a atrs g nain pa s a ge tr l n t e Lc n e P ae Re o nto y tm. Trdt n l Ch r ce e me tt ly r a oe i h ie s lt c g i n sse o i a ii a o
实验报告 车辆牌照定位与字符识别
六、小结
通过这次上机实验,给我最大的收获是认识到了MATLAB软件的强大之处,以前在图书馆里就看到过关于这款软件的书籍,就知道这个软件很强大,但是不曾仔细看。这次学习到了一些东西,了解了它的一些功能。它可以做计算,特别是矩阵方面的计算,是非常实用的工具。
预习分
操作分
报告分
总成绩
实 验 报 告
学 号
姓 名
同 组 者
实验名称车辆牌照定位与字符识别指导老师
班 级实验日期2011.11.14
实验报告具体内容一般应包括:一、实验目的和要求;二、实验原理;三、主要仪器设备(软件);四、实验内容及实验数据记录;五、实验数据处理与分析;六、问题与建议
一.实验目的和要求
最后,感谢在这次实验中帮助过我的同学和老师,因你们的帮助,我才能学习到更多的知识,因你们的帮助,我才能学好更多的知识。
(2)由摄像机或CCD摄像头拍摄的含有车辆牌照的图像通视频卡输入计算机进行预处理,图像预处理包括图像转换、图像增强、滤波和水平较正等;
(3)由检索模块进行牌照搜索与检测,定位并分割出包含牌照字符号码的矩形区域;
(4)对字符进行二值化并分割出单个字符,经归一化后输入字符识别系统进行识别。
三、主要仪器设备(软件)
图1牌照识别系统原理图
该系统是计算机图像处理与字符识别技术在智能化交通管理系统中的应用,它主要由牌照图像的采集和预处理、牌照区域的定位和提取、牌照字符的分割和识别等几个部分组成,如图1所示。其基本工作过程如下:
(1)当行驶的车辆经过时,触发传感器,系统被唤醒处于工作状态;一旦摄像头快门的光电传感器被触发,设置在车辆前方、后方和侧面的相机同时拍摄下车辆图像;
车牌识别方案范文
车牌识别方案范文一、车牌识别方案的工作流程1.图像获取:车牌识别方案首先需要通过摄像头或者其他图像采集设备获取车辆的图像。
通常情况下,摄像头会安装在交通路口、停车场、高速公路等地方,以捕捉车辆的图像。
2.图像预处理:获取的图像通常会受到光照、角度、遮挡等因素的干扰,需要进行预处理以提高车牌识别的准确性。
图像预处理包括图像灰度化、图像增强、噪声去除以及图像边缘检测等步骤。
3.车牌定位:在预处理后的图像中,需要准确定位车牌位置。
车牌定位可以通过特定的算法来实现,如基于颜色分析、形状分析以及边缘检测等方法。
4.字符分割:车牌定位后,需要将车牌上的字符进行分割。
字符分割是车牌识别的关键步骤,常用的方法包括基于投影法、边缘检测法以及基于神经网络的方法等。
5.字符识别:字符分割后,对每个字符进行识别。
字符识别可以采用传统的模式匹配算法,如模板匹配、特征提取等,也可以使用深度学习的方法,如卷积神经网络(CNN)。
6.结果输出:识别后的字符可以被输出到屏幕、存储设备或者通过网络传输给其他系统进行进一步处理和分析。
二、车牌识别方案的关键技术1.图像处理:图像预处理是车牌识别的基础,包括图像灰度化、直方图均衡化、图像平滑、边缘检测等方法,可以提高车牌识别的准确性和稳定性。
2.特征提取:特征提取是字符识别的关键技术,根据字符的不同特征,可以选择不同的方法进行提取,如基于亮度、颜色、纹理等。
常见的特征提取方法包括傅里叶描述子、局部二值模式等。
3.移动目标检测:车牌识别方案通常需要在复杂的背景中对移动的车辆进行检测和跟踪。
移动目标检测可以通过传统的背景建模、帧差法等方法,也可以使用深度学习的方法,如基于卷积神经网络的目标检测算法。
4.字符识别:字符识别是车牌识别的核心技术。
传统的字符识别方法包括基于模板匹配、形状匹配、统计特征等方法,深度学习方法则可以采用卷积神经网络、循环神经网络等。
三、车牌识别方案的应用场景1.交通管理:车牌识别可以应用于交通路口的交通管理,如自动识别违章车辆、实时监测交通流量等,提高交通管理的效率和准确性。
车牌识别综合实验报告大作业
数字图像处理综合实验报告车牌识别技术(LPR)组长:__ ******_____组员:___ _****** ____ _******_________ _*******___指导老师:___ *******_____*****学院****学院2010年6月10日实验五车牌识别技术(LPR)一、实验目的1、了解车牌识别系统的实现,及车牌识别系统的应用;2、了解并掌握车牌识别系统如何实现。
二、实验内容1、车牌识别系统的图像预处理、2、车牌定位、3、字符分割4、字符识别三、实验原理车辆牌照识别(LPR)系统是一个专用的计算机视觉系统,它能够自动地摄取车辆图像和识别车牌号码,可应用在公路自动收费、停车场管理、失窃车辆侦察、门卫系统、智能交通系统等不同场合。
LPR系统的广泛应用将有助于加快我国交通管理自动化的进程。
1、预处理摄像时的光照条件,牌照的整洁程度,摄像机的状态(焦距,角度和镜头的光学畸变),以及车速的不稳定等因素都会不同程度的影响图像效果,出现图像模糊,歪斜或缺损,车牌字符边界模糊不清,细节不清,笔画断开,粗细不均等现象,从而影响车牌区域的分割与字符识别的工作,所以识别之前要进行预处理。
预处理的包括:1)消除模糊——用逆滤波处理消除匀速运动造成的图像运动模糊2)图像去噪。
通常得到的汽车图像会有一些污点,椒盐噪声,应用中值滤波 3)图像增强自然光照度的昼夜变化会引起图像对比度的不足,所以必须图像增强,可以采用灰度拉伸,直方图均衡等通过以上处理,提高了图像的质量,强化了图像区域。
2、车牌定位自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。
首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。
• 图像的灰度化 • 图像灰度拉伸• 对图像进行边缘检测 采用Sobel 算子经行边缘检测该算子包含两组3*3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
- 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数字图像处理
杨为民.王世文.车牌自动识别技术及应用邹永星.车牌字符分割方法的研究
白建华.车牌字符分割及识别算法研究。