车牌预处理
车牌的预处理过程直接影响到车牌图像的后处理过程,如车牌的字符分割。车牌预处理也是为了尽可能的消除噪声,减少后期处理带来的不必要的麻烦。
输入的车牌为24位BMP真彩色图像,车牌为黄底黑字,蓝底白字。为了把这些车牌图像一起处理,首先要把车牌灰度化,然后二值化(黑白)。
图4-1原始图像
对采集的车牌图像进行预处理。为了方便起见,这里使用BMP格式的图像。我对采集到的车牌图像进行了剪切,剪切后的图像如下:
由于中国大部分车牌第一位是汉字,第二到第七位是字母或数字,所以车牌图像识别过程可以分为两部分。第一部分是识别汉字的过程,第二部分是识别字母和数字的过程。因为汉字笔画比较多,字母或者数字的处理过程也不一样。所以我这里先处理字母或数字的过程。
除了汉字,第一个字母和第二个数字之间有一个点,所以分字的时候要考虑去掉中间的点。一般来说,车牌图像比较清晰。大型民用车辆的车牌为黄底黑字,小型民用车辆的车牌为蓝底白字。由于字符与背景颜色对比明显,更容易分割出车牌。因为有些车牌是用螺丝固定在上下的,所以在分割车牌的时候,可以通过水平扫描跳转点来去除,从而最终分割车牌,去除这些干扰。
在RGB模型中,如果R=G=B,则颜色代表一种灰色,其中R=G=B的值称为灰度值。所以灰度图像的每个像素只需要一个字节来存储灰度值(也称强度值和亮度值),灰度范围是0-255。通常,有四种方法用于使彩色图像变灰。
1.组件方法。就是提取各个分量的颜色值,也就是RGB3三种颜色。即取一幅彩色图像中三个分量的亮度作为三幅灰度图像的灰度值,可以根据应用需要选择一幅灰度图像。F1 (i,j)=r (i,j) f2 (i,j)=g (i,j) f3 (i,j)=b (i,j)其中fk(i,j)(k=1,2,3)是转换后的灰度图像in (i,j)。
2.最大方法。在彩色图像的三个分量中选择颜色(RGB)的最大值作为灰度图的灰度值。即f(i,j)=max(R(i,j),G(i,j),B(i,j))。
3.平均法。平均彩色图像中三个分量的亮度,得到灰度图像f(i,j)=(R(i,j) G(i,j) B(i,j))/3。
4.加权平均法。根据重要性等指标,对三个分量进行加权,用不同的权重进行平均。因为人眼对绿色最敏感,对蓝色最不敏感,所以根据下面的公式对RGB三个分量进行加权平均就可以得到合理的灰度图像。f(i,j)=0.30R(i,j) 0.59G(i,j) 0.11B(i,j))。
在以上四个处理过程中,在车牌预处理过程中,我选择了加权平均法。效果如下:
图4-2原始图像
图4-3灰度图像
如上图,是图中原始图像加权平均处理后的灰度图像。
关键代码如下:
for(I=0;I身高;我)
{
for(j=0;j宽度* 3;j=3)
{
ired=(unsigned char *)lpDibBits line bytes * I j 2;
I green=(unsigned char *)lpDibBits line bytes * I j 1;
iblue=(unsigned char *)lpDibBits line bytes * I j;
lpdest[i*Width j/3]=(无符号字符)((* ired)* 0.299(* I green)* 0.588(* iblue)* 0.114);//加权平均计算处理
}
}