基于matlab的车型识别课程设计源代码.docx
- 文档编号:5658005
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:12
- 大小:94.11KB
基于matlab的车型识别课程设计源代码.docx
《基于matlab的车型识别课程设计源代码.docx》由会员分享,可在线阅读,更多相关《基于matlab的车型识别课程设计源代码.docx(12页珍藏版)》请在冰豆网上搜索。
基于matlab的车型识别课程设计源代码
1、目的与要求……………………………………………………1
2、设计的内容……………………………………………………1
3、设计内容以及原理……………..……………………..………1
4、各个功能的实现程序及结果…………………………………2
6、课程设计总结与心得体会……………………………………8
7、参考文献………………………………………………………9
1.目的与要求
目的:
通过本课程设计使学生了解数字图像的基本概念,掌握数字图像处理的基本内容,如图像点运算、几何变换、增强处理、图像复原、边缘检测以及图像压缩等的基本原理和Matlab实现方法。
通过本次课程设计,让学生掌握如何学习一门语言,如何进行资料查阅搜集,如何自己解决问题等方法,养成良好的学习习惯。
扩展理论知识,培养学生的综合设计能力。
要求:
1、要充分认识课程设计对培养自己的重要性,认真做好设计前的各项准备工作。
尤其是对编程软件的使用有基本的认识。
2、既要虚心接受老师的指导,又要充分发挥主观能动性。
结合课题,独立思考,努力钻研,勤于实践,勇于创新。
3、独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。
4、在设计过程中,要严格要求自己,树立严肃、严密、严谨的科学态度,必须按时、按质、按量完成课程设计。
2.设计的内容
主要功能:
1)、预处理功能:
(1)直方图的统计及绘制,根据此找到图像的阈值点;
(2)可将图像的各种几何矫正变换;
(3)彩色图像的灰度化变换等、一般灰度图像的二值化处理等;
(4)数字图像的增强处理功能:
空域中的点运算、直方图的均衡化、各种空间域平滑算法(如局部平滑滤波法、中值滤波等)、锐化算法(如梯度锐化法、高通滤波等);色彩增强:
伪彩色增强、真彩色增强等;
2)、处理功能:
车识别:
从图像中提取出车辆的轮廓并辨别出车型
3.原理方法:
首先对图像做了压缩和归一化处理,得到统一大小的背景图和前景图。
分别对两幅图做灰度变换。
再将含有汽车的前景图像和背景图像进行差分运算去除背景干扰,迭代阈值分割的方法提取到目标车辆轮廓。
经过小面积区域去除和横纵填充后,得到比较利于分析的汽车外形图。
在汽车车型识别中按标准分析了各种不同的车辆形状,抽象出了车辆的一般形状的“工”字形,以车辆顶长作中垂线分下底长的前后比例数、顶长等作为参数,提取出特征参数,用于车型的识别。
利用小孔成像的原理,推算出长和车高。
3.各个功能的实现程序及结果
1)能对图像文件(bmp、jpg、tiff、gif等)进行打开、保存、另存、打印、退出等功能操作;
2)图像预处理功能:
(1)直方图的统计及绘制,根据此找到图像的阈值点;
(2)可将图像的各种几何矫正变换;
(3)彩色图像的灰度化变换等、一般灰度图像的二值化处理等;
(4)数字图像的增强处理功能:
空域中的点运算、直方图的均衡化、各种空间域平滑算法(如局部平滑滤波法、中值滤波等)、锐化算法(如梯度锐化法、高通滤波等);色彩增强:
伪彩色增强、真彩色增强等;
程序代码:
[name,path]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.gif';'*.*'},'');
file=[path,name];im=imread(file);
subplot(221);x=rgb2gray(im);imshow(x):
title('灰度化图像');
subplot(222);imhist(x);title('图像直方图');
subplot(223);c=histeq(x);imshow(c);title('均衡化图像');
subplot(224);imhist(c);title('均衡化后的直方图');
fmax=double(max(max(x)));%egray的最大值并输出双精度型
fmin=double(min(min(x)));%egray的最小值并输出双精度型
level=(fmax-(fmax-fmin)/2)/255;%获得最佳阈值'level'
g=im2bw(x,level);figure;imshow(g);title('二值化');%转换为二值图像
运算结果:
RGB=imread('D:
/zll.jpg');
x=rgb2gray(RGB);
J=imnoise(x,'salt&pepper',0.02);%加入椒盐燥声
subplot(131),imshow(J);title('原始黑白图像')
K=medfilt2(J);%中值滤波函数
subplot(132);imshow(K);title('中值滤波');
H=fspecial('unsharp');
BW=imfilter(K,H,'replicate');
subplot(133);imshow(BW);title('图像锐化');
B=grayslice(x,7);%从灰度创索
figure,imshow(B,cool(7));title('伪彩色增强');%cool青蓝和洋红
3)车识别;
程序代码:
i=imread('D:
/e1.jpg');
j=imread('D:
/e2.jpg');
i1=rgb2gray(i);
j1=rgb2gray(j);
i2=medfilt2(i1,[2,2]);
j2=medfilt2(j1,[2,2]);
z=double(imsubtract(i2,j2));
subplot(221),imshow(z);title('原图象与背景图象相减');
zmax=max(max(z));
zmin=min(min(z));
tk=(zmax+zmin)/2;
bcal=1;
zsize=size(z);
while(bcal)
ifore=0;
iback=0;
isum=0;
backsum=0;
fori=1:
zsize
(1)
forj=1:
zsize
(2)
tmp=z(i,j);
if(tmp>=tk)
ifore=ifore+1;
isum=isum+double(tmp);
else
iback=iback+1;
backsum=backsum+double(tmp);
end
end
end
zo=isum/ifore;
zb=backsum/iback;
tktmp=uint8((zo+zb)/2);
if(tktmp==tk)
bcal=0;
else
tk=tktmp;
end
end
z1=im2bw(z,double(tk)/255);
z2=medfilt2(z1,[7,7]);
z3=bwareaopen(z2,300);
subplot(222),imshow(z2);title('小面积区域去除后的图像')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
zsize=size(z3);%横向填充
fori=1:
zsize
(1)
n=0;
x=zeros(1,400);
y=1;
forj=1:
zsize
(2)
if(z3(i,j)==1)
x(1,y)=j;
y=y+1;
n=n+1;
liebiao=j;
end
end
if((n>=100)&&(liebiao-x(1,1)>150))
form=x(1,1):
liebiao
z3(i,m)=1;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(223),imshow(z3);title('横向填充后的图像');
z4=medfilt2(z3,[5,5]);
zsize=size(z4);%纵向填充
forj=1:
zsize
(2)
n=0;
x=zeros(600,1);
y=1;
fori=1:
zsize
(1)
if(z4(i,j)==1)
x(y,1)=i;
y=y+1;
n=n+1;
hangbiao=i;
end
end
if((n>=10)&&(hangbiao-x(1,1)>50))
form=x(1,1):
hangbiao
z4(m,j)=1;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(224),imshow(z4);title('横纵向填充后的图像');
zsize=size(z4);%扫描汽车顶部
fori=1:
zsize
(1)
n=0;
y=1;
x=zeros(1,500);
forj=1:
zsize
(2)
if(z4(i,j)==1)
x(1,y)=j;
y=y+1;
n=n+1;
liebiao=j;
end
end
if((liebiao-x(1,1)==(n-1))&&(n>60))
a1=i;
b1=x(1,1);
b2=liebiao;
break;
end
end
fork=1:
(a1-1)
forj=1:
zsize
(2)
z4(k,j)=0;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
zsize=size(z4);%扫描汽车底部
fori=zsize
(1):
-1:
1
n=0;
y=1;
x=zeros(1,500);
forj=1:
zsize
(2)
if(z4(i,j)==1)
x(1,y)=j;
y=y+1;
n=n+1;
liebiao=j;
end
end
if((liebiao-x(1,1)==(n-1))&&(n>80))
a2=i;
break;
end
end
fork=zsize
(1):
-1:
(a2+1)
forj=1:
zsize
(2)
z4(k,j)=0;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
zsize=size(z4);%扫描汽车最左边
forj=1:
zsize
(2)
n=0;
y=1;
x=zeros(500,1);
fori=1:
zsize
(1)
if(z4(i,j)==1)
x(y,1)=i;
y=y+1;
n=n+1;
hangbiao=i;
end
end
if((hangbiao-x(1,1)==(n-1))&&(n>40))
a3=x(1,1);
b3=j;
break;
end
end
fork=1:
(b3-1)
fori=1:
zsize
(1)
z4(i,k)=0;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
zsize=size(z4);%扫描汽车最右边
forj=zsize
(2):
-1:
1
n=0;
y=1;
x=zeros(500,1);
fori=1:
zsize
(1)
if(z4(i,j)==1)
x(y,1)=i;
y=y+1;
n=n+1;
hangbiao=i;
end
end
if((hangbiao-x(1,1)==(n-1))&&(n>40))
b4=j;
a4=x(1,1);
break;
end
end
fork=zsize
(2):
-1:
(b4+1)
fori=1:
zsize
(1)
z4(i,k)=0;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
d=b2-b1;%识别判断车型
f=b4-b3;
t=b1+d/2;
t1=t-b3;
t2=b4-t;
c1=min(t1,t2);
c2=max(t1,t2);
if((c1/c2)<0.55)
disp([char(6),'货车'])
else
if(0.85<(d/f)<1.15)
disp([char(6),'客车'])
else
disp([char(6),'小轿车'])
end
end
运行结果:
(1)、客车
>>
4.课程设计总结与体会
通过此次的matlab课程设计,我又对matlab软件有了更深层次的了解,熟悉的matlab的操作以及用matlab语言编程。
还有基于matlab的数字图像处理的应用。
通过实践,我更加意识到课堂学的知识的重要性,以及实践的必不可少,只有课堂的知识与实践相结合,才能更好更快的做好任务。
在调试程序是最麻烦的步骤,往往提示的地方不是程序出错的地方,只有从全程序慢慢的从头开始查,这样既能熟悉matlab语言,又能锻炼大家的耐心。
这两周的课程设计虽然结束了,但是我们以后还是要多多做这样的设计,锻炼大家的实践能力。
6.参考文献
1、《图像工程》上册章毓晋清华大学出版社
2、《MATLABR2008数字图像处理与分析实例教程》赵书兰化学工业出版社
3、《数字图像处理与分析(第二版)》杨帆北京航空航天大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 车型 识别 课程设计 源代码