信息处理综合实践车牌识别.docx

上传人:b****6 文档编号:6674292 上传时间:2023-01-08 格式:DOCX 页数:56 大小:1.22MB
下载 相关 举报
信息处理综合实践车牌识别.docx_第1页
第1页 / 共56页
信息处理综合实践车牌识别.docx_第2页
第2页 / 共56页
信息处理综合实践车牌识别.docx_第3页
第3页 / 共56页
信息处理综合实践车牌识别.docx_第4页
第4页 / 共56页
信息处理综合实践车牌识别.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

信息处理综合实践车牌识别.docx

《信息处理综合实践车牌识别.docx》由会员分享,可在线阅读,更多相关《信息处理综合实践车牌识别.docx(56页珍藏版)》请在冰豆网上搜索。

信息处理综合实践车牌识别.docx

信息处理综合实践车牌识别

1实践内容

信息处理技术主要分为图像处理技术和语音处理技术两大部分。

图像处理技术包括图像的采集和数字化,图像数据处理变换,图像滤波增强,图像几何形态变换,图像分割,图像分析及识别等相关知识。

语音处理技术包括语音的采集及数字化,时域分析,变换域分析,线性预测分析,矢量量化,语音编码,语音识别,语音合成和语音增强等相关知识。

在大学课程中,我们涉及到的关于信息处理技术的相关课程有信息论基础,多媒体计算机技术,数字图像处理,计算机图形学,图像通信,语音信号处理。

以及各种信息处理的硬件设施和相关的编程语言知识。

根据信息处理综合实践的方向,以及大三下学期本科生已经学习过的课程,我们将以车牌识别的过程为例,综合运用图像处理知识和技术,使用C#语言实现车牌号码的自动识别。

1.1数字图像处理技术的内容

数字图像处理处理学科所涉及的知识非常广泛,具体的方法种类繁多,应用也极为普遍,但从学科研究内容上可以分为以下几个方面。

(1)图像的采集及数字化

利用数码相机或摄像头等相关硬件对图像信号进行采集再通过A/D转换及硬软件件编码来获取图像。

其目的是将模拟形式的图像通过数字化设备变为数字计算机可用的离散的图像数据。

(2)图像数据处理变换

为了达到某种目的而对图像使用一种数学技巧,经过变换后的图像更为方便、容易地处理和操作图像数据。

(3)图像滤波增强

图像增强的主要目标是改善图像的质量。

采用某种特殊的技术来突出图像中的某些信息,削弱或消除某些无关信息,从而有目的地强调图像的整体或局部特征。

常常用来改善人对图像的视觉效果,让观察者能看到更加直接、清晰、适于分析的信息。

直方图修正、灰度变换、强化图像轮廓等都是常用的手段。

(4)图像几何形态变换

图像的几何变换包括了图像的形状变换和图像的位置变换。

图像的形状变换是指图像的放大、缩小与错切。

图像的位置变换是指图像的平移、镜像与旋转。

(5)图像分割

在图像研究和应用中,人们往往仅对图像的某些部分感兴趣。

它们一般对应图像中待定的、具有独特性质的区域。

图像分割就是把图像分割成各具特性的区域并提取出感兴趣的目标。

(6)图像分析及识别

图像分析也可以成为图像理解,主要研究从图像中提取有用的数据或信息,生成非图像的描述或表示。

图像分析的内容分为特征提取、图像分割、符号描述、纹理分析、运动图像分析和图像的检测与配准,字符识别匹配。

1.2参考书籍

理论部分可以直接参考《图像处理》教材。

部分图像处理技术的C#实现方法可以参考《网络高级编程》的教材,如打开彩色图像的方法、灰度直方图均衡化等等。

其他相关可以借鉴的书籍:

《C#数字图像处理算法典型实例》等。

2图像处理综合实践的方案

2.1图像处理的主要工作

整个实验系统就是一个完整的的车辆牌照识别系统,包括图像采集、数据传输与更新等步骤,其中的车牌图像处理中的每一个步骤都是比较复杂的,尤其是车牌定位与分割、字符切分与识别的复杂性更大。

