车牌识别算法讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Canny边缘检测
预处理:将图像灰度化
1、去噪(均值滤波、中值滤波、高斯滤波)
2、求图像梯度的幅值和方向
幅值:G=√(J(i,j+1)−J(i,j))^2+(J(i+1,j)−J(i,j))^2
由于幅值是x方向和y方向的叠加,根据x方向和y方向的权重,该幅值的方向也能求出来,这个在后面非极大值抑制中用来定位参与计算的点。
最右边和最下边的点是不参与计算的。
3、非极大值抑制
(1)将图像边缘的点去除掉(这里只需要将边缘的像素点灰度值变为0即可)
(2)内部点梯度值为0的去除掉(梯度为0,就是灰度没有变化,一定不是边缘点)(3)在垂直边缘方向上,两侧灰度值的加权和是否都比边缘上点的灰度值小,就是要找到极大值点,边缘的方向有四种情况
x
4、灰度图像二值化
Sobel算子
1、预处理:将图像灰度化
我们所说的算子是给图像做卷积的单位。这个单位可以大,可以小。大的有5x5的矩阵,这就是二阶微分算子,有高斯-拉普拉斯算子
这个单位也可以小,比如3x3的矩阵,有prewitt算子和sobel算子。
也有更小的2x2矩阵的Roberts算子
这些都有其运用的地方,再小或者更大的就失去实际运用的效果了。
2、这里我选择了sobel算子。它由水平梯度模板和垂直梯度模板组成。用水平梯度模板和图像卷积后,就能表象图像像素点值在水平方向上的变化。图中的水平线段由于在水平方向上基本上没有变化,所以变换后的图像也基本上看不到水平线段了。垂直梯度模板同理。将两幅图像通过公式相加后就得到了边缘被锐化的图像。这里的边缘由于知道水平和垂直分量,所以其也是有方向性的。
3、将图像二值化后就能得到边缘的线段了。这里也要注意一下,线段有可能不是一个像素宽度的,如Roberts算子,我们就要对其进行图像细化,将线段变成一个像素点宽度,方法我会在后面介绍。
Hough变换
经过之前的处理过后,我们用肉眼就能看到二值图像中有一条一条的线段。计算机是如何识别这些线段的呢。这里用了Huogh变换。
我们平常描述线段y=mx+b,m和b是已知量,x和y是变量。Hough变换中我们把x 和y变成已知量,图像中线段上的每个像素点就对应一个x和y。运用公式就可以将即将(x,y)平面的每个点变换为ρ-θ空间的每一条曲线。曲线的交点就是过这些点的公共的直线,利用这个方法就能定位图像中的直线。
字符分割
这里我们只讨论大陆的蓝底车牌。这样的车牌是有固定的特点的。
在字符分割时还要处理几种情况。
在投影的图像中,我们也可以发现一些东西。不同的字符投影有些区别不大,有些是有明显的区别的。我们可以通过这些来辅助判别一些字符。
图像细化
前面提到了图像的细化,这里也需要用到。后面我们要用字符的形态特征来判别字符,当字符只有一个字符宽度时才可以方便准确地辨别出不同的字符。
这里用到了基于索引表的图像细化算法。
取3x3的矩阵,要判断的像素点放中间,周围还有8个位置。8位的话,一共有256中情况。所以我们用了8x8的索引表。
每次的判别就是一次卷积操作。P0幅值2,p1幅值4,p3幅值8,后面的幅值各自位上的权重。卷积后,得到的值到索引表中查询,如果为1就删去。索引表这样设置是前人智慧的结晶应该是这样的细化效果最好。
循环操作,直到没有可以删去的点为止,这样就能将图像中的字符细化到只有一个像素宽度。
字符识别
不同的字符有着不同的形态特征,我们这里用到了四个特征,下面我依次来介绍。
1、笔画的斜率,四个方向可以得到12个特征向量
2、字符的拐点,拐点的幅度累加和,四个方向可以得到四个特征向量
3、侧面轮廓深度,比如字符‘S’和‘u’。字符‘S’在左右侧面具有明显的凹特征,
顶部和底部都比较平缓;而字符‘u’的顶部有明显的凹特征.其他3个侧面轮廓均
比较平缓。四个侧面的轮廓深度累积值,可获得4个特征向量。
4、只对字符外围和骨架或轮廓的特征扫描提取,往往无法很好地区分一些外围特征类
似而内部特征差异较大的字符。如字符“B”和“D”,这两个字符的外围轮廓累积
特征是非常接近的,但是其字符内部特征有明显的差异。这里引入字符内部像素统
计特征提取。如图(d)所示,在字符图片中划分两个粗网格,并计算两个网格分别包
含的像素数量。字符内部像素统计特征提取共获得2个特征向量。
Robert算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感。Prewitt 算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。LOG滤波器方法通过检测二阶导数过零点来判断边缘点。LOG滤波器中的a正比于低通滤波器的宽度,a越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。
(1)去噪
任何边缘检测算法都不可能在未经处理的原始数据上很好地處理,所以第一步是对原始数据与高斯mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素雜訊在经过高斯平滑的图像上变得几乎没有影响。
(2)用一阶偏导的有限差分来计算梯度的幅值和方向。
(3)对梯度幅值进行非极大值抑制。
仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。(non-maxima suppression,NMS)
解决方法:利用梯度的方向。
四个扇区的标号为0到3,对应3*3邻域的四种可能组合。在每一点上,邻域的中心象素M 与沿着梯度线的两个象素相比。如果M的梯度值不比沿梯度线的两个相邻象素梯度值大,则令M=0。
(4)用双阈值算法检测和连接边缘。
减少假边缘段数量的典型方法是对N[i,j]使用一个阈值。将低于阈值的所有值赋零值。但问题是如何选取阈值?
解决方法:双阈值算法。双阈值算法对非极大值抑制图象作用两个阈值τ1和τ2,且2τ1≈τ2,从而可以得到两个阈值边缘图象N1[i,j]和N2[i,j]。由于N2[i,j]使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。双阈值法要在N2[i,j]中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在N1[i,j]的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在N1[i,j]中收集边缘,直到将N2[i,j]连接起来为止。
在连接边缘的时候,用数组模拟队列的实现。以进行8-连通域搜索。