MATLAB实现的车牌定位系统

看完《数字图像处理后》,做的图像识别的入门级项目,代码在: https://github.com/zhoulukuan/Plate-Location ,论文都可以在知网里找到,我就不贴了。具体项目的一些简介可以看github,大致上讲,可以分为颜色检测、区域操作、车牌检测算法和夜晚下的Retinex算法四个环节。

颜色检测

选用颜色检测的好处是在于定位比较精准。选中图片中特定的颜色区域,然后每个区域单独拿出来检测,可以提高检测速度。相对于对图片灰度化,然后进行算法增强与补偿的思路来说,颜色检测对图片信息的利用更加充分。缺点也很明显,就是对于某些强光或者异物(如污泥)引发的车牌颜色变化没有很好的检测能力。

颜色检测部分我较多地参考了:

陈昌涛.基于彩色和黑白纹理分析的车牌定位方法[D].重庆:重庆大学,2008

主要思路是在HSV模式下计算颜色与标准颜色相似度。从colorDetection.m文件中,可以看到,针对区域和非区域、白天和夜晚、各种颜色的参数都是不同。这里区域和非区域的差别可能比较难理解。具体来说,就是区域颜色检测是为了框出特定颜色区域,寻找车牌可能的所在区域的;而非区域则是为了检测特定的颜色边缘,为寻找某种颜色的边缘点做投影准备的。因此非区域阈值可以设置得窄一点,区域阈值可以设置大一点。

其实最主要的,设定区域和非区域参数的原因是区域的话需要进行一系列的形态学操作。我的步骤是:去除小区域——膨胀——进一步去除小区域。第一个去除小区域是排除大量干扰点,这里的面积阈值可以设置得比较小。随后的膨胀操作,是为了将车牌在颜色检测中得到的可能有断裂情况的车牌不同区域连成一体。最后,再次去除小区域的面积阈值可以设置大一些,是为了进一步过滤区域,减小工作量。不一步到位的原因是,若先去除区域,则可能将车牌断裂的小区域去除,区域不完整;若先膨胀,则可能引入大量不同区域连在一起造成的干扰。

区域操作

区域操作主要是我发现直接进行车牌检测干扰比较多,所以设置了很多检验条件(虽然好像也没什么卵用)。区域提取主要是依靠regionprops函数实现的。

一开始实际上我打算使用一个区域归并算法,顺便替代掉上面说的膨胀操作,因为膨胀可能会把车牌和周边区域连起来,引入干扰,这个算法在这里有提到:

陈寅鹏,丁晓青.复杂车辆图像中的车牌定位与字符分割方法[J].红外与激光工程

不过实际使用效果很差,大概因为我的样本库比较杂和刁钻,有很多倾斜度过高的图片,所以垂直重合率很低。我还是在代码里写了这个算法,真实的效果不得而知。
另外就是根据区域里蓝色点的比例之类的,区域大小之类的做做基本的排除工作了。

车牌检测

投影点选择

很多论文提到的思路都是差分绝对值投影,我个人感觉是不太靠谱的,因为对信息的利用率还是太低了。相比较而言,第一篇论文提到的提取白色区域和蓝色区域,计算边缘点然后做与,得到蓝白边缘点,然后计算蓝白交界点做投影就会更好一些。

边缘提取的话我用的是colorLP方法和OTSU阈值化方法,使用纵向sobel算子应该也可以,感觉差距不是很大。不过我只求了蓝色边缘点然后做投影,原因还是样本库太杂的问题。给我的样本库很多网上搜集的小图片,可能车牌大小还不到40*20这样子,打开一看都是像素点,白色的文字基本和蓝色背景混成一堆,颜色混叠了……

实际看了下,蓝色边缘和蓝白边缘区别不是很大的,不过真的图片尺寸理想的话,最好的还是用蓝白边缘交界。顺带一说,我感觉用白色边缘点膨胀然后与蓝色边缘点相与比较好,原论文的算法,检测出的点真的太少,可能这样会更准确一些?不过我感觉车牌纹理特征体现的不明显就是了……

计算具体区域

个人觉得这部分应该是整个项目最复杂的部分。简单说下思路:

