随着交通管理系统的日趋现代化,车牌自动识别系统成为智能交通系统的重要组成部分。通过对当前车牌识别的基本原理和主要方法的研究,分析比较各种识别方法的优缺点,针对车牌定位、字符分割和字符识别,本文提出一套实用可靠的算法。本文引用地址:http://www.eepw.com.cn/article/196910.htm

车牌定位作为整个算法步骤的第一步,定位错误将直接导致最终识别错误,定位不精确将提升分割难度。实际中不同车牌图像在拍摄距离和角度、拍摄手法、光照强弱等方面不尽相同,有时甚至差异很大,使得一些传统方法在图像群品质的差异存在较大跨度下其定位准确率低下,缺失普遍性。其中,利用水平灰度跳变特征的分步骤法即先粗略定位再精确定位是相对比较稳定的一种方法,但其缺点也很明显,就是精确定位不够精。为了改善这种情况,本文尝试性地提出了一种利用Hough变换多线检测实现精确定位的方法,同时结合先验知识,改进了水平搜索方式,有效地提升了车牌定位精准率,使得这一算法具有较强的适应性,并且速度快、鲁棒性好。

在字符分割中,得益于定位的良好效果,通过合理地二值化与滤波处理,提出了一种改进的投影法。该算法克服了车牌群光照变化跨度大以及边框、铆钉等常见因素干扰,使投影法字符分割的准确率得到了一定的提升。

车牌字符识别是车牌识别系统的核心部分,本文构造了BP神经网络进行车牌识别。通过反复修正各个参数使该识别算法快速准确,并且具有良好的稳定性,能满足车牌实时识别的要求。

1 车牌定位

1.1 图像预处理

(1)尺寸归一化:车牌图像的尺寸对算法中相关阈值的选取有较大影响。本系统中车牌图像尺寸均已归一化到400×300像素。

(2)图像平滑:为了更好地提取水平灰度跳变特征(与算法有关),有必要先对图像进行水平平滑处理。实验表明,使用[1/2 1/2]这样一种掩膜的效果最好。

1.2 算法

(1)特征提取[1]:提取水平灰度跳变特征。对经过了水平平滑的灰度图像,选取适当阈值T,将每一行各像素与其前一像素比较,若灰度差绝对值超过T,则记为1,否则记为0,从而完成对灰度图像进行水平方向灰度跳变特征的提取。实验证明,此方法与传统边缘检测相比,特征提取效果更显著、噪音更小。以水平方向为对象是因为车牌在水平方向较垂直方向灰度跳变特征更为明显。

(2)水平方向粗定位:对由(1)生成的二值图像,结合先验知识,即图像中车牌位置以下的部分与车牌以上的部分相比干扰要小很多,采取由下至上的行搜索方法。当某1行的1个值个数与整行像素之比值大于一定阈值时,便记下行位置x1,继续逐行上移搜索,当比值小于阈值时记下行位置x2,x1与x2形成坐标对,若x1与x2距离超过较小的高度(以400×300为例,车牌高度应大于10,所以选择10)时,即确定其为车牌水平方向切割位置(为了防止少切,分别对x1和x2进行向下和向上的适当延伸);否则,排除此x1和x2,并继续向上搜索寻找x1、x2坐标对,直到确定x1、x2为止,并对二值图像切割。为了增强稳定性,可以用双行比值代替单行比值,此时应缩小判定阈值。

(3)垂直方向粗定位[2]:设由(2)切割出来的图像为A,对A进行除噪处理后,先用1个与A等高度、宽度与高度相同的矩形框体B对A从左至右遍历搜索[3],若B中1值像素之和与B中全部像素之比大于一定阈值时,记录此时列位置为y1,然后用同样方式从右之左搜索,获得列位置y2。用y1与y2对A切割,完成垂直方向的粗定位。

