《汽车标志识别设计-MATLAB程序设计》由会员分享,可在线阅读,更多相关《汽车标志识别设计-MATLAB程序设计(9页珍藏版)》请在金锄头文库上搜索。
1、设计目的:车牌定位系统的目的在于正确获取整个图像中车标的区域,并识别出车标。程序效果:程序实现:STEP1:输入待处理的原始图像:程序:1234clear;clc;close all;%Step1 获取图像 装入待处理彩色图像并显示原始图像Scolor = imread(1.jpg);%imread函数读取图像文件subplot(3,4,1);imshow(Scolor),title(原始图像)输出:SETP2:图像的灰度化:彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转
2、换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。程序:123%将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图subplot(3,4,2);imshow(Sgray),title(原始黑白图像);输出:STEP3:对原始图像进行开操作得到图像背景图像:程序:1234%对原始图像进行开操作得到图像背景图像:s=strel(disk,13);%strei函数Bgray=imopen(Sgray,s);%打开sgray s图像subplot(3,4,3);im
3、show(Bgray);title(背景图像);%输出背景图像输出:STEP4: 灰度图像与背景图像作减法,对图像进行增强处理:程序:123%灰度图像与背景图像作减法,对图像进行增强处理:Egray=imsubtract(Sgray,Bgray);%两幅图相减subplot(3,4,4);imshow(Egray);title(增强黑白图像);%输出黑白图像输出:STEP5: 取得最佳阈值,将图像二值化:二值图像是指整幅图像画面内仅黑、白二值的图像。在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阀值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用
4、的形状信息,不会产生额外的空缺等等。车牌识别系统要求处理的速度高、成本低、信息量大,采用二值图像进行处理,能大大地提高处理效率。阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某中像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。程序:1234567%二值化处理fmax1=double(max(max(Egray);%egray的最大值并输出双精度型fmin1=double(min(min(Egray);%egray的最小值并输出双精度型level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值bw22=im2bw
5、(Egray,level);%转换图像为二进制图像bw2=double(bw22);figure,imshow(bw2);title(图像二值化);%得到二值图像输出:STEP6:边缘检测:两个具有不同灰度值的相邻区域之间总存在边缘,边缘就是灰度值不连续的结果,是图像分割、纹理特征提取和形状特征提取等图像分析的基础。为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。经过一阶的导数
6、的边缘检测,所求的一阶导数高于某个阈值,则确定该点为边缘点,这样会导致检测的边缘点太多。可以通过求梯度局部最大值对应的点,并认定为边缘点,去除非局部最大值,可以检测出精确的边缘。一阶导数的局部最大值对应二阶导数的零交叉点,这样通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。程序:123%边缘检测grd=edge(bw2,canny)%用canny算子识别强度图像中的边界subplot(3,4,6);imshow(grd);title(图像边缘提取);%输出图像边缘输出:STEP7:对得到图像作开操作进行滤波:数学形态非线性滤波,可以用于抑制噪声,进行特征提取、边缘检测、图像分割等图像处理
7、问题。腐蚀是一种消除边界点的过程,结果是使目标缩小,孔洞增大,因而可有效的消除孤立噪声点;膨胀是将与目标物体接触的所有背景点合并到物体中的过程,结果是使目标增大,孔洞缩小,可填补目标物体中的空洞,形成连通域。先腐蚀后膨胀的过程称为开运算,它具有消除细小物体,并在纤细处分离物体和平滑较大物体边界的作用;先膨胀后腐蚀的过程称为闭运算,具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。对图像做了开运算和闭运算,闭运算可以使图像的轮廓线更为光滑,它通常用来消掉狭窄的间断和长细的鸿沟,消除小的孔洞,并弥补轮廓线中的断裂。程序:123456789%对得到图像作开操作进行滤波bg1=imclose(gr
8、d,strel(rectangle,5,25);%取矩形框的闭运算subplot(3,4,7);imshow(bg1);title(图像闭运算5,25);%输出闭运算的图像bg3=imopen(bg1,strel(rectangle,5,19);%取矩形框的开运算subplot(3,4,8);imshow(bg3);title(图像开运算5,19);%输出开运算的图像bg2=imopen(bg3,strel(rectangle,11,24);%取矩形框的开运算subplot(3,4,9);imshow(bg2);title(图像开运算11,24);%输出开运算的图像bg4=imsubtract
9、(bg3,bg2);%两幅图相减subplot(3,4,10);imshow(bg4);title(增强车标图像);%输出增强车标图像输出:STEP8:进行图像重构。小波图像分解,消除车标下方白色图案,图像重构,只保留车标二值化图像。 程序:1234%图像重构,只保留车标二指化数据bg5=imreconstruct(imerode(bg4,strel(disk,5),bg4);subplot(3,4,11);imshow(bg5);title(车标二值化图像);%输出车标二值化图像输出:STEP9:保存二值化图像中车标坐标位置:程序:1234567%保存白色车标坐标信息x0,y0=find(b
10、g6=1);%找出二值图片中白色的点pos=x0;y0;%把对应白色点的坐标存放到POS中,第一行对应第i个坐标的x,第二行对应第i个坐标的yxmax=max(pos(1,:);xmin=min(pos(1,:);ymax=max(pos(2,:);ymin=min(pos(2,:);STEP10:根据车标位置,在原图上标示出车标:程序:12345678y=xmin;x=ymin;,%起始坐标(颠倒的)w=ymax-ymin;h=xmax-xmin;%w为宽 h为长initstate = x y w h;subplot(3,4,12);imshow(1.jpg),title(车标标识效果图);rectangle(Position,initstate,LineWidth,1,EdgeColor,r);figure,imshow(1.jpg),title(车标标识效果图);rectangle(Position,initstate,LineWidth,1,EdgeColor,r);输出: