首页 > 编程知识 正文

基于数字图像处理的车牌识别系统,数字图像处理车牌识别论文

时间:2023-05-05 02:46:02 阅读:124630 作者:71

文章内容:利用MATLAB对图像进行简单处理,包括图像模糊、锐化、直方图均衡; 利用对图像进行边缘检测的MATLAB提取并识别图像中的数字。

目录1对1 MATLAB图像简单处理1.1模糊、锐化、直方图平均化1.1.1.2代码1.2边缘检测1.2.1代码1.2.2运算结果2图像中的数字提取识别- -车牌简单识别2.1

实验环境:MATLAB2020

MALTAB2020安装链接: https://MP.weixin.QQ.com/s/yo9vkjnkb 53 QE glb- wvow

1 MATLAB对图像进行简单处理1.1模糊、锐化、直方图平均1.1.1代码I=im read (e : (桌面)轨道信号和设备)DZYYT1011.jpg figure,imshow(I ),title )原始图像); I1=RGB2gray(I; i1=im resize (i1,0.5 ); figure,imshow(I1 ),title )灰度图像); h=ones (5,5 )/25; I2=im滤波器(i1,h ); figure、imshow(I2 )、title )、模糊处理); j=double(I1; H1=fspecial(laplacian ); i3=过滤器2 (h1,j ); figure,imshow(I3 ),title ) (“锐化”); i4=hist eq (i1,256; figure、imhist(I1 )、title )原图像直方图); figure、imshow(I4 )、title ) )“均衡处理”figure、imhist(I4 )、title )均衡后直方图); 注意:代码第一行的文件目录是我正在使用的图像的位置。 读者需要自己准备图像,更改代码中的目录。

1.1.2运算结果这是进行处理的原始图像。

进行图像的灰度化,将图像的尺寸调整为原来的一半,得到图像。

对图像分别进行平均滤镜模糊、拉普拉斯算子锐化处理的结果如下图所示。

对图像进行直方图的平均化操作,得到的原图像的直方图、平均化后的图像以及直方图如下。

1.2边缘检测1.2.1代码I=im read (e : (桌面)课程)轨道信号和设备(DZYYT1011.jpg ) ); I1=RGB2gray(I; i1=im resize (i1,0.5 ); j=double(I1; H=[0 1 0; 1 -4 1; 000 ); j=conV2(j,h,' same ' ); j=双精度(i1 )-J; subplot(1、2、1 ); imshow(I1 )、title、灰度图像); subplot(1、2、2 ); imshow(j )、title ) ) laplace运算符边缘检测); G1=[-1 -2 -1; 0 0 0; 111 ); G2=G1 '; Iedge=I1; i2x=过滤器2 (G1,Iedge ); i2y=过滤器2 (G2,Iedge ); I2=ABS(I2xI2y ); 大方的金毛=mat2gray(I2; igure,imshow(mat2gray(ABS ) I2x ) )、title (水平方向边)、imshow(mat2gray(ABS ) I2y ) )、title (垂直方向边figure,) I2_edge=大方的金毛; fori=1: m forj=1: nifi2_ edge (I,j ) 0.15I2_edge(i ) I,j )=1; ELSEifI2_edge(I,j ) 0.06I2_edge(i ) I,j )=0.5; endend end figure,imshow(I2_edge ),title )“边缘增强图像”1.2.2运算结果可以获得通过Laplace运算符的处理获得的边缘。

使用Sobel运算符获得的图像的水平和垂直边缘。 得到表示图像综合边缘信息的两个方向的合成图像。

从图中可以看到,图像在Sobel操作符中进行边缘增强时,整个图像会变暗。 为了更清晰地表现图像的轮廓信息,对合成边缘中的边缘像素进行了增强处理,结果可以得到最后所示的边缘增强的结果。 这用4个灰度表示。

2抽取图像中的数字进行识别—车牌可方便识别数字标识部位的分割,根据像素位置确定图像中的数字。