(4)精确定位:在以往的车牌识别方法中,Hough变换线检测一般只用于车牌矫正,实际上Hough变换线检测更可用来做车牌定位。本文中将利用此对车牌做最后的精确定位。

Hough变换提取直线的原理[4]:

对于图像空间中的任意一点(x0,y0),将其变换为参数空间(θ,r)中的1条曲线r=x0 cos θ+y0 sinθ,对位于同一直线l上的n个点逐一进行上述变换,则在参数空间(θ,r)中对应得到n条曲线,由变换公式可知,这n条曲线必定经过同一点(θ0,r0)。找到参数空间中的这个点就知道了图像空间中的对应直线l,因此,Hough变换可以用来在二值图像中检测直线。

设由算法(3)粗切割得到的图像为C,利用Hough变换对C进行多条直线检测(至少10条以上)。取直线中端点行坐标最小值和最大值分别为车牌上下边界精定位值,取直线左端点列坐标平均值或中值为车牌左边界精定位值,取直线右端点列坐标平均值或中值为车牌右边界精定位值(经过反复实验论证,使用平均值时稳定性优于使用中值)。由此确定的车牌定位结果为最终定位结果。

图1~图7是选取了3幅不同方位角度车牌图像的详细定位过程。从图2可以看出,图像中车牌位置以下的信息干扰明显比以上部分的干扰弱小,这是因为车牌的下方主要是路面背景,而车牌的上方却包含了车灯、中网等敏感信息。由下至上的搜索法充分地利用了这一特征。同时由于车牌多处在图像下半部,从而也减少了搜索时间。用多直线检测,精确度高,鲁棒性好。

2 字符分割

字符分割之前,有必要对倾斜的车牌进行校正。用Hough变换进行倾斜角检测是一种常用的有效途径。

由于实现了车牌定位,可以用全局阈值法对定位结果图像重新二值化,以得到更理想的二值图像。图8是用Otsu法[5]得到的二值图。

字符切割最常用的方法是投影法。如果二值化后车牌图像的字符中粘连和断裂情况不那么严重,只需要垂直投影就可以很好地完成字符切割的任务。但是水平边框、铆钉有时会把一些“谷”填平,使得难以精确确定分割点。尽管如此,垂直投影仍然是字符分割中的一个非常重要的方法。本文对垂直投影法加以改进,基本上克服了边框和铆钉带来的影响。

对于二值化后可能存在的水平边框干扰如图8(a)所示(垂直边框对垂直投影法没有影响),根据先验知识:不管车牌整体的大小如何,单个字符的宽度不会超过整个图像宽度的1/8。因而可将宽度超过1/8或更多一点的白线像素置0。这样既去除了大部分干扰又无字符信息的丢失。