因为采集到的图像受到环境、灯光以及车牌本身污损等情况的影响,造成采集到的图像质量各不相同,有些图像质量很差,给图像处理造成一定的困难。

但是整个车辆牌照识过程中的每个步骤正是运用了《图像处理》课程中的各个知识点,因此学习这么一个图像处理流程,可以综合运用图像处理的知识。

车辆牌照识别流程包括以下5个模块,如图1.1所示。

图1.1车牌流程示意图

由于条件和时间的有限,本实验只能对车牌识别系统中数字识别的软件部分进行一定的研究,即车辆牌证图像处理的数字处理软件部分。

数字处理部分是车牌图像的采集,灰度化,滤波增强,车牌定位,提取,二值化,矫正,分割,并进行图像识别来获取车牌上的字符。

其流程如图1.2所示。

图1.2车牌识别软件流程示意图

2.2图像的存储格式结构

用计算机处理数字图像,必然要首先考虑图像的存储格式。

目前比较常用的图像格式由*.BMP、*.JPG、*.GIF等。

我们主要采用的是*.BMP格式。

BMP格式图像文件的结构在《图像处理》课程及其实验中已经学习过了,主要分为:

文件头、调色板数据和图像数据三部分,其中文件头的长度固定为54个字节,文件头中包含两种数据结构:

BITMAPFILE和BITMAPINFO,前者表示文件的类型、大小和打印格式等;后者包含了文件的尺寸信息。

它们的数据结构定义如下,

TypedefstructtagBITMAPFILEHEADER

{unsignedintbfType;

unsignedlongbfSize;

unsignedintReserved1;

unsignedintReserved2;

unsignedintlongbfOffset;

}

bitmapfileheader;

TypedefstructtagBITMAPINFOHEADER

{unsignedlongbiSize;

unsignedlongbiWidth;

unsignedlongbiHeight;

unsignedintbiPlanes;

unsignedintbiBitcount;

unsignedlongbiCompression;

unsignedlongbiSizeimage;

unsignedlongbiXpelsperMeter;

unsignedlongbiYpelsperMeter;

unsignedlongbiClrUsed;

unsignedlongbiClrImportant;

}

bitmapinfoheader;

54个字节的头定义后是调色板数据和图像数据,对于单色图(biBitcount=0)调色板数据有二项,各占4个字节,则图像数据从第62个字节开始;对于16色,图像(biBitcount=4),调色板数据有16项,各占4个字节,则图像数据从第118个字节开始;对于256色图像(biBitcount=8),调色板数据有256项,各占4个字节,则图像数据从第1078个字节开始;对24位的真色彩BMP图像文件,不需调色板,其文件头的长度固定为54个字节,即,图像数据从第54个字节以后开始,依次为蓝、绿、红三原色的各占一个字节的数据。

因此,在读取一幅图像的数据时,可以相隔依次读取三个分别表示蓝色、绿色和红色的数据,以数组的形式将图像数据流读进内存。

实际的输入图像的大小不同,理论上对于车牌的大小以及颜色都没有什么严格的要求,但是图像太小的话,影响图像的识别效果,图像太大的话,导致图像处理运算时间加长,影响图像的处理时间。

因此,为了适应不同大小的图像,需要对输入的图像进行大小归一化。

用摄像机或者数码相机采集到的车辆图像都是24位真彩色图像,真彩色图像比较接近现实生活中的人眼观察的真实颜色。

对于真彩色图想,图像数据包括实际的R、G、B值,其中每个R、G、B在实际的处理中占有一个字节,这样一个真彩色图想的一个像素将占有3个字节,而对于256灰度位图,所有的图像的软件部分将采用256灰度位图图像进行处理。

3信息处理技术及实践

3.1图像基础处理技术概述

数字图像处理算法包括图像的采集及数字化,彩色图到灰度图的变换,灰度均衡化,去噪,滤波,增强,边缘检测等。

要正确识别车牌上的数字,首先取决于车辆牌照能否正确从车辆图像中提取,而车辆牌照能否正确从车辆图像中提取则是自动识别的前提,所以图像提取需要极高的正确性。

如图3.1所示显示了具体一辆车辆图片的车牌基础处理过程。

