图像车牌识别(车牌定位与分割部分)

图像车牌识别的关键是定位和分割车牌。本文介绍了一种结合HSV颜色模型和形态特征的车牌定位方法。首先,通过HSV颜色空间对图像处理,然后利用车牌的行和列灰度跳变特征确定大致区域。接着,进行二次定位以精确车牌位置。最后,通过阈值分割和连通域分析实现字符分割。该方法在VS2010+opencv环境下实现,提供了一个简易GUI。
摘要由CSDN通过智能技术生成

图像车牌识别(车牌定位与分割部分)

图像车牌识别关键就是要从图像中准确地定位出车牌的位置,并将车牌部分的图像分割出来。
本文设计了一个简易的车牌识别识别系统,现介绍其车牌定位和分割部分。
在设计中我采用了颜色特征和形态特征相结合的方法对车牌进行定位。车牌区域有很丰富的特征信息,如颜色,不同性质的车牌会有不同的颜色,大多数普通的车牌就是字符为白色,背景为蓝色。

<1>HSV颜色模型
HSV是根据颜色的直观特性创建的一种颜色空间,其中H表示色调,S表示饱和度,V表示亮度。

<2>车牌的形态特征
根据HSV模型,对图像进行针对颜色的图像处理及腐蚀去噪之后,图像除少量噪声之外,主要的区域就是车牌区域。车牌区域由于有多个字符,所以每行都存在多个灰度跳变,由这一特征可以确定车牌在两行区域之间,在已确定的两行之间,在采取同样的方法确定区域边界的两列。这样就可以确定车牌的大致区域了,可以修改相关的参数,如跳变的次数等,在大致区域内进行二次定位,本实验在定位操作过程中就进行了两次定位。

<3>车牌分割
找出车牌区域之后,必须将车牌上的字符分割出来,这过程包括两个步骤,第一首先得将车牌从背景中分割出来,第二再将车牌的各个字符分别分割出来。
对于第一步,在对图像进行相关颜色处理之后,已经将字符从背景之中分割出来了,即本实验的分割1操作。本实验的分割2则使用了阈值分割的方法,通过将图像转换为灰度图像,选取适当的阈值,对其进行二值化。
第二步将字符分别分割出来,字符分割通常可以选择连通域的方法,本实验对字符的分割则是根据车牌字符排列位置特征:车牌有七个字符,第一个为汉字,第二个为字母,其余五个为数字和字母,第二个字符和第三个字符之间有一个点(算半个字符)。字符的宽度是一样,所以依据字符的宽度就可以较为准确将单个字符分别分割出来。

<4>利用颜色特征和形态特征对车牌进行定位的具体实现
根据车牌底色为蓝色,字符为白色的特征,首先将图像由BGR色彩空间转换到HSV色彩空间,这里注意由于调用opencv函数()将图像由BGR色彩空间转换为HSV色彩空间时,HSV空间的H取值为0到180(HSV色彩空间规定H取值的一半),S的取值为0到255,V的取值为0到255。转换为HSV空间之后,调用opencv库中的cvSplit函数将HSV色彩空间的H、S、V三个通道的图像分别复制到imgH、imgS、imgV三个单通道图像中。在H取值范围为0到180的情况下蓝色的H取值大概在94到115之间,这样就可以使用opencv库中cvInRangeS函数,将imgH属于蓝色区域部分的像素灰度置1,其余部分置0。同理,对imgS和imgV同样选取适当的取值范围,根据像素值范围进行二值化。最后将三个二值化后的图像按位求与,得到的图像就是同时满足蓝色的H、S、V三个通道的值范围,进行一些去噪操作后,可以得到效果较为好的车牌图像。

处理效果如图:
这里写图片描述

再利用车牌区域的的形态特征对其定位:
这里写图片描述

<5>字符分割
在车牌定位的过程中,得到两种处理后的图像,一是基于颜色处理得到的imgHsvBinnary,另外一个就是基于阈值分割处理得到的imgRgbBinnary。将字符单个分割出来的算法就是简单地根据字符之间的间距和字符个数特点,七个字符加一圆点,以7.5个字符进行计算,在分割出来的车牌的基础上,将车牌的宽度分成7.5份,每份的宽度就是7.5分之一的车牌宽度,通过对车牌区域设定相应位置的ROI,可以将字符比较准确地分割出来。效果还不错,如图:
这里写图片描述

<6>代码的实现
编程环境选择VS2010+opencv,以VS2010作为开发平台,opencv作为图像处理的一个函数库,通过配置VS2010,使opencv成为VS2010开发平台的一个函数库,并基于MFC开发了一个简易的GUI。

(1)车牌定位代码段(车牌定位按钮相应代码,将定位好的车牌用彩色线条在原图中标记出来)

//图像预处理(根据颜色特征)
IplImage *imgH=NULL,*imgS=NULL,*imgV=NULL,*imgHSV=NULL,*imgGray=NULL;
    imgHSV=cvCreateImage(cvGetSize(SrcImage),SrcImage->depth,3);
    imgH=cvCreateImage(cvGetSize(SrcImage),SrcImage->depth,1);
    imgS=cvCreateImage(cvGetSize(SrcImage),SrcImage->depth,1);
    imgV=cvCreateImage(cvGetSize(SrcImage),SrcImage->depth,1);
    cvCvtColor(SrcImage,imgHSV,CV_BGR2HSV); // 转为HSV图像
    cvSplit(imgHSV,imgH,imgS,imgV,NULL);    //将多个通道分别复制到各个单通道图像中
    cvInRangeS(imgH,cvScalar(94,0,0,0),cvScalar(115,0,0,0),imgH);   //选取各个通道的像素值范围,在范围内的则
    cvInRangeS(imgS,cvScalar(90,0,0,0),cvScalar(255,0,0,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值