1、设计目的
基于Maltab或者C语言对图像进行识别。
编写摄像头采集图像程序,对采集的图像进行预处理,如图像增强、图像分割等处理,对于处理的图像进行特征提取,根据特征进行模式识别,如对三角形、正方形与圆形的识别。
2、设计正文
2.1设计分析
1)编写摄像头采集图像程序
2)对采集的图像进行预处理
3)对于处理的图像进行特征提取
4)进行模式识别,区分各种形状
2.2设计原理
2.2.1图像预处理
彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。
由彩色转换为灰度的过程叫做灰度化处理。
选择的标准是经过灰度变换彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别
等处理中经常将彩色图像转变为灰度图像,以加快处理速度。
由彩色转换为灰度的过程叫做灰度化处理。
选择的标准是经过灰度变换。
2.2.2对于处理的图像进行特征值提取
二值图像是指整幅图像画面内仅黑、白二值的图像。
在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阀值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用的形状信息,不会产生额外的空缺等等。
车牌识别系统要求处理的速度高、成本低、信息量大,采用二值图像进行处理,能大大地提高处理效率。
阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某中像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。
两个具有不同灰度值的相邻区域之间总存在边缘,边缘就是灰度值不连续的结果,是图像分割、纹理特征提取和形状特征提取等图像分析的基础。
为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。
所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。
经过一阶的导数的边缘检测,所求的一阶导数高于某个阈
值,则确定该点为边缘点,这样会导致检测的边缘点太多。
可以通过求梯度局部最大值对应的点,并认定为边缘点,去除非局部最大值,可以检测出精确的边缘。
一阶导数的局部最大值对应二阶导数的零交叉点,这样通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。
2.2.3流程设计
1.调用摄像头
2.获取图像
3.读入图片
4.选取阈值为0.5
5.图像取反色
6.二值图象标签化处理
7.选出被标记图像像素中的最大值
8.计算图像y的像素点
9.统计被标记点数的数量
10.如果被标记点的数量大于总共像素的5%,可以认为这些标记点为被识别物体
11.找到能构成物体的个体的下标,并组成一维向量,次向量中的数代表被识别物体的标签号+1,向量的维数代表被识别物体的个数
12.计算所有被识别物体的数量
13.是被识别物体的标签号
14.对被识别物体的类型做判断
15.在图象中选择标签为f1(i)的对象
16.求面积1
17.求周长
18.求面积2
19.e(i)=4*3.14*F1/求面积2^2;
20.如果 0.8927<e(i) <1.1073则判断为原型
21.如果 0.73< e(i) <0.8927 则判断为方形
22.如果 e(i) < 0.73 则判断为三角形
2.2设计程序
2.2.1摄像头采集图像程序
vid=videoinput('winvideo',1,'YUY2_640x480');
set(vid,'ReturnedColorSpace','rgb';
vidRes=get(vid,'VideoResolution');
width=vidRes(1);
height=vidRes(2);
nBands=get(vid,'NumberOfBands');
figure('Name', '调用摄像头','NumberTitle','Off','ToolBar', 'None', 'MenuBar', 'None');
hImage=image(zeros(vidRes(2),vidRes(1),nBands));
preview(vid,hImage);
hb1 = uicontrol('String', '拍摄 ', ...
'Callback','a=getsnapshot(vid),imwrite(getsnapshot(vid), ''图形识别.jpg'')');
2.2.2读取图片并调用函数
i = imread('F:\matlab\1.jpg');
z=shibie(i);
2.2.3图片处理及图形识别与显示程序
function z=shibie(A)
C=im2bw(A,0.52);
y=~C;
D=bwlabel(y,4);
a=max(max(D));
[b,c]=size(y);
d=zeros(1,a+1);
for i=1:b;
for j=1:c;
d(D(i,j)+1)=d(D(i,j)+1)+1;
end
end
f=zeros(1,a+1);
for i=2:a+1;
f(i)=d(i)>0.01*b*c;
end
f2=find(f==1);
g=length(f2);
f1=f2-1;
figure(1)
for i=1:g
[r1,c1]=find(D==f1(i));
BW1=bwselect(D,c1,r1,4);
SE = ones(2,4);
E1 = imdilate(BW1,SE);
F1=bwarea(E1);
G1=bwperim(E1,4);
H1=bwarea(G1);
e(i)=4*3.14*F1/H1^2;
if( 0.8927<e(i) & e(i)<1.1073)
subplot(4,3,i)
imshow(~E1);
title('圆形')
elseif(0.73<e(i) && e(i)<0.8927 )
subplot(4,3,i)
imshow(~E1);
title('方形')
elseif(e(i)<0.73)
subplot(4,3,i)
imshow(~E1);
title('三角形')
end
end
2.3程序处理的图像
2.3.1调用摄像头采集图像
如图2-1所示
2.3.2图形识别
图2-1
如图2-2所示
图2-2
3、设计总结或结论
通过本次设计,我学习到了基于matlab的摄像头调用,了解到了数字图像处理基本的设计流程。
通过参与设计,我学习到了一些新的知识,同时通过查找资料也将旧的知识重新梳理了一遍,增长了自身的动手能力。
重新熟悉了一遍MATLAB的知识。
但是在学习的同时也曝露出了自身的很多不足之处:在编程序时不熟练使得必须查询大量的参考资料,并且需要小组成员一起来讨论。
在解决问题的同时我更进一步的学习到了团队合作的重要性,特别是分工明确对于设计的完成具有很大的作用。
分工明确,各自发挥其长处,可以保质保量的完成设计。
4、参考文献
[1]胡学龙,徐开宇.数字图像处理[M].北京:电子工业出版社,2011
[2]唐向宏,岳恒立,郑雪峰.MATLAB及在电子信息类课程中的应用[M].北京:电子工业出版社,2009
[5]章毓晋.图像处理和分析教程[M].北京:人民邮电出版社,2007
[6]夏德深,傅德胜.计算机图像处理及应用[M].南京:东南大学出版社,2004
[7]徐飞,施晓红.MATLAB应用图像处理[M].西安:西安电子科技大学出版社,2002
[8]陈桂明,张明照,戚红雨.应用MATLAB语言处理数字信号数字图像[M].北京:科学出版社,2000。