其中用到了大量的数字图像处理算法,包括图像的彩色图到灰度图的变换,灰度拉伸,均衡,去噪,滤波,轮廓检测等基本技术。

图3.1车牌基本处理技术流程

车牌定位的基本处理只要是对采集的车辆图像进行灰度化和去除噪声的处理,以使车辆图像尤其是车牌区域质量改善,利用Sobel算子保留和增强原有车牌中纹理和颜色信息,去除可能影响车牌区域纹理和颜色信息的噪声,为车牌定位提供方便。

3.2车牌图像的采集及数字化

车牌图像通常是通过摄像头来截取的。

为了便于操作我们可以调用USB摄像头来演示实现。

主要调用avicap32.dll、vfw32.dll、vicap32.dll三个动态链接库来实现对摄像头的操作。

这里涉及到了图像的采集和数字化,在Windows系统中,图像的数字化是硬件和系统联合进行编码压缩的。

设置图像句柄基本参数为1342177280,0,0,400(取景宽度),300(取景高度)。

开始拍照:

调用系统的avicap32.dll、vfw32.dll、vicap32.dll组件(在windows系统目录的system32文件夹内。

若摄像头启动成功接,则给3个dll发送显示图像句柄信息,反之不启动窗口。

保存图像时,从当时的硬件DataObject数据中获取数据并保存为image1。

首先在程序开始处使用两个命名空间:

usingSystem.Runtime.InteropServices;

usingSystem.Drawing.Imaging;

然后在程序中加入三个动态链接库。

由于三个动态链接库都是非托管类型的,不能直接在解决方案中引用,而是要直接在程序中加入以下代码:

[DllImport("avicap32.dll",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]

publicstaticexternintcapCreateCaptureWindowA([MarshalAs(UnmanagedType.VBByRefStr)]refstringlpszWindowName,intdwStyle,intx,inty,intnWidth,shortnHeight,inthWndParent,intnID);

[DllImport("avicap32.dll",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]

publicstaticexternboolcapGetDriverDescriptionA(shortwDriver,[MarshalAs(UnmanagedType.VBByRefStr)]refstringlpszName,intcbName,[MarshalAs(UnmanagedType.VBByRefStr)]refstringlpszVer,intcbVer);

[DllImport("user32",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]

publicstaticexternboolDestroyWindow(inthndw);

[DllImport("user32",EntryPoint="SendMessageA",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]

publicstaticexternintSendMessage(inthwnd,intwMsg,intwParam,[MarshalAs(UnmanagedType.AsAny)]objectlParam);

[DllImport("user32",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]

publicstaticexternintSetWindowPos(inthwnd,inthWndInsertAfter,intx,inty,intcx,intcy,intwFlags);

[DllImport("vfw32.dll")]

publicstaticexternstringcapVideoStreamCallback(inthwnd,videohdr_tagvideohdr_tag);

[DllImport("vicap32.dll",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]

publicstaticexternboolcapSetCallbackOnFrame(inthwnd,strings);

具体使用这三个动态链接库的方法,请自己参考附带程序。

启用USB摄像头关键代码:

//设置图像句柄

hHwnd=Form2.capCreateCaptureWindowA(refrefDevice,1342177280,0,0,400,300,this.panel1.Handle.ToInt32(),0);

if(Form2.SendMessage(hHwnd,0x40a,intDevice,0)>0)//启用摄像头成功

{//向3个dll发送图像句柄数据

Form2.SendMessage(this.hHwnd,0x435,-1,0);

Form2.SendMessage(this.hHwnd,0x434,0x42,0);

Form2.SendMessage(this.hHwnd,0x432,-1,0);

Form2.SetWindowPos(this.hHwnd,1,0,0,intWidth,intHeight,6);

}

else

{//未启用摄像头成功,摧毁图像句柄数据

Form2.DestroyWindow(this.hHwnd);

}

保存图像关键代码:

//向dll发送信息,获取图像句柄数据,保存为image1

Form2.SendMessage(this.hHwnd,0x41e,0,0);

IDataObjectobj1=Clipboard.GetDataObject();

if(obj1.GetDataPresent(typeof(Bitmap)))

{

Imageimage1=(Image)obj1.GetData(typeof(Bitmap));

//this.panel_Vedio.Image=image1;

为便于演示以USB摄像头拍取笔记本电脑为例,如图3.2所示。

图3.2USB摄像头拍取笔记本电脑

3.3彩色图像到灰度图像的变换

打开彩色图像的方法在《网络高级编程》的教材中已经用过,请自行参考教材。

灰度图是指只包含亮度信息,不包含色彩信息的图像,例如平时看到的亮度由暗到明连续变化的黑白照片。

要表示灰度图,就需要把亮度值量化,通常分成0-255共256个级别,0表示最暗(全黑),255表示最亮(全白)。

由于256级灰度比较简单,若是彩色图像,其颜色种类较多,不利于图像处理,因此一般都是将彩色图像转换为灰度图进行处理。

由彩色转换为灰度的过程叫做灰度化处理。

灰度图像就是只有强度信息,而没有颜色信息的图像,存储灰度图像只需要一个数据矩阵,矩阵的每个元素表示对应位置的像素的灰度值。

彩色图像的像素色为RGB(R,G,B),灰度图像的像素色为RGB(r,r,r),RGB可由彩色图像的颜色分解获得.而R,G,B的取值范围是0-255,所以灰度的级别只有256级。

灰度化的处理方法主要有如下三种:

(1)最大值法:

使R,G,B的值等于三值中最大的一个,即

R=G=B=max(R,G,B)(3.1)

(2)平均值法:

使R,G,B的值值等于三值和的平均值,即

R=G=B=(R+G+B)/3(3.2)

(3)加权平均值法:

根据重要性或其它指标给R,G,B赋予不同的权值,并使R,G,B等于它们的值的加权和平均,即

R=G=B=(WrR+WrG+WrB)/3(3.3)

其中WrWc,Wa,分别为R,G,B的权值。

由于人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,当Wr=0.30,Wa=0.59,Wc=0.11时,能得到最合理的灰度图像。

这里我们采用的是加权平均值法,在程序里面我们取Wr=0.299,Wa=0.587,Wc=0.114来更新调色板信息。

即抓拍到的车辆图像均为24位真彩色图像,可以根据下述灰度值和RGB颜色对应关系转换成灰度图:

灰度值TT==0.299R+0.587G+0.114B(3.4)

算法实现过程简述:

载入图像数据后,对图像数据逐点按(3.4)计算灰度值,并清除原来的按RGB表示的图像数据。

实验效果:

24位真彩色车辆图像以及它的灰度图如图3.3所示。

(原图)

(灰度图)

图3.3灰度化效果对比

灰度化关键代码:

blue=p[0];

green=p[1];

red=p[2];

tt=p[0]=p[1]=p[2]=(byte)(.299*red+.587*green+.114*blue);

rr[red]++;

gg[green]++;

bb[blue]++;

gray[tt]++;//统计灰度值为tt的象素点数目

p+=3;

3.4灰度直方图均衡化

直方图表示数字图像中每一个灰度与其出现频度间的统计关系,直方图能够给出该幅图像的概貌性特征描述,例如图像的灰度范围、每个灰度级的频度和灰度的分布、整幅图像的平均明暗和对比度等。

采用灰度直方图均衡化可以使图像的灰度间距拉开或者使灰度分布均匀,从而增大了反差,在车辆图像中可以使车牌区域细节清晰,达到图像增强的目的。

的灰度范围为

将直方图正规化为

(3.5)

其中L表示为图像灰度的范围。

则灰度直方图表示为:

(3.6)

其中n为一幅图像总像素数目,

表示灰度为

的像素数目。

灰度映射函数为

,直方图均衡化时

而由概率论的知识可得:

(3.7)

(3.8)

在数字图像处理中,直方图均衡化的离散公式为:

(3.9)

算法实现过程:

从灰度值为0的渐进统计,累加灰度级频度数,频率乘以灰度总级数得出该灰度变换后的灰度级。

(灰度图)

(灰度直方图均衡化图)

图3.4灰度直方图均衡效果对比

图3.4是灰度直方图均衡化处理前后的效果对比图,处理前灰度分布比较均匀,反映在图像上面则是颜色变化平缓,经过直方图均衡化后图像对比度增强,可以看到车牌区域比较清晰,整幅图像明暗对比增强,视觉效果变好了。

均衡化关键代码:

SumGray[0]=gray[0];//灰度均衡化

for(inti=1;i<256;++i)//灰度级频度数累加

SumGray[i]=SumGray[i-1]+gray[i];

for(inti=0;i<256;++i)//计算调整灰度值,频率乘以灰度总级数得出该灰度变换后的灰度级

SumGray[i]=(int)(SumGray[i]*255/count);

for(inti=0;i<256;i++)

{

gray[i]=0;

}

for(inty=0;y

{

for(intx=0;x

{

tt=p[0]=p[1]=p[2]=(byte)(SumGray[p[0]]);

gray[tt]++;

p+=3;

}

}

3.5去噪滤波

为了改善图像质量,从图像中提取有效信息,必须对图像进行去噪预处理。

根据噪声频谱分布的规律和统计特征以及图像的特点,出现了多种多样的去噪方法。

经典的去噪方法有:

空域合成法,频域合成法和最优合成法等,与之适应的出现了许多应用方法,如均值滤波器,中值滤波器,低通滤波器,维纳滤波器,最小失真法等。

这些方法的广泛应用,促进数字信号处理的极大发展,显著提高了图像质量。

一幅原始图像在获取和传输过程中会受到各种噪声的干扰,使图像质量下降,对分析图像不利。

反映到图像画面上,主要有两种典型的噪声。

一种是幅值基本相同,但出现的位置随机的椒盐噪声,另一种则每一点都存在,但幅值随机分布的随机噪声。

为了抑制噪声、改善图像质量,要对图像进行平滑处理。

图像平滑处理的方法多种多样,有邻域平均、中值滤波,高斯滤波、灰度最小方差的均值滤波等。

3.5.1高斯平滑滤波的原理

高斯滤波是根据高斯函数的形状来选择权值的线性平滑滤波器。

高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。

一维零均值高斯函数为:

其中,高斯分布参数决定了高斯滤波器的宽度。

对图像来说,常用二维零均值离散高斯函数作平滑滤波器,函数表达式如下:

高斯函数具有5个重要性质:

(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的。

一般来说一幅图像的边缘方向是不知道的。

因此,在滤波之前是无法确定一个方向比另一个方向上要更多的平滑的。

旋转对称性意味着高斯滤波器在后续的图像处理中不会偏向任一方向。

(2)高斯函数是单值函数。

这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点的权值是随着该点与中心点距离单调递减的。

这一性质是很重要的,因为边缘是一种图像局部特征。

如果平滑运算对离算子中心很远的像素点仍然有很大的作用,则平滑运算会使图像失真。

(3)高斯函数的傅立叶变换频谱是单瓣的。

这一性质是高斯函数傅立叶变换等于高斯函数本身这一事实的直接推论。

图像常被不希望的高频信号所污染,而所希望的图像特征,既含有低频分量,又含有高频分量。

高斯函数傅立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需要的信号。

(4)高斯滤波器的宽度(决定着平滑程度)是由参数σ表证的,而且σ和平滑程度的关系是非常简单的。

σ越大,高斯滤波器的频带就越宽,平滑程度就越好。

通过调节平滑程度参数σ,可在图像特征分量模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷。

(5)由于高斯函数的可分离性,大高斯滤波器可以有效实现。

通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。

因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。

这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。

高斯函数的可分离性很容易表示:

   (3.10)

(3.11)

(3.12)

在图像滤波中,常用的方法是线性滤波技术和非线性滤波技术,线性滤波以其完美的理论基础,数学处理简单、易于采用和硬件实现等优点,一直在图像滤波领域中占有重要地位。

对公式(3.9),(3.10),(3.11)进行简化推导的高斯模板计算公式:

(3.13)

算法实现过程:

本程序采用高斯模板法,使用5*5模版(均方差为2)与图像分成小块的矩阵相乘(像素值变大),然后除以合适常数恢复合适范围(0-255)。

对不同情况进行加权(增加小矩阵内所有点的总合和除数进行调整,最后小矩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1