matlab hough算法车牌识别,一种利用Hough变换和先验知识的车牌识别新方法相关推荐

  1. matlab转子位置检测,一种基于反电势的永磁同步电机转子位置检测新方法

    2017年第9期信息通信2017 (总第177 期)INFORMATION & COMMUNICATIONS (Sum. N o 177)一种基于反电势的永磁同步电机转子位置检测新方法 王少坤 ...

  2. matlab悬置非线性位移计算公式,一种基于Excel的电动车动力总成悬置工况力数据处理方法与流程...

    本发明涉及计算机辅助工程(CAE)技术领域,具体涉及一种基于Excel的电动车动力总成悬置工况力数据处理方法. 背景技术: 动力总成的28工况力与位移分析是基于GM提出的传统车28工况修改而来,其分解 ...

  3. matlab分类算法代码,实现几种经典的分类算法(ID3,C4.5等)

    mitmatlab(分类) mitmatlab ADDC.m AGHC.m About.bmp Ada_Boost.m BIMSEC.m Backpropagation_Batch.m Backpro ...

  4. 一种利用百分比布局适配所有Android手机屏幕分辨率的方法

    我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 场景 1.团队里面,UI设计师往往只提供以一个标准分辨率来设计的UI设计稿, ...

  5. matlab hough算法车牌识别,一种基于数学形态学和Hough变换的车牌图像检测及定位算法-汽车电子-与非网...

    车牌识别系统(LPR)在现代交通检测和管理部门中发挥着举足轻重的作用.车牌识别系统主要包括车牌定位.字符分割和字符识别三部分[1].由于车牌定位的准确与否将会直接影响到车牌识别的结果,因此,车牌定位是 ...

  6. C++毕业设计——基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码)——车牌定位和识别系统

    基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现,文章末尾附有本毕业设 ...

  7. 繁凡的对抗攻击论文精读(三)ICLR2019 利用先验知识进行高效黑盒对抗攻击的 bandits 算法(MIT)

    点我轻松弄懂深度学习所有基础和各大主流研究方向入门综述! <繁凡的深度学习笔记>,包含深度学习基础和 TensorFlow2.0,PyTorch 详解,以及 CNN,RNN,GNN,AE, ...

  8. 【最强最全车牌识别算法】支持13种中文车牌识别的云端API部署(可直接获取源码使用)

    项目简介 在城市交通管理.视频监控.车辆识别和停车场管理中车辆检测与车牌识别是一项富有挑战而重要的任务.利用深度学习识别不同条件下的车辆及其车牌信息.更具体地说,实时目标检测网络(Yolov5)用于从 ...

  9. 【MATLAB图像处理实用案例详解(3)】—— 基于阈值分割的车牌定位识别

    目录 一.背景意义 二.理论基础 2.1 车牌区域分割: 2.2 车牌定位及裁剪 三.算法流程 3.1 车牌图像处理 3.1.1 图像灰度化 3.1.2 图像二值化 3.1.3 图像边缘检测 3.1. ...

最新文章

  1. Hdu 4920矩阵乘法(内存访问的讲究)
  2. 为什么有这个提示“Escape character is '^]'.”?(转载)
  3. anime.js 实战:实现一个带有描边动画效果的复选框...
  4. Apache下部署Django 的样式问题
  5. 用百度开放地图api在代码中获得两地距离
  6. javascript 中的暗物质 - 闭包
  7. 计算机网络【六】网络层协议
  8. linux为什么要禁止内核抢占,为什么linux在内核代码持有自旋锁后禁用内核抢占?...
  9. leetcode224. 基本计算器
  10. 关于C#关闭窗体后,依旧有后台进程在运行的解决方法
  11. HOWTO:如何在Redistributables视图中显示所有的水晶报表(Crystal Reports)Merge Module...
  12. 券商交易模式下的单产品多券商方案
  13. SWFUpload 2.5.0版 官方说明文档 中文翻译版
  14. 微软应用商店有哪些值得推荐的应用
  15. 依赖函数检查 mysql_connect()_解决的方法:mysql_connect()不支持请检查mysql模块是否正确载入...
  16. Ubuntu 设置屏幕字体大小
  17. 关于淘淘商城的一些基本说明
  18. 网上的音乐怎么下载成mp3格式歌曲?这3种一键下载的方法亲测好用!
  19. 【Java】若依前后端分离,分页数据为null报错
  20. CO11N-完工确认的BAPI使用

热门文章

  1. ps中图层放到顶层的快捷键是什么?
  2. Centos7系统安装yum遇到的问题failure: repodata/repomd.xml from base: [Errno 256] No more mirrors to try. http:
  3. 【Simulink教程案例4】使用Simulink自带的模块实现PID控制器,并对比案例1的PID控制器
  4. Echarts 数据过多时设置滚动条
  5. 计算机主机面板上的reset,一但中了IE窗口炸弹马上按下主机面板上的Reset键,重起计算机是对的吗...
  6. RPA优势解密丨到底能做什么?为何深受追捧?
  7. springboot启动画面看腻了,换一个试试?
  8. echarts xy轴虚线展示 字体颜色修改
  9. 2022年度技术总结
  10. ping命令 网络抓包 分析