水平方向,检测连续多波峰特征,指的是车牌纹理蓝色边缘点投影会连续出现多个高峰:
1、获取函数所有极大值,极大值最小间隙为图片宽/20,用极大值序列中第三高的峰值的0.6作为阈值。之所以选择第三高的峰值来获取阈值是因为在运行时发现区域两边会有几率出现0~2个干扰,如果干扰是峰值极大的情况,很可能会影响判断。而极大值最小间隙的存在是为了防止相近的峰被误检测。假设车牌最小宽度占总区域的1/3,则七个字符,每个字符高峰的距离为1/20。
2、获取大于阈值的所有峰值及其位置。依次检索每个峰,判断某个峰的位置和它前一个峰是否接近,若接近则认定检索峰和前面的峰属于同一个可能的“连续多波峰区域”;否则则认为检索峰属于新的“连续多波峰区域”。
比如我们检索到大于阈值的有8个峰,前7个峰都很接近,第8个峰离第7个较远,最后的区域划分是[1 7]和[8 8],代表1-7峰属于一个“连续多波峰区域”,而8峰则是一个单独的“连续多波峰区域”。
距离是否足够接近是由需要判断的峰和前面最后一个峰的距离与平均距离的比值判断的。
3、将包含最多峰数的区域视为车牌可能存在区域。若该区域所含峰数过少或宽度过短,则直接判断不含车牌;否则,从该区域的第一个峰向左检索,若某点接近零且该点的左面不含有大于阈值的峰,则该点视为车牌开始坐标;从该区域的最后一个峰向右检索,遇到的第一个接近零的点视为车牌结束坐标。接近零代表该点值小于峰值阈值的5%。
之所以开始坐标还要有左面不含有大于阈值的峰值要求,是因为在调试时发现,若左边的开始坐标仅以接近零为条件,程序会将车牌“XX·XXXXX”中的点作为开始位置。不过考虑中间的点确实有时候太小,会把车牌隔断,我后来把最大区域所含峰过少就判断不含车牌改成了,最大区域所含峰或者最大和次大区域所含峰之和过小,一定程度上也减小了这个问题。

垂直方向:
1、获取函数的最大值及其位置,设置最大值5%为阈值。
2、从最大值位置向左检索,若某点接近零且该点的左面不含有大于阈值的峰,则该点视为开始点;从最大值位置向右检索,若某点接近零且该点的右面不含有大于阈值的峰,则该点视为结束点。
波峰要求同样是为了防止检索到的车牌不完整而设置的。
3、若垂直方向的宽度比例过短,则直接判断不含车牌;否则,结合水平方向的宽度进行车牌判断。

含有车牌条件:
宽度大于40,高度大于20,长宽比在0.7~6之间。这个阈值和各种论文比起来很大了,主要原因当然还是样本库……写到这里真是满满的怨念。

夜晚下的Retinex算法

最后就是考虑到夜晚下车牌太暗所希望做的补偿算法,这个具体参考: https://github.com/Vespa314/Retinex ,将的很清楚,代码也写的很棒,我的代码也是用了这里的。不过不知道为什么,好像这个代码使用后得到的图像再转成HSV模式时,部分图像会提示函数错误,而且还是工具箱的函数使用错误,让我有点摸不着头脑,也是我目前没有找出来的一个bug。

关于白天和夜晚的衔接,我的也比较粗暴。直接先检测白天的条件,没有的话再检测夜晚……主要是关于白天和夜晚不是很好判断。我最早使用的是灰度化图片的平均值,标准差平均值,OTSU阈值和灰度平均值比值来判断的,效果其实还是不错的。更加复杂精准的方法,我看过用模式的聚类来做的,也属于我知识的空白区吧,以后有机会再做改进。最后使用的这个方法也是勉勉强强能用,夜晚识别率也只有一半左右,没办法识别强光。

总结

想想,自己做的还是比较惨淡的。很多更加有效精准的方法不能用,碍于样本库的多样复杂,检测率一直没办法提高。有时候还确实有卡着的感觉,好像忙活了半天也就改改参数,没什么实质化的进步。感觉自己还是对特征挖掘不够充分,掌握方法不多,也很不足,说到底还是个刚入门的。希望自己以后继续深入学习能找到改进的方法吧。