2.1图像中的数字对应2.1.1代码I=im read (e : (桌面)路线)轨道信号和设备(DZYYT1011.jpg ) ); I1=RGB2gray(I; i1=im resize (i1,1 ); figur

e,imshow(I1),title('灰度图像');I2=im2bw(I1,graythresh(I1));figure,imshow(I2),title('二值图像');I3=I2(2294:2330,1859:1964);I3=imresize(I3,10);figure,imshow(I3),title('数字部分特征提取');A=I3;ED_type='disk';se=strel(ED_type,12);I4=imclose(A,se);figure,imshow(I4),title('闭运算的结果');figure;J1=I4(4:320,29:214);J1=imresize(J1,[312,179]);A=J1;ED_type='disk';se=strel(ED_type,8);A=imdilate(A,se);subplot(1,5,1),imshow(A),title('第1个数字');J2=I4(19:330,260:410);J2=imresize(J2,[312,179]);A=J2;ED_type='disk';se=strel(ED_type,8);A=imdilate(A,se);subplot(1,5,2),imshow(A),title('第2个数字');J3=I4(22:335,450:635);J3=imresize(J3,[312,179]);A=J3;ED_type='disk';se=strel(ED_type,8);A=imdilate(A,se);subplot(1,5,3),imshow(A),title('第3个数字');J4=I4(38:347,683:860);J4=imresize(J4,[312,179]);A=J4;ED_type='disk';se=strel(ED_type,8);A=imdilate(A,se);subplot(1,5,4),imshow(A),title('第4个数字');J5=I4(55:363,910:1050);J5=imresize(J5,[312,179]);A=J5;ED_type='disk';se=strel(ED_type,8);A=imdilate(A,se);subplot(1,5,5),imshow(A),title('第5个数字');

注意:代码中的数字部分特征提取及分别对每个数字的提取时,选取的像素范围需要根据自己的图片中数字的像素位置进行修改。
比如代码中第7行的" I3=I2(2294:2330,1859:1964);"。
指数字部分 I3 在 I2 内的位置范围,其中的四个数据是由两组像素坐标组成,读者可以自己分析四个数据分别对应哪种坐标。

小技巧:在MATLAB生成的图像中可以直接查看某点的像素坐标
点击“数据提示”标志,在图像中点击即可查看该点的坐标。如下图:

2.1.2 运算结果

通过计算,得到图像的灰度图和二值化图像如下图所示:

对具有数字标示的部位进行分割的结果如下图:

对数字部分区域进行闭运算得到的结果如下图:

将每个字符分割出来,用二值化表示,对每个数字图像进行膨胀操作,以将修正数字区域的边界毛刺并画出分割的结果得到5个数字的图像如下图:

2.2 对图像中的数字识别

通过对每个提取的数字与模版进行相关运算,得到它们之间的相关系数,然后对数字进行判断识别。

实现不同字符的识别
提前准备好 0-9 十个数字的标准数字模板,寻找与拍摄图片中的数字字体相同的标准模板。
小技巧:可以在 Word 里寻找相似的字体,将数字打出来再放大截屏获取。

比如下面这样的模板:

2.2.1 代码 B=imread('E:Desktop课程轨道信号与设备.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K0=B;B=imread('E:Desktop课程轨道信号与设备1.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K1=B;B=imread(' E:Desktop课程轨道信号与设备2.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K2=B;B=imread(' E:Desktop课程轨道信号与设备3.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K3=B;B=imread(' E:Desktop课程轨道信号与设备4.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K4=B;B=imread(' E:Desktop课程轨道信号与设备5.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K5=B;B=imread(' E:Desktop课程轨道信号与设备6.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K6=B;B=imread(' E:Desktop课程轨道信号与设备7.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K7=B;B=imread(' E:Desktop课程轨道信号与设备8.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K8=B;B=imread(' E:Desktop课程轨道信号与设备9.jpg');B=rgb2gray(B);B=imresize(im2bw(B,graythresh(B)),[312,179]);K9=B; 2.2.2 识别结果

通过与模板逐个进行相关运算,比较出相关系数最大的字符,即可得到识别结果。

进行相关运算的代码: k=zeros(1,10);k(1)=corr2(J1,K0);k(2)=corr2(J1,K1);k(3)=corr2(J1,K2);k(4)=corr2(J1,K3);k(5)=corr2(J1,K4);k(6)=corr2(J1,K5);k(7)=corr2(J1,K6);k(8)=corr2(J1,K7);k(9)=corr2(J1,K8);k(10)=corr2(J1,K9);m=max(k);n=find(k==m)-1

运算结果:

相关系数结果比较:

可以看出,对第一个数字 J1 与十个模版进行逐一进行相关运算,得到他们之间的相关系数数组 K,求出其中相关系数最大的数对应的 K 序号,就可以识别出图片中此数字是几。比如上述程序识别出第一个数字是 6。

用同样的方法可以得到:

k=zeros(1,10);k(1)=corr2(J2,K0);k(2)=corr2(J2,K1);k(3)=corr2(J2,K2);k(4)=corr2(J2,K3);k(5)=corr2(J2,K4);k(6)=corr2(J2,K5);k(7)=corr2(J2,K6);k(8)=corr2(J2,K7);k(9)=corr2(J2,K8);k(10)=corr2(J2,K9);m=max(k);n=find(k==m)-1

运算结果:
相关系数结果比较:

所以第二个数字为 1。

同理,我们可以识别出其他几个数字分别为:3、0、1。
所以目标图像中的五个数字为:61301。 3 总结

对于图片中的其他字符,比如英文字母、汉字、或者其他符号的识别,其实与上面的数字提取识别大同小异。原理都是类似的,通过像素位置定位提取,再与模板进行相似比较。这样可能需要的模板更多,只适用于工作量比较小的情况,所以对与一些大工程识别,还需要更深入更复杂的解决方法,读者可以关注这方面的现况与发展,继续学习。
文章内容如有错误或疑问,敬请读者斧正。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。