智能网联汽车概论--课程设计2--车牌号码识别.docx

上传人:暗伤 文档编号:96871675 上传时间:2024-03-28 格式:DOCX 页数:15 大小:1.74MB
返回 下载 相关 举报
智能网联汽车概论--课程设计2--车牌号码识别.docx_第1页
第1页 / 共15页
智能网联汽车概论--课程设计2--车牌号码识别.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《智能网联汽车概论--课程设计2--车牌号码识别.docx》由会员分享,可在线阅读,更多相关《智能网联汽车概论--课程设计2--车牌号码识别.docx(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、课程设计车牌号码识别利用MATLAB对车牌号码进行识别。车牌号码识别步骤主要包括原始图像采集、车牌切割、字符切割和字符识别,其中车牌切割又包括灰度变换、边缘检测、图像腐蚀、图像膨胀、删除小面积对象、车牌定位切割;字符切割又包括定位切割后的车牌图像灰度处理、直方图均衡化、图像二值化处理、中值滤波、分割字符。本例车牌号码识别具体步骤如下。(1)读取车牌原始图像。(2)原始图像灰度变换。(3)灰度图像边缘检测。(4)图像腐蚀。(5)图像膨胀。(6)删除小面积对象。(7)车牌定位切割。(8)定位切割后的车牌图像灰度处理。(9)灰度图像直方图均衡化。(10)图像二值化处理。(11)图像中值滤波。(12)

2、字符分割。(13)字符显示和创建。(14)车牌号码识别结果显示。利用MATLAB编写子程序函数my_imsplit,并储存于my_imsplit.m文件中。12345678910111213141516171819function split_img = my_imsplit( img )m, n = size(img);top = 1;bottom = m;left = 1;right = n;while sum(img(top, :) = 0 & top = 1 bottom = bottom -1;endwhile sum(img(:, left) = 0 & left = 1 righ

3、t = right - 1;endwidth = right - left;height = bottom - top;split_img = imcrop(img, left top width height);end%定义图像分割函数%获取图像大小%参数赋值%获取图像顶部位置%获取图像顶部位置%获取图像顶部位置%获取图像底部位置%获取图像底部位置%获取图像底部位置%获取图像左边界%获取图像左边界%获取图像左边界%获取图像右边界%获取图像右边界%获取图像右边界%获取图像宽度%获取图像高度%切割图像结束利用MATLAB编写子程序函数getword,并储存于getword.m文件中。123456

4、78910111213141516171819202122232425262728293031function word, result =getword( img ) word=;flag=0; y1=8; y2=0.5; while fla =0 m, n=size(img); width=0; while sum(img(:, width+1)=0 & width=n-2 width=width + 1; end temp= my_imsplit(imcrop(img, 1,1,width,m); m1, n1=size(temp); if width y2 img(:, 1, widt

5、h)=0; if sum(sum(img)=0 img= y_imsplit(img); else word=; flag=1; end else word=my_imsplit(imcrop(img, 1, 1, width, m); img(:,1: width)=0; if sum(sum(img)=0 img=my_imsplit(img); flag=1; else img=; end end end result=img;end%定义字符分割函数%参数赋值%判断flag是否等于0%获取字符大小%设置符号宽度为0%判断字符宽度%字符宽度加1%判断结束%调用字符在切割函数%获取字符大小

6、%判断字符宽度%切割字符宽度%判断字符宽度是否不等于0%切割最小字符%否则%赋值%赋值%结束%否则%调取字符再切割函数%切割字符%判断字符宽度是否等于0%切割最小字符%赋值%否则%赋值%结束%结束%结束%赋值结束利用MATLAB编写车牌号码识别主程序。123456filename, filepath=uigetfile(.jpg, 输入要识别的图像);file=strcat(filepath, filename);img=imread(file);figure(1)imshow(img)title(原始图像)%输入原始图像%横向连接字符串%读取图像文件%设置图形窗口1%显示原始图像%原始图形标

7、注读取车牌原始图像7891011121314img1=rgb2gray(img);figure(2)subplot(1, 2, 1)imshow(img1)title(灰度图像)subplot(1, 2, 2)imhist(img1)title(灰度图像直方图)%img图像转为灰度图像%设置图形窗口2%设置图形位置%显示灰度图像%灰度图像标注%设置图形位置%提取img1图像直方图信息%灰度图像直方图标注原始图像灰度变换15161718img4=edge(img1, roberts, 0.15, both);figure(3)imshow(img4)title(边缘检测后的图像)% img1图像

8、边缘检测%设置图形窗口3%显示边缘检测后的图像%边缘检测后的图像标注灰度图像边缘检测1920212223se=1;1;1;img5=imerode(img4, se);figure(4)imshow(img5)title(腐蚀后的图像)%设置se初值%img4图像腐蚀%设置图形窗口4%显示腐蚀后的图像%腐蚀后的图像标注图像腐蚀2425262728se=strel(rectangle, 30, 30);img6=imclose(img5, se);figure(5)imshow(img6)title(膨胀后的图像)%计算se%img5图像膨胀%设置图形窗口5%显示膨胀后的图像%膨胀后的图像标注图

9、像膨胀29303132img7=bwareaopen(img6, 2200);figure(6)imshow(img7)title(删除小面积后的图像)%删除小于2200的图像%设置图形窗口6%显示删除小面积后的图形%删除小面积后的图形标注删除小面积对象333435363738394041424344454647484950515253545556575859606162636465666768697071y, x, z=size(img7);img8=double(img7);blue_Y=zeros(y, 1);for i=1:y for j=1:x if(img8(i, j)=1) bl

10、ue_Y(i, 1) = blue_Y(i, 1) + 1; end endendimg_Y1=1;while (blue_Y(img_Y1) 5) & (img_Y1 y) img_Y1=img_Y1 + 1;endimg_Y2=y;while (blue_Y(img_Y2) img_Y1) img_Y2=img_Y2 - 1;endblue_X=zeros(1, x);for j=1:x for i=1:y if(img8(i, j)=1) blue_X(1, j)=blue_X(1, j) + 1; end endendimg_X1=1;while (blue_X(1, img_X1)

11、5) & (img_X1 x) img_X1=img_X1 + 1;endimg_X2=x;while (blue_X(1, img_X2) img_X1) img_X2 = img_X2 - 1;endimg9=img(img_Y1:img_Y2, img_X1:img_X2, :);figure(7)imshow(img9)title(定位切割后的车牌图像)imwrite(img9, 车牌图像.jpg)%获取img7图像大小%img7转成双精度浮点型%Y方向生成全零矩阵%变量i循环开始%变量j循环开始%判断车牌位置区域%像素点统计%判断结束%变量j循环结束%变量i循环结束%设Y坐标最小值为

12、1%判断Y方向值%增加坐标值%判断结束%设Y坐标最大值为y%判断Y方向值%减小坐标值%判断结束%X方向生成全零矩阵%变量j循环开始%变量i循环开始%判断车牌位置区域%像素点统计%判断结束%变量i循环结束%变量j循环结束%设X坐标最小值为1%判断X方向值%增加坐标值%判断结束%设X坐标最大值为y%判断X方向值%减小坐标值%判断结束%确定X、Y最小值和最大值%设置图形窗口7%显示定位后的车牌图像%定位后的车牌图像标注%保存定位切割后的车牌图像车牌定位切割727374757677787980plate_img=imread(车牌图像.jpg);plate_img1=rgb2gray(plate_im

13、g); figure(8)subplot(1, 2, 1)imshow(plate_img1)title(灰度图像)subplot(1, 2, 2)imhist(plate_img1)title(灰度图像直方图)%读取定位切割后的车牌图像%转换成灰度图像%设置图形窗口8%设置图形位置%显示灰度图像%灰度图像标注%设置图形位置%提取灰度图像直方图信息%灰度图像直方图标注定位切割后的车牌图像灰度处理8182838485868788plate_img2=histeq(plate_img1);figure(9)subplot(1,2,1)imshow(plate_img2)title(直方图均衡化的图

14、像)subplot(1,2,2)imhist(plate_img2)title(均衡化图像直方图)%灰度图像直方图均衡化%设置图形窗口9%设置图形位置%显示直方图均衡化的图像%直方图均衡化的图像标注%设置图形位置%提取均衡化图像直方图信息%均衡化图像直方图标注灰度图像直方图均衡化89909192plate_img3=im2bw(plate_img2, 0.76);figure(10)imshow(plate_img3)title(车牌二值化图像)%图像二值化%设置图形窗口10%显示车牌二值化图像%车牌二值化图像标注图像二值化处理93949596plate_img4=medfilt2(plate

15、_img3);figure(11)imshow(plate_img4)title(中值滤波图像)%图像滤波%设置图形窗口11%显示中值滤波图像%中值滤波图像标注图像中值滤波979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164plate_img5=my

16、_imsplit(plate_img4);m, n=size(plate_img5);s=sum(plate_img5); j=1;k1=1;k2=1;while j=n while s(j)=0 j=j + 1; end k1=j; while s(j)=0 & j round(n/6.5) val, num=min(sum(plate_img5(:, k1+5:k2-5); plate_img5(:, k1+num+5)=0; endendy1=10;y2=0.25;flag=0;word1=;while flag=0 m, n=size(plate_img5); left=1; widt

17、h=0; while sum(plate_img5(:, width+1)=0 width=width + 1; end if width y2 flag=1; word1=temp; end plate_img5(:, 1:width)=0; plate_img5=my_imsplit(plate_img5); endendfigure(12)subplot(2,4,1)imshow(plate_img5)word2,plate_img5=getword(plate_img5);subplot(2,4,2)imshow(plate_img5)word3,plate_img5=getword(

18、plate_img5);subplot(2,4,3)imshow(plate_img5)word4,plate_img5=getword(plate_img5);subplot(2,4,4)imshow(plate_img5)word5,plate_img5=getword(plate_img5);subplot(2,3,4)imshow(plate_img5)word6,plate_img5=getword(plate_img5);subplot(2,3,5)imshow(plate_img5)word7,plate_img5=getword(plate_img5);subplot(2,3,

19、6)imshow(plate_img5)%调取图像再分割函数%获取plate_img5图像矩阵%求和%对j赋值为1%对k1赋值为1%对k2赋值为1%判断j是否不等于n%判断s(j)是否等于0%变量j加1%判断结束%j赋值k1%对s(j)和j进行判断%变量j加1判断结束%j+1赋值给k2%判断k2-k1%寻找最小值%分割%判断结束%判断j结束%y1赋值为10%y2赋值为0.25%flag赋值为0%word1为空%判断flag是否等于0%获取plate_img5图像大小%left赋值为1%width赋值为0%对求和进行判断%width加1%判断结束%如果width小于y1%分割%调取图像再分割函数

20、否则%调取图像再分割函数%获取temp图像矩阵%求和%求和%如果two_thirds/all大于y2%flag赋值为1%word1赋值为temp%判断结束%分割%调取图像再分割函数%判断结束%判断结束%设置图形窗口12%设置图形位置%显示图像plate_img5%分割出第2个字符%设置图形位置%显示图像%分割出第3个字符%设置图形位置%显示图像%分割出第4个字符%设置图形位置%显示图像%分割出第5个字符%设置图形位置%显示图像%分割出第6个字符%设置图形位置%显示图像%分割出第7个字符%设置图形位置%显示图像字符分割165166167168169170171172173174175176177

21、178179180181182183184185186187188189190191192193figure(13)subplot(5,7,1),imshow(word1),title(1)subplot(5,7,2),imshow(word2),title(2)subplot(5,7,3),imshow(word3),title(3)subplot(5,7,4),imshow(word4),title(4)subplot(5,7,5),imshow(word5),title(5)subplot(5,7,6),imshow(word6),title(6)subplot(5,7,7),imsho

22、w(word7),title(7)word1=imresize(word1,40 20);word2=imresize(word2,40 20);word3=imresize(word3,40 20);word4=imresize(word4,40 20);word5=imresize(word5,40 20);word6=imresize(word6,40 20);word7=imresize(word7,40 20);subplot(5,7,15),imshow(word1),title(11)subplot(5,7,16),imshow(word2),title(22)subplot(5

23、,7,17),imshow(word3),title(33)subplot(5,7,18),imshow(word4),title(44)subplot(5,7,19),imshow(word5),title(55)subplot(5,7,20),imshow(word6),title(66)subplot(5,7,21),imshow(word7),title(77)imwrite(word1,1.jpg) imwrite(word2,2.jpg)imwrite(word3,3.jpg)imwrite(word4,4.jpg)imwrite(word5,5.jpg)imwrite(word6

24、,6.jpg)imwrite(word7,7.jpg)%设置图形窗口13%显示第1个字符%显示第2个字符%显示第3个字符%显示第4个字符%显示第5个字符%显示第6个字符%显示第7个字符%压缩第1个字符%压缩第2个字符%压缩第3个字符%压缩第4个字符%压缩第5个字符%压缩第6个字符%压缩第7个字符%显示压缩后第1个字符%显示压缩后第2个字符%显示压缩后第3个字符%显示压缩后第4个字符%显示压缩后第5个字符%显示压缩后第6个字符%显示压缩后第7个字符%创建第1个字符图像%创建第2个字符图像%创建第3个字符图像%创建第4个字符图像%创建第5个字符图像%创建第6个字符图像%创建第7个字符图像字符显示和

25、创建194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241liccode=char(0:9 A:Z 京辽鲁陕苏豫浙贵); subBw2=zeros(40, 20);num=1; for i=1:7 ii=int2str(i); word=imread(ii,.jpg); segBw2=imresize(word, 40,20, nearest); segBw2=i

26、m2bw(segBw2, 0.5); if i=1 kMin=37; kMax=44; elseif i=2 kMin=11; kMax=36; elseif i=3 kMin=1; kMax=36; end l = 1; for k=kMin : kMax fname=strcat(字符模板,liccode(k),.jpg); samBw2=imread(fname); % samBw2 =im2bw(samBw2, 0.5); for i1=1:40 for j1=1:20subBw2(i1, j1)=segBw2(i1, j1) - samBw2(i1 ,j1); end end Dma

27、x=0; for i2=1:40 for j2=1:20 if subBw2(i2, j2)=0 Dmax=Dmax + 1; end end end error(l)=Dmax; l=l + 1; end errorMin=min(error); findc=find(error=errorMin); Code(num*2 - 1)=liccode(findc(1) + kMin - 1); Code(num*2)= ; num=num + 1;endfigure(14)imshow(img9)title(车牌号码:,Code,Color,b)%建立自动识别字符代码表%形成零矩阵%给num赋

28、值为1%变量i循环开始%将i转换成字符串%读取分割的图像%调整图像的大小%图像二值化%定位汉字所在字段%kMin赋值37%kMax赋值44%定位字母所在字段%kMin赋值11%kMax赋值36%定位数字所在字段%kMin赋值1%kMax赋值36%结束%l赋值为1%变量k循环开始%根据字符库找图像模板%读取模板中的图像%图像二值化%变量i1循环开始%变量j1循环开始%待识图像和模板图像做差%变量j1循环结束%变量i1循环结束%Dmax赋值为0%变量i2循环开始%变量j2循环开始%判断两图像之差是否为0%统计不相符的像素点%判断结束%变量j2循环结束%变量i2循环结束%对比后不匹配的像素点%l加1%变量k循环结束%取最小误差%找图像差别最小的图像%确定所找的图像%输出最大相关图像%num加1%变量i循环结束%设置图形窗口14%显示车牌图像%输出识别出的车牌号车牌号码识别结果输出结果如图114所示。图1 原始车牌图像图2灰度图像及直方图图3边缘检测后的图像图4腐蚀后的图像图5膨胀后的图像图6删除小面积对象后的图像 图7定位切割后的车牌图像图8定位切割后的灰度图像及直方图图9直方图均衡化后的图像图10车牌二值化图像图11中值滤波后的图像 图12字符切割结果 图13各个字符识别结果 图14识别的车牌号码 15

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com