MATLAB实现的车牌定位系统相关推荐

  1. 车牌定位系统matlab,基于Matlab的车牌定位系统的研究与设计论文

    基于Matlab的车牌定位系统的研究与设计论文 本 科 毕 业 设 计基于 Matlab的车牌定位系统的研究与设计摘 要随着我国城市急速发展,交通管理成了一个非常热门的话题,由于交通管理需求日益提高, ...

  2. 基于matlab的蓝色车牌识别(车牌倾斜矫正)

    目录 一 处理流程 二 结果展示 三 核心要点解读 四 matlab代码实现 整套方案好包括以下博客: (1)基于matlab的蓝色车牌识别(绪论) (2)基于matlab的蓝色车牌识别(车牌定位) ...

  3. 基于MATLAB的机动车车牌自动识别系统

    随着智慧交通的发展,对机动车监管的需要,车牌识别技术成为现代智慧交通系统中不可或缺的一部分,在日常生活中应用十分 广泛.本文章研究分析了该技术实现各个部分所使用的相关算法,选取了识别准确率高并且效率较 ...

  4. 基于matlab的蓝色车牌识别

    集齐了基于matlab的蓝色车牌识别,比较全,包括车牌的定位和识别,分离,读取. 基于matlab的蓝色车牌定位与识别---绪论

  5. 基于matlab的蓝色车牌识别(绪论)

    目录 绪论 一 车牌识别系统的工作原理详解 二 实现的内容 三 实现的依据 转载请注明出处,谢谢! 绪论 光阴荏苒,岁月如歌,三年的读研时间已过去了两年,马上就要面临找工作,是时候写点技术博客备着了. ...

  6. matlab车牌识别 复杂环境,基于MATLAB复杂背景车牌识别检测系统

    基于MATLAB复杂背景车牌识别检测系统 1.选题目的和意义 在复杂背景车牌识别检测系统中,由于拍摄时的光照条件.牌照的整洁程度的影响,和摄像机的焦距调整.镜头的光学畸变所产生的噪声都会不同程度地造成 ...

  7. 基于matlab的蓝色车牌识别(车牌定位)

    目录 一 处理流程 二 结果展示 三 核心要点解读 四 matlab代码实现 整套方案还包括以下博客: (1)基于matlab的蓝色车牌识别(绪论) (2)基于matlab的蓝色车牌识别(车牌定位) ...

  8. 【原】基于matlab的蓝色车牌定位与识别---绪论

    本着对车牌比较感兴趣,自己在课余时间摸索关于车牌的定位与识别,现将自己所做的一些内容整理下,也方便和大家交流. 考虑到车牌的定位涉及到许多外界的因素,因此有必要对车牌照的获取条件进行一些限定: 一.大 ...

  9. MATLAB多方法车牌识别系统(bp+模板+GUI)

    一.课题介绍 资源链接https://gitee.com/chending006/cpsbhttps://gitee.com/chending006/cpsb 随着汽车数量的增加,城市交通状况日益受到 ...

  10. MATLAB 数字图像处理---车牌简单识别【亲测有效】

    文章内容:利用 MATLAB 对图像进行简单处理,包括图像的模糊.锐化.和直方图均衡化:对图像进行边缘检测:并对利用 MATLAB 对图像中的数字提取识别. 目录 1 MATLAB 对图像进行简单处理 ...

最新文章

  1. 自定义维护视图变量(Maintenance view variant)
  2. boost::fusion::erase用法的测试程序
  3. 【Linux】一步一步学Linux——group文件详解(108)
  4. 2017年3月21日
  5. sql顶部菜单项消失_SQL选择顶部
  6. UG NX 12 同步建模:删除面
  7. 自步学习-Self-paced Learning
  8. Linux虚拟机怎么越狱,iOS 13永久越狱工具Linux/windows版进展突破,就快来了(附视频)...
  9. Hazelcast IMDG参考中文版手册-第七章-分布式数据结构
  10. 分享一个matplotlib柱状图
  11. python数据导入之导入各类文件方法
  12. 少吃调料竟然是错的!这9种调料原来是长寿高手
  13. 关于怎么解决java.lang.NoClassDefFoundError错误
  14. python中将数据写入excel
  15. QGIS上常用底图插件上可用底图及其评价
  16. 基于链表的贪吃蛇(C语言)
  17. matlab专业代做hslogic,MATLAB代做|FPGA代做--OLA算法的仿真与分析
  18. linux var mqm权限,Linux MQ中间件/var/mqm文件系统结构与错误日志分析
  19. 中国联通3g上网设置
  20. 微信小程序实现两边小中间大的轮播效果

热门文章

  1. python新版个人所得税代码_个人所得税计算代码
  2. 基于java网上体育用品商城系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  3. Visual Studio 2017中找不到商业智能(Business Intelligence)模块 |
  4. 计算机全选的键盘,全选快捷键是什么,教您电脑全选快捷键是什么
  5. oracle现金流量表逻辑,财务学习:现金流量表内在逻辑研究
  6. uva10066-双塔
  7. ciscn 2020 Misc the_best_ctf_game
  8. 商用密码产品认证-IPSec/SSL网关技术与产品
  9. 内边距怎么设置html,如何设置内边距
  10. 系统故障等级和故障报告规定