[CLPR] 定位算法探幽 - 边缘和形态学
一. 引言
如何从一副图片中找到车牌? 这是机器视觉的一个应用. 理所当然地, 思考的角度是从车牌本身的信息入手, 为了讨论方便, 下面均以长窄型蓝白车牌为例.
下图就是这样一张车牌的基本信息.

一眼看过去, 可以得到的信息有: 长宽比 - 3.14, 字符数 - 7, 第一个字符是汉字, 第二个字符是字母, 之后为5个字母/数字混合等距排列.
同时还可以大致了解到, 一个清晰的车牌应该拥有足够多的边缘信息, 换句话说, 边缘信息足够密集地聚集在一个3.14:1的矩形中.
所以今天介绍的算法, 都使用的是边缘信息, 结合上形态学来进行判别.
二. 什么是边缘?
什么是边缘? 一般我们定义灰度(256阶)图像中灰度的跳变点为边缘. 跳变点指的是相近的两个像素的灰度差异较大.
一般用于计算边缘的方法是使用算子对图像进行处理, 我们这里使用的是Sobel算子. 用于检测垂直边缘的三阶Sobel算子的形式大致如下:

我们设算子为S, 图像中应用于算子的部分为GS, 输出为OS. 我们可以得到OS = GS * S. 也即计算了GS左侧和右侧灰度值的差, 将此差值赋予中间的三个像素. 可以看到, 这是符合我们对于边缘的定义的. 下面我们就看看使用垂直和水平两个方向的Sobel算子的计算结果:
第一张是原图, 第二张是灰度边缘.


三. 形态学 - Morphology
形态学听起来高大上, 实际上不过是利用图像的一些几何特征进行分析罢了. 在CLPR(中国车牌识别)学术领域, 形态学分析可以说占据了半壁江山.
第一章我们就分析过, 车牌可以利用的形态学信息不过寥寥: 长宽比3.14, 边缘密度高等.
其中长宽比如何确定? 边缘密度的高低又如何定量?
这些参数的获取方法和确定方法才是隐藏在形态学分析背后的关键所在.
四. 中国车牌识别常见算法汇总
我总结了21世纪以来国内外大多数期刊学报发表的关于CLPR的论文以及它们的效果, 这里先放出来, 以便下一步分析.

大多数已发表的结果定位的成功率都在96%以上. 基于应用情景的不同, 成功率略有波动但无须在意.
这里我们分析第一篇论文"A hybrid License Plate Extraction Method Based On Edge Statistics and Morphology". 这篇论文发表于模式识别国际会议(ICPR2004)的Proceedings上. ICPR属于模式识别领域最顶级的会议了, 所以这篇文章的可靠性还是有的. 下面我们看看这篇论文定位算法的基本思路:

我们可以看到, 这篇文章使用的是垂直边缘检测配合边缘分析和形态学提取的方法. 其中的第三步是算法的关键实现点, 通过连接近邻的边缘点构造边缘线进而连接这些线来构造矩形, 最后根据矩形的位置信息来合并这些矩形, 从而实现了一种巧妙的图像膨胀. 这种膨胀不同于一般IP中使用的无目的的膨胀, 它倾向于合并那些水平距离不远, 垂直距离相近的矩形(见下式).

