车牌识别--铆钉的去除

车牌识别中,每一步的效果直接影响整体的识别率,对车牌识别产生干扰的,不仅是车牌的污渍,还有铆钉。

一 、举例说明,铆钉干扰使得车牌识别错误

1、车辆图片

2、通过颜色HSV确认车牌大致位置

3、截取车牌图像

4、二值化后,水平投影,从图片中可以很清楚看到铆钉

   

5、字符分割后的车牌

6、提取分割后的车牌字符

7、错误的识别结果

二、改善方法

这里针对车牌识别的干扰去除方法加以改善。

1、原先博文中车牌识别中去除铆钉的方法,只是用投影的方法。粗略计算铆钉在车牌的上方,白点信息较少,通过水平投影计算每一行的白点数

但是当铆钉嵌入字符中间时,仍然无法去除干扰。

2、这里采用直接出去铆钉的方法,

1)、首先尽量分离字符与铆钉的链接

2)、计算每行的跳变次数,一边铆钉所在行,都是两次,不大于3次,超过7次的,就是字符区域所在行。

这里使用的方法是在跳变次数小于5的行里面,全局搜索白点,然后计算它的宽度和高度,如果宽度大于15个像素,高度大于25个像素(这里车牌归一化后字符大小为20X40),那么他就不是铆钉,否则就当做铆钉删掉。

全局遍历代码:

	for(i = 0; i < img->height/3; i++)
	{
		if(PointChg[i] && PointChg[i] < 5)//每行跳变次数
		{
			for(j = 0; j < img->width; j++)
			{
				if(dst[i * img->width + j] >= 200 && flag1 == 0)//发现白点即遍历
				{
					x1 = x2 = j;
					y1 = y2 = i;
					delRivet(img, dst, &flag, j, i, &x1, &y1, &x2, &y2, 15, 25);
					//display8(*img, dst, 0, 0);
					flag1 = 1;
				}
				if(dst[i * img->width + j] == 0 && flag1 == 1)
				{
					flag1 = 0;
				}
			}
			break;
		}
	}

删除铆钉的函数

img:用了记录车牌的宽度高度信息等

dst:是二值化后的车牌信息,即要遍历查找铆钉的空间

*flag:用来标志是不是铆钉

*x1, *x2 用来计算铆钉宽度  *x2-*x1;

*y1, *y2 同上

xlength,ylength,设置铆钉宽度高度阈值。

static int direction[4][2]={{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int delRivet(Bmp1 *img, byte *dst, int *flag, int x, int y, int *x1, int *y1, int *x2, int *y2, int xlength, int ylength)
{
	int i;
	int tmp;
	int x0, y0;

	tmp = dst[y * img->width + x];

	if((*x2 - *x1 > xlength) || (*y2 - *y1) > ylength)
	{
		*flag = 1;
		return 0;
	}

	dst[y * img->width + x] = 0;

	for(i = 0; i < 4; i++)
	{
		x0 = x + direction[i][0];
		y0 = y + direction[i][1];

		if(x0 > 0 && x0 < img->width && y0 > 0 && y0 < img->height && dst[y0 * img->width + x0] && (*flag == 0))
		{
			if(*x1 > x0)
				*x1 = x0;
			else if(*x2 < x0)
				*x2 = x0;

			if(*y1 > y0)
				*y1 = y0;
			else if(*y2 < y0)
				*y2 = y0;
			delRivet(img, dst, flag, x0, y0, x1, y1, x2, y2, xlength, ylength);
			//display8(*img, dst, 0, 0);
		}

	}

	if(*flag)
	{
			dst[y * img->width + x] = tmp;
	}
	return 0;
}

3)、去除铆钉的车牌

4)、正确分割

5)、正确提取字符

6)、正确识别结果

源码稍后,提供,车牌识别的代码,我将继续优化,提高识别率,尽早能够应用在arm平台上。

车牌识别--铆钉的去除,布布扣,bubuko.com

时间: 2024-10-25 10:28:08

车牌识别--铆钉的去除的相关文章

车牌识别及验证码识别的一般思路

http://www.pin5i.com/showtopic-22246.html 描述一下思路及算法. 全文分两部分,第一部分讲车牌识别及普通验证码这一类识别的普通方法,第二部分讲对类似QQ验证码,Gmail验证码这一类变态验证码的识别方法和思路. 一.车牌/验证码识别的普通方法 车牌.验证码识别的普通方法为: (1)      将图片灰度化与二值化 (2)      去噪,然后切割成一个一个的字符 (3)      提取每一个字符的特征,生成特征矢量或特征矩阵 (4)      分类与学习.

基于opencv的车牌识别系统

