图像处理任务之车牌识别采用hog特征+SVM分类方法

车牌识别的主要流程

本项目是以前做过的一个车辆检测、车流量计数的延伸----识别车牌号码,在此又根据网上资料学习后总结整个车牌识别项目所执行的步骤。图像处理任务之车牌识别采用hog特征+SVM分类方法_第1张图片车牌识别流程

1 图像预处理

首先采用高斯滤波去除图像中的噪点,将灰度图进行开运算,将较小的连通区域分割开来,将较大的连通区域保存。再将图片进行二值化处理,然后采用Candy边缘检测找到图片的边缘。然后再对边缘检测后的图像进行先闭后开操作使断续的边缘连城一个整体。最后采用轮廓查找的方法找到图片中所有的连通轮廓,车牌的轮廓就在其中。

2 车牌定位

车牌的定位主要是要将前面找到的轮廓进行筛选,找出我们需要的车牌区域,根据实际生活中车牌的特征我们可以依次进行判断。可以根据以下几个特征进行判别:1、轮廓是否为矩形,是否有四个边界。2、轮廓的长宽比是否符合车牌特征,一般的车牌长宽比是在2-4之间,如果车牌倾斜可能会小一点。3、轮廓的主要颜色,目前的车牌主要有蓝牌、黄牌、绿牌、黑牌几种,可以根据轮廓中的颜色分布进行判断。

3 仿射变换对车牌轮廓进行校正

识别到车牌区域后可以计算得到轮廓的四个边和四个顶点,通过计算旋转矩阵将车牌区域校正。
主要步骤如下:
step1 计算车牌轮廓的四个顶点坐标;
step2 计算每个边的长度;
step3 取两个长和宽中的最大值;
step4 将长宽转换到以(0,0)为起始点的新坐标点;
step5 采用cv2.getPerspectiveTransform()函数计算旋转矩阵step6 采用cv2.warpPerspective()函数对车牌区域进行仿射变换,得到校正后的图片。

字符分割

字符分割的主要思路是,基于车牌的二值化结果或边缘提取结果,利用字符的结构特征、字符间的相似性、字符间间隔等信息,一方面把单个字符分别提取出来,也包括粘连和断裂字符等特殊情况的处理;另一方面把宽、高相似的字符归为一类从而去除车牌边框以及一些小的噪声。一般采用的算法有:连通域分析、投影分析,字符聚类和模板匹配等。
本次采用投影的方法分割字符,原理如下:用数组存储车牌区域所有像素值,然后在x轴上遍历每一列的像素值并累加,最终所投影的效果将以投影图的形式呈现,投影图的波峰波谷的差距就是每列累加的像素值的差距。

hog特征提取

step1 首先采用Sobel算子提取图像的X和Y梯度方向特征;
step2 采用傅里叶变换计算幅度和相位;
step3 计算图像梯度特征

SVM训练

采用OpenCV自带的SVM分类器对图像的hog特诊进行训练,其中训练的对象是车牌设计到的文字数据集、字母数据集、数字数据集。

车牌识别

将我们分隔出来的各个字符一次传入模型中进行结果预测。

后记:
1、OCR(光学字符识别)的训练也可以采用神经网络的方法进行训练。
2、此车牌识别对于光线干扰、污点干扰不敏感,会出现难以识别的现象。
3、由于车牌的种类现在比较多,有一些符号在整个车牌照中分为上下两层,这种车牌暂时无法识别。
4、对于背景特别杂乱的情况效果可能不是特别理想。
5、算法的效率暂时还没有得到有效的验证。

参考链接:
https://blog.csdn.net/wzh191920/article/details/79589506(完整的用SVM实现车牌的识别)

你可能感兴趣的:(python,车牌识别)