连接密度定义
overlapV是两个矩形垂直方向上的重叠部分, disH是它们的水平距离, h1, h2, w1, w2则是它们的高度和宽度.
- 当两矩形越处于同一水平线, overlapV越大, 则D就越大, 这两个矩形就越倾向于合并;
- 当两个矩形距离越远, 则disH就越大, D就越小, 这两个矩形就越不倾向于合并;
- 当两个矩形都比较高, D越小, 越不倾向于合并;
- 当两个矩形都比较宽, D越大, 越倾向于合并;
所以问题的关键就落在了D取多少的时候应该合并, 取多少的时候又不该合并呢? 这是一个阈值选取问题. 论文中选取了4阶阈值(64, 32, 16, 8)分别对图像进行处理, 得到4张处理后的图. 随后基于以下四点进行提取:
- 高阈值得到的矩形优先级高;
- 图像底部的矩形优先级高;
- 符合标准车牌的比例的矩形优先级高;
- 交叉的区域可以参考D的定义.
在获取这些图后, 作者又使用了非线性滤波器(但是没说是什么滤波器)移除了一些窄长边缘. 随后使用3x15的窗对上述图像进行卷积, 再使用大津二值法进行二值化. 二值化结束后, 对于每一个边缘点, 如果它上下的边缘点的距离低于某一阈值, 我们就连接它上下的边缘. 随后使用1x9的窗口对图像进行膨胀.
这之后就是连通分量分析和特征提取. 此处不再赘述.
五. 边缘定位算法的优劣分析
边缘定位算法的优点是准确率非常高, 但是问题明显.
- 受噪声影响, 误检率高;
- 受噪声影响, 容易粘黏导致形态学分析失效;
- 受光照条件影响, 性能鲁棒性不足.
对于第一点和第二点, 我们需要对边缘进行处理, 尽量滤除非车牌的边缘或弱化它们.
对于第三点, 图像的预处理就非常重要, 直方图均衡化特别是分块局部直方图均衡化是常用的手段, 也有针对特定灰度的折线分段灰度拉伸算法, 此处也不赘述.
总结起来, 使用边缘算法需要注意两点:
- 预处理工作
- 边缘滤波
[CLPR] 定位算法探幽 - 边缘和形态学的更多相关文章
- 关于APIT定位算法的讨论
关于APIT定位算法的讨论 [摘要] 无线传感器网络节点定位机制的研究中,基于距离无关的定位技术得到快速发展,其中基于重叠区域的APIT定位技术在实际环境中的定位精度高,被广泛研究和应用. [关键 ...
- Trilateration三边测量定位算法
转载自Jiaxing / 2014年2月22日 基本原理 Trilateration(三边测量)是一种常用的定位算法: 已知三点位置 (x1, y1), (x2, y2), (x3, y3) 已知未知 ...
- LED室内定位算法:RSS,TOA,AOA,TDOA(转载)
转载自:https://blog.csdn.net/baidu_38197452/article/details/77115935 基于LED的室内定位算法大致可以分为四类: 1. 几何测量法 这种方 ...
- 基于麦克风阵列的声源定位算法之GCC-PHAT
目前基于麦克风阵列的声源定位方法大致可以分为三类:基于最大输出功率的可控波束形成技术.基于高分辨率谱图估计技术和基于声音时间差(time-delay estimation,TDE)的声源定位技术. 基 ...
- 伪距定位算法(matlab版)
在各种伪距定位算法中,最小二乘法是一种比较简单而广泛的方法,该算法可以分为以下几步: 1.准备数据与设置初始值 这里准备数据,主要是对于各颗可见卫星,收集到它们在同一时刻的伪距测量值,计算测量值的各项 ...
- SIFT定位算法关键步骤的说明
1. SIFT算法中一些符号的说明 $I(x,y)$表示原图像. $G(x,y,\sigma)$表示高斯滤波器,其中$G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}exp ...
- Canny算法检测边缘
Canny算法是边缘检测的一个经典算法,比单纯用一些微分算子来检测的效果要好很多,其优势有以下几点: 边缘误检与漏检率低. 边缘定位准确,且边界较细. 自带一定的滤噪功能,或者说,对噪声的敏感度要比单 ...
- mser 最大稳定极值区域(文字区域定位)算法 附完整C代码
mser 的全称:Maximally Stable Extremal Regions 第一次听说这个算法时,是来自当时部门的一个同事, 提及到他的项目用它来做文字区域的定位,对这个算法做了一些优化. ...
- 基于Ubuntu1604+ROS-kinetic+roscpp的激光雷达定位算法从零开始移植
调试的过程太麻烦了,因此打算详细解释一下每步的含义,很多地方懂了之后发现其实很简单,但是学起来却发现很多地方无从下手,因为资料太少了,真的都是不断踩坑一点一点摸索出来的,写以此文以便后人乘凉 此处将展 ...
随机推荐
- 『PyTorch』第十三弹_torch.nn.init参数初始化
初始化参数的方法 nn.Module模块对于参数进行了内置的较为合理的初始化方式,当我们使用nn.Parameter时,初始化就很重要,而且我们也可以指定代替内置初始化的方式对nn.Module模块进 ...
- csp 通信网络
http://blog.csdn.net/zyy_1998/article/details/78334496 试题编号: 201709-4 试题名称: 通信网络 时间限制: 1.0s 内存限制: 25 ...
- JAVA 中CLOB与Clob有区别
在JAVA中CLOB与Clob是有区别的类型. (oracle.jdbc.internal.OracleCallableStatement)OracleCallableStatement能接收CLOB ...
- javassist和jdk动态代理
先来一个InvocationHandler示例,InvocationHandler类的作用是:对原始对象的方法做一个拦截. package com.zhang; import java.lang.re ...
- Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络
from:http://www.cnblogs.com/kemaswill/p/3266026.html 1. 多层神经网络存在的问题 常用的神经网络模型, 一般只包含输入层, 输出层和一个隐藏层: ...
- springboot笔记(一)
1.为什么一定要实现Iterable接口? http://blog.csdn.net/albert0420/article/details/44922325 而Iterable则不然,每次调用都会返回 ...
- SQL Server 调优系列基础篇 - 常用运算符总结
前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL ...
- C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}...
int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfadsf{0}adsfasdf",a);// ...
- codeforce 853A Planning
题目地址:http://codeforces.com/problemset/problem/853/A 题目大意: 本来安排了 n 架飞机,每架飞机有 ci 的重要度, 第 i 架飞机的起飞时间为 i ...
- python打包成.exe
pyuic5 mainwindow.ui -o test.py pip install pyinstaller pyinstaller -F -w ***.py https://blog.csdn.n ...