图像处理车牌识别定位.doc
文本预览下载声明
《车牌定位》
专业: 计算机科学与技术
学号: 姓名: 叶超
日期: 2013年5月
车牌定位
一、引言
机动车车牌自动识别是智能交通控制系统中的一个重要组成部分,可广泛用于高速收费站、停车场管理、十字路口违章车辆记录等领域。车牌识别的方法有很多,主要分为几大类,有基于彩色的方法、基于灰度梯度的方法、基于搜索车牌边框的方法、基于边缘检测的方法、基于数学形态学的方法。
二、车牌识别的一般方法
车牌识别一般需要经过三个步骤:车牌定位、车牌的字符分割、车牌的字符识别。通俗来讲就是,第一步找到车牌在图片中在哪一块区域,第二步将找到的区域图片分割成一个个的字符,第三步识别每个字符并得出最终的结果。
本文主要就车牌定位方法做一些研究和说明。
三、车牌定位
车牌定位有多种方法,前文已经讲过。本文主要使用灰度边缘检测的方法来定位车牌。
流程:
(1)打开图片
第一步,打开图片,不用说,直接打开图片就好。本文所配程序为winform程序,直接将图片绑定到picturebox控件上显示。
(2)预处理
预处理的作用是将图片变得有利于处理,比如彩色图像信息量比较大,可以转化为灰度图像;图像中噪点比较多不利于后期处理,可以进行去噪处理。
①灰度化
将彩色图像转化为灰度图像,用到一般简单的彩色转灰度的公式:
gray = (int)(c1.B * 0.114 + c1.G * 0.587 + c1.R * 0.299) ,其中c1是box1.GetPixel(i,j)即为遍历的每个点。然后用双重循环将每个点的RGB颜色重新赋值,c2 = Color.FromArgb(gray, gray, gray); box2.SetPixel(i, j, c2);
②去噪
去噪是为了去除数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响
高斯去噪主要就是用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值通过这个模型来将图像数据进行能量转化,能量低的就排除掉,噪声就是属于低能量部分
③边缘检测
图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性s算子、canny算子、Sobel算子等。此外还有二阶三阶的。这里采用效果较好的Sobel算子。
下面是两个卷积核形成了Sobel边缘算子。
下面是程序的写法:
④二值化
二值图像是指整幅图像内仅有黑、白二值的图像,在它们之间不存在其它灰度层次的变化。
这里采用将像素点的三色相加除以三,得到average,然后计算average的频率,在和255-三色进行比较,将图像二值化。
(3)寻找车牌
经过预处理之后,图像已经变成了经过处理的二值化图像,可以进行下一步工作了。
下面是几幅经过预处理的车牌图像。
①统计跳变点
得到处理过的二值化图像之后,需要逐行扫描,统计每行的跳变点(黑白跳变或白黑跳变),当跳变点数不小于阈值时,将该行暂定为车牌候选区域中的部分,在该行记下一个标志。但是并不是所有超过阈值的都计算在内。扫描完整幅图像后,统计连续有标志的行数,若行数少于某一阈值,则将该区域所有的行舍弃,将符合条件的区域作为候选区域。
这里阈值的取值是关键,取值太小,则不能排除干扰行,取值太大则可能丢弃了车牌所在行。(本人所写代码未经好好优化,代码略长,顾不在word中展示,可进项目查阅)
记下此时红色匹带的初始行start和结束行end。
效果图:
②粗定位,得出结果
得到了车牌所在的各个行,需要进行进一步定位。统计跳变点是通过每行检测,粗定位则通过一个长为红色区域行宽、宽为step的一个小矩形来测定,小矩形从红色条的最左边开始不断向右移动,移动过程中,处于小矩形区域内的跳变点数大于一个阈值的时候,就记下矩形左上角的x坐标,此为startpoint。继续遍历,找到最后一个符合要求的矩形,取矩形右上角x坐标确定endpoint的位置。这样就可以大致定位车牌所在区域的左右两点的x坐标。再结合start和end两条线的y坐标,可以粗定位车牌所在的区域了。再利用两个循环,将定位到的车牌区域以蓝色线条圈出来,显示处理效果。
上文已经说到,程序采用winfrom窗体编程,所以在找到车牌所在区域后,利用AxPictureClip控件对图片进行剪切复制。此时不应该截取处理过程的图像,而应去原图像(未处理)进行截取。
效果图:
(4)完整程序运行截图
显示全部