前言 学习了很长一段时间了,需要沉淀下,而最好的办法就是做一个东西来应用学习的东西,同时也是一个学习的过程. 概述     OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算

《Mastering Opencv ...读书笔记系列》车牌识别(I)

http://blog.csdn.net/jinshengtao/article/details/17883075/  <Mastering Opencv ...读书笔记系列>车牌识别(I) http://blog.csdn.net/jinshengtao/article/details/17954427   <Mastering Opencv ...读书笔记系列>车牌识别(II) Mastering Opencv ...读书笔记系列>车牌识别(I) 标签: 车牌分割svm西

车牌识别(一)-车牌定位

在对车牌识别过程中,常用的方法有:基于形状.基于色调.基于纹理.基于文字特征等方法.首先基于形状,在车牌中因为车牌为形状规格的矩形,所以目的转化为寻找矩形特征,常常是利用车牌长宽比例特征.占据图像的比例等.基于色调,国内的车牌往往是蓝底白字,可以采用图像的色调或者饱和度特征,进入生成二值图,定位车牌位置.基于纹理特征自己还没有基础到.基于文字特征往往是根据文字轮廓特征进行识别,原理是基于相邻文字轮廓特征.比例进行定位车牌位置. 一.图像二值化 正如前面文章所言,首先进行获取图像二值化特征,本文采

车牌识别--倾斜矫正

在车牌识别系统中, 车牌字符能够正确分割的前提是车牌图像能够水平,以至于水平投影和垂直投影能够正常进行.如果车牌倾斜没有矫正,那么水平投影和垂直投影,甚至铆钉都无法正常处理.所以,当车辆信息中获取车牌的第一步,应该是检查倾斜角度,做倾斜矫正. 倾斜矫正,这里使用的算法: 1.倾斜角度检测: 霍夫变换 关于hough变换,可以参考前面图像处理博文: http://blog.csdn.net/liujia2100/article/details/6989693   直线检测 http://blog.

基于SVM与人工神经网络的车牌识别系统

最近研究了支持向量机(Support Vector Machine,SVM)和人工神经网络(Artifical Neural Network,ANN)等模式识别理论,结合OpenCV的书:<Mastering OpenCV with Practical Computer Vision Projects>,将两种思想运用到车辆的车牌识别算法中.车辆识别结合了多种图像处理技术,如视频监控.图像检测.图像分割和光学字符识别(OCR)等,在道路交通监控中有着重要的作用.以下内容主要包含几个方面: 车牌

EasyPR--中文开源车牌识别系统 开发详解(2)车牌定位

这篇文章是一个系列中的第三篇.前两篇的地址贴下:介绍.详解1.我撰写这系列文章的目的是:1.普及车牌识别中相关的技术与知识点:2.帮助开发者了解EasyPR的实现细节:3.增进沟通. EasyPR的项目地址在这:GitHub.要想运行EasyPR的程序,首先必须配置好openCV,具体可以参照这篇文章. 在前两篇文章中,我们已经初步了解了EasyPR的大概内容,在本篇内容中我们开始深入EasyRP的程序细节.了解EasyPR是如何一步一步实现一个车牌的识别过程的.根据EasyPR的结构,我们把它

移动端车牌识别sdk开发包(可下载)

移动端车牌识别是一项基于OCR识别的应用技术.移动端车牌识别过程主要包含五个步骤,其中包括图像采集.图像预处理.车牌定位.字符分割.字符识别.输出结果等一系列计算机算法运算, 第一步[图像采集]:此步骤通过前端采集视频流数据,再通过硬件或软件对视频流进行进行解帧识别(常见的车牌识别一体机为硬识别,移动端设备往往通过软件识别,为软识别),移动端车牌识别的识别速度为毫秒级别,相较于大家平时用的手机扫码,移动端车牌识别的识别速度更为快速.在视频模式下采集图像时,移动端车牌识别会自动触发,无需外接信号.

技术:移动端车牌识别软件——解析算法

随着科技的进步,目前在: ☆停车管理  ☆移动警务  ☆车辆保险  ☆汽车服务等行业也在积极的应用移动端车牌识别软件进行行业管理,包括针对行业开发一些功能性的应用. 像咱们现在会遇到的最常见的:警务通执法.清收车辆.拖车服务.汽车保险都离不开咱们的汽车名片:车牌识别. 1.首先我们一起了解一下移动端车牌识别的流程 话说到移动端车牌识别技术,该技术是一种基于咱们的OCR识别的技术为核心拓展的应用.OCR移动端车牌识别过程中主要包含五个步骤,其中包括图像采集.图像预处理.车牌定位.字符分割.字符识别