机器学习-车牌识别框架学习

之前学习了一个GitHub开源的框架,GitHub地址为: https://github.com/liuruoze/EasyPR 希望通过此篇博客详细阐述如何一步步实现车牌的识别过程。 车牌识别分成了两个部分,首先是车牌的定位,然后则是车牌的文字识别。 Plate Detect过程中包含了三个部分,“Plate location”,“SVM train”,”Plate judge”。其中最重
摘要由CSDN通过智能技术生成

之前学习了一个GitHub开源的框架,GitHub地址为:
https://github.com/liuruoze/EasyPR
希望通过此篇博客详细阐述如何一步步实现车牌的识别过程。
车牌识别分成了两个部分,首先是车牌的定位,然后则是车牌的文字识别。
Plate Detect过程中包含了三个部分,“Plate location”,“SVM train”,”Plate judge”。其中最重要的是“Plate location”部分。
有人提出了这样的疑问:
EasyPR在处理百度图片时的识别率不高。确实如此,由于工业与生活应用目的不同,拍摄的车牌的大小,角度,色泽,清晰度不一样。而对图像处理技术而言,一些算法对于图像的形式以及结构都有一定的要求或者假设。因此在一个场景下适应的算法并不适用其他场景。目前EasyPR所有的功能都是基于交通抓拍场景的图片制作的,因此也就导致了其无法处理生活场景中这些车牌照片。
因此对于不同的场景,算法要做不同的适配。对于“Plate Location”过程无法处理生活照片的定位,我们可以对这一部分进行适配改造,但是后面的字符识别过程是相同的,整体架构不变。
 在EasyPR中,“Plate Locate”过程被封装成了一个“CPlateLocate” 类,通过“plate_locate.h”声明,在“plate_locate.cpp”中实现。
 CPlateLocate包含三个方法以及数个变量。方法提供了车牌定位的主要功能,变量则提供了可定制的参数,有些参数对于车牌定位的效果有非常明显的影响,例如高斯模糊半径、Sobel算子的水平与垂直方向权值、闭操作的矩形宽度。
 CPlateLocate中最核心的方法是plateLocate方法。
  //! 车牌定位

    int plateLocate(Mat, vector<Mat>& );

  方法有两个参数,第一个参数代表输入的源图像,第二个参数是输出数组,代表所有检索到的车牌图块。返回值为int型,0代表成功,其他代表失败。plateLocate内部是如何实现的,让我们再深入下看看。
如果我们的车牌没有大的旋转或变形,那么其中必然包括很多垂直边缘(这些垂直边缘往往缘由车牌中的字符),如果能够找到一个包含很多垂直边缘的矩形块,那么有很大的可能性它就是车牌。
识别流程如下:
1、对原始图像高斯模糊,这步的作用是平滑图像,去除干扰的噪声。
2、对灰度图像进行Sobel运算,得到图像的一阶水平方向导数。其实是提取出了图像的边缘信息。
3、对图像使用闭操作,可以看到车牌闭操作后被连接成一个矩形的区域。
这里写图片描述
4、求出上面图像的所有轮廓。对所有的轮廓要进行筛选。
5、对所有轮廓求最小外接矩形,然后验证,不满足条件的被淘汰。验证一般是按照外接矩形的长宽比例范围设置一定的阈值。
6、角度判断,我们要把倾斜角度大于阈值(如正负30度)的矩形舍弃。余下的矩形进行微小的旋转,使其水平。
这里写图片描述
7、上面的是 候选

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值