数字图像处理纸牌识别课程设计

合集下载

数字图像处理-车牌识别-课件

数字图像处理-车牌识别-课件

与Sobel算子类似,这也是一种边缘模板,仅是模 板权系数不一样
1 1 1 M 10 0 0
1 2 1
1 0 1 和 M 21 0 2
1 0 1
ቤተ መጻሕፍቲ ባይዱ
11
G i f(jm ,kn)M i(m ,n) m 1n1
输出: g(j,k)maG x 1,G {2}
快速边缘检测
在车牌系统中还常采用一种更简单的模板来提取 边缘(对于有干扰的图像效果不理想)
数字图像处理-车 牌识别
精品
一、车牌识别技术简介
车牌识别是现代交通管理的重要措施,是 智能交通系统的重要环节
内容: 车牌识别系统是采用数字摄像技术和计算 机信息管理技术,对运行车辆实现智能管 理的综合运用技术
理论基础:数字图像处理和模式识别 车牌识别技术具有典型性,容易推广到其
它识别对象
主要应用领域
高斯-拉普拉斯算子法
二阶微分算子 该算子对噪声不敏感(5×5)
2 4 4 4 2 4 0 8 0 4 2 4 8 24 8 4 4 0 8 0 4 2 4 4 4 2
输出: g(j,k)2f(j,k)
哈夫(Hough)变换提取直线
利用图像全局特性将边缘像素连接起来形成区域 封闭边界的一种方法
定位、分割后输出
下步工作是对分割输出进行字符识别
车徽边缘提取与识别
1、彩色图像灰度化
CCD摄像头输出的图像一般是24位真彩色图像,需 进行灰度化,使不同颜色车体统一化,同时实现 快速处理
两种制式都可以采用
PAL制: 亮度 NTSC制:亮度
Y 0 .2R 2 0 .7 2 G 0 0 .0 7B 71 Y 0 .2R 9 0 .5 9 G 7 0 .1 8B 14

dsp车牌识别课程设计

dsp车牌识别课程设计

dsp车牌识别课程设计一、课程目标知识目标:1. 让学生理解车牌识别在智能交通系统中的应用及其重要性。

2. 学生能够掌握数字信号处理(DSP)的基本概念,并将其应用于车牌识别过程。

3. 学生能够了解车牌识别的基本流程,包括图像预处理、车牌定位、字符分割和识别。

技能目标:1. 培养学生运用DSP技术进行车牌图像预处理的能力,如灰度化、二值化、滤波等。

2. 培养学生运用图像处理算法进行车牌定位、字符分割的能力。

3. 培养学生运用模式识别方法进行车牌字符识别的能力。

情感态度价值观目标:1. 培养学生对智能交通领域及DSP技术的兴趣,激发他们探索新技术的热情。

2. 培养学生的团队协作精神,使他们学会与他人合作共同解决问题。

3. 培养学生的创新意识,鼓励他们勇于尝试不同的方法解决问题。

本课程针对高年级学生,结合课程性质、学生特点和教学要求,将目标分解为具体的学习成果,以便后续的教学设计和评估。

通过本课程的学习,学生将能够掌握车牌识别的核心技术,具备实际应用能力,并为未来在智能交通领域的发展奠定基础。

二、教学内容1. 数字信号处理基础- 数字图像处理基本概念- 图像采样和量化- 灰度变换与空间滤波2. 车牌识别系统概述- 车牌识别技术在智能交通中的应用- 车牌识别系统的基本流程与组成3. 车牌图像预处理- 灰度化处理- 二值化处理- 图像滤波与增强4. 车牌定位- 边缘检测算法- 车牌区域提取- 车牌倾斜校正5. 字符分割- 基于投影的字符分割- 基于连通域分析的字符分割- 字符分割算法评估6. 字符识别- 模式识别基本概念- 常用字符识别算法- 字符识别性能评估7. 实践环节- 车牌识别系统设计与实现- 车牌识别算法优化- 车牌识别系统测试与优化本教学内容依据课程目标,结合教材章节进行选择和组织,确保内容的科学性和系统性。

教学大纲明确规定了教学内容的安排和进度,旨在帮助学生循序渐进地掌握车牌识别相关技术。

数字图像处理课程设计-基于图像处理的车牌识别技术

数字图像处理课程设计-基于图像处理的车牌识别技术

《数字图像处理》课程设计报告设计题目:基于图像处理的车牌识别技术学院:xxxxxxxxxxxxxxxx专业:xxxxxxxxxxxxxxxxxxxxxxxxxxx姓名:xxxxxxxxxxxxxxxxxxxxxxx学号:xxxxxxxxxxxxxxxxxxx指导教师:xxxxxx2015 年xx 月xx 日摘要智能交通系统已成为世界交通领域研究的重要课题,车牌识别系统作为智能交通系统的核心,起着非常关键的作用。

目前,图像处理技术在车牌识别中的应用研究已经成为科学界的一个重要研究领域。

本课程设计旨在粗浅地运用所学基本原理和知识分析数字图像处理技术在友好环境下的应用(所选车牌识别的车辆图片均为友好环境下,易于处理的实验图片,不具有广泛性)。

以车牌为研究对象,主要研究如何通过图像的预处理、车牌的定位、车牌字符分割和字符识别等一系列过程,完成车牌的识别。

关键词:智能交通、数字图像处理、车牌识别ABSTRACTIntelligent transportation system has become an important research topicin the world of transportation, license plate recognition system as thecore of intelligent transportation system, plays a key role. At present,the application of image processing technology in vehicle license platerecognition has become an important research area of the scientificcommunity.This course is designed to scratch the surface and apply the knowledgeto analyze the basic principles of digital image processing technologyin a friendly environment (experimental vehicle license platerecognition image selected pictures are environment-friendly, easy tohandle, does not have the breadth) . With license plate for the study,the main research how image preprocessing, license plate and licenseplate character segmentation and character recognition process and aseries of complete license plate recognition.Keywords:smart transportation 、Image Processing 、License Plate Recognition目录1、绪论 (4)1.1问题提出 (4)1.2背景及现状分析 (4)1.3目的及意义 (5)1.4开发工具 (5)2、系统设计 (5)2.1总体设计方案 (5)2.2流程图 (5)2.3模块功能分析 (6)2.3.1图像预处理 (6)2.3.2车牌定位 (8)2.3.3字符分割 (8)2.3.4字符识别 (10)3、系统结果分析 (12)3.1本系统结果分析 (12)3.2本系统的不足 (12)4、课程设计总结 (13)5、课程设计体会 (13)6、参考文献 (13)7、附录 (14)1、绪论伴随着工业的迅速发展,城市化的进展和汽车的普及,世界各国的交通量急剧增加。

学生用-数字图像处理(车牌识别)指导书

学生用-数字图像处理(车牌识别)指导书

数字图像处理(车牌识别)课程设计指导书一、课程设计目的1、提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。

2、熟悉掌握MATLAB,并用其进行数字图像的应用处理的开发设计。

二、课程设计基本要求1.掌握数字图像处理的基本原理。

图像处理的研究内容主要包括:图像变换、图像增强、图像复原、图像编码、边缘提取和图像分割。

2. 熟悉MATLAB图像处理的基本方法。

1)熟悉和掌握MATLAB 程序设计方法;2)熟悉MATLAB图像处理工具箱;3)学会运用MATLAB工具箱对图像进行处理和分析。

3.需要在程序书写时说明做适当的注释。

要理解每个函数的具体意义和适用范围,在报告中须要将主要函数的功能和参数做详细的说明。

4、通过多幅不同图像来测试该系统的稳定性和正确性。

二、设计的内容利用MATLAB函数功能,设计和实现通过设计一个车牌识别系统。

车牌识别系统的基本工作原理为:将手机拍摄到的包含车辆牌照的图像输入到计算机中进行预处理,再对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后将其逐个与创建的字符模板中的字符进行匹配,匹配成功则输出,最终匹配结束则输出则为车牌号码的数字。

车牌识别系统的基本工作原理图如图1所下所示:三、总体方案设计车辆牌照识别系统主要是由车牌定位和字符分割识别两部分组成,其中车牌定位又可分为图像预处理及边缘提取模块和牌照定位及分割模块;字符识别可分为字符分割和单个字符识别两个模块。

为用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。

但由于辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需对原始图象进行识别前的预处理。

牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。

数字图像处理实验_汽车牌照自动识别

数字图像处理实验_汽车牌照自动识别

贵州大学实验报告学院:计算机学院专业:网络工程班级:101 姓名学号实验组实验时间12.11 指导教师戴丹成绩实验项目名称实验四汽车牌照自动识别实验目的1.分析汽车牌照的特点,正确获取整个图像中车牌的区域,并识别出车牌号。

2.将图像预处理、分割、分析等关键技术结合起来,理论与实践相结合,提高图像处理关键技术的综合应用能力。

实验原理牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。

其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。

某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。

一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。

当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。

牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。

实验步骤a.牌照定位,定位图片中的牌照位置;b.牌照字符分割,把牌照中的字符分割出来;c.牌照字符识别,把分割好的字符进行识别,最终组成牌照号码。

实验数据getword.mfunction [word,result]=getword(d)word=[];flag=0;y1=8;y2=0.5;while flag==0[m,n]=size(d);wide=0;while sum(d(:,wide+1))~=0 && wide<=n-2wide=wide+1;endtemp=qiege(imcrop(d,[1 1 wide m]));[m1,n1]=size(temp);if wide<y1 && n1/m1>y2d(:,[1:wide])=0;if sum(sum(d))~=0d=qiege(d); % 切割出最小范围else word=[];flag=1;endelseword=qiege(imcrop(d,[1 1 wide m]));d(:,[1:wide])=0;if sum(sum(d))~=0;d=qiege(d);flag=1;else d=[];endendendresult=d;qiege.mfunction e=qiege(d)[m,n]=size(d);top=1;bottom=m;left=1;right=n;while sum(d(top,:))==0 && top<=mtop=top+1;endwhile sum(d(bottom,:))==0 && bottom>=1bottom=bottom-1;endwhile sum(d(:,left))==0 && left<=nleft=left+1;endwhile sum(d(:,right))==0 && right>=1right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,[left top dd hh]);main.mfunction [d]=main(jpg)close allclcI=imread('car2.jpg');subplot(2,3,1),imshow(I);title('原图')I1=rgb2gray(I);subplot(2,3,2),imshow(I1);title('灰度图');subplot(2,3,3),imhist(I1);title('灰度图直方图');I2=edge(I1,'robert',0.15,'both');subplot(2,3,4),imshow(I2);title('robert算子边缘检测') se=[1;1;1];I3=imerode(I2,se);subplot(2,3,5),imshow(I3);title('腐蚀后图像');se=strel('rectangle',[25,25]);I4=imclose(I3,se);subplot(2,3,6),imshow(I4);title('平滑图像的轮廓');I5=bwareaopen(I4,2000);figure(2),imshow(I5);title('从对象中移除小对象'); [y,x,z]=size(I5);myI=double(I5);ticBlue_y=zeros(y,1);for i=1:yfor j=1:xif(myI(i,j,1)==1)Blue_y(i,1)= Blue_y(i,1)+1;endendend[temp MaxY]=max(Blue_y);PY1=MaxY;while ((Blue_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);Blue_x=zeros(1,x);for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)= Blue_x(1,j)+1;endendendwhile ((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;dw=I(PY1:PY2-8,PX1:PX2,:);t=toc;figure(3),subplot(1,2,1),imshow(IY),title('行方向合理区域');figure(3),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像') imwrite(dw,'dw.jpg');[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像'); jpg=strcat(filepath,filename);a=imread('dw.jpg');b=rgb2gray(a);imwrite(b,'1.车牌灰度图像.jpg');figure(4);subplot(3,2,1),imshow(b),title('1.车牌灰度图像')g_max=double(max(max(b)));g_min=double(min(min(b)));T=round(g_max-(g_max-g_min)/3);[m,n]=size(b);d=(double(b)>=T);imwrite(d,'2.车牌二值图像.jpg');figure(4);subplot(3,2,2),imshow(d),title('2.车牌二值图像')figure(4),subplot(3,2,3),imshow(d),title('3.均值滤波前')h=fspecial('average',3);d=im2bw(round(filter2(h,d)));imwrite(d,'4.均值滤波后.jpg');figure(4),subplot(3,2,4),imshow(d),title('4.均值滤波后')se=eye(2);[m,n]=size(d);if bwarea(d)/m/n>=0.365d=imerode(d,se);elseif bwarea(d)/m/n<=0.235d=imdilate(d,se);endimwrite(d,'5.膨胀或腐蚀处理后.jpg');figure(4),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后')d=qiege(d);[m,n]=size(d);figure,subplot(2,1,1),imshow(d);%figure(6),subplot(1,1,1),imshow(d),title(n)k1=1;k2=1;s=sum(d);j=1;while j~=nwhile s(j)==0j=j+1;endk1=j;while s(j)~=0 && j<=n-1j=j+1;endk2=j-1;if k2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0;endendd=qiege(d);y1=10;y2=0.25;flag=0;word1=[];while flag==0[m,n]=size(d);left=1;wide=0;while sum(d(:,wide+1))~=0wide=wide+1;endif wide<y1d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[1 1 wide m]));[m,n]=size(temp);all=sum(sum(temp));two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));if two_thirds/all>y2flag=1;word1=temp;endd(:,[1:wide])=0;d=qiege(d);endend[word2,d]=getword(d);[word3,d]=getword(d);[word4,d]=getword(d);[word5,d]=getword(d);[word6,d]=getword(d);[word7,d]=getword(d);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),imshow(word7),title('7');[m,n]=size(word1);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('1');subplot(5,7,16),imshow(word2),title('2');subplot(5,7,17),imshow(word3),title('3');subplot(5,7,18),imshow(word4),title('4');subplot(5,7,19),imshow(word5),title('5');subplot(5,7,20),imshow(word6),title('6');subplot(5,7,21),imshow(word7),title('7');imwrite(word1,'1.jpg');imwrite(word2,'2.jpg');imwrite(word3,'3.jpg');imwrite(word4,'4.jpg'); imwrite(word5,'5.jpg');imwrite(word6,'6.jpg');imwrite(word7,'7.jpg');liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁']);SubBw2=zeros(40,20); l=1;for I=1:7ii=int2str(I);t=imread([ii,'.jpg']);SegBw2=imresize(t,[40 20],'nearest');if l==1kmin=37;kmax=40;elseif l==2kmin=11;kmax=36;else l>=3kmin=1;kmax=36;endfor k2=kmin:kmaxfname=strcat('字符模板\',liccode(k2),'.jpg');SamBw2 = imread(fname);for i=1:40for j=1:20SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);endendDmax=0;for k1=1:40for l1=1:20if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 )Dmax=Dmax+1;endendendError(k2)=Dmax;endError1=Error(kmin:kmax);MinError=min(Error1);findc=find(Error1==MinError);Code(l*2-1)=liccode(findc(1)+kmin-1);Code(l*2)=' ';l=l+1;endfigure(6),subplot(1,1,1),imshow(d);title(n);figure(6),subplot(1,1,1),imshow(dw);title (['车牌号码:',Code],'Color','b');实验总结学会将图像预处理、分割、分析等关键技术结合起来,理论与实践相结合,提高图像处理关键技术的综合应用能力。

(完整版),基于MATLAB的图像处理的课程设计(车牌识别系统)汇编,推荐文档

(完整版),基于MATLAB的图像处理的课程设计(车牌识别系统)汇编,推荐文档
这主要是对 MATLAB 函数的不够清楚,用到的很多函数是针对二维数据的, 而 RGB 图像的数据是一个三维矩阵,所以处理要与灰度图像不同,在开始的时 候,我认为应该找一个能够应用于三维矩阵的函数,结果却没找到,后来想到 可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次。 比如,彩色图像的滤波处理,直方图均衡等。
5
度和分辨率。我们发现车辆牌照图象的灰度取值范围大多局限在 r=(50,200)间, 而且总体上灰度偏低,图象较暗
图6 灰度增强后的图像
(2)平滑处理 对于受噪声干扰严重的图象,由于噪声点多在频域中映射为高频分量,因
此可以在通过低通滤波器来滤除噪声,但实际中为了简化算法,也可以直接在 空域中用求邻域平均值的方法来削弱噪声的影响,这种方法称为图象平滑处理。 例如,某一象素点的邻域S 有两种表示方法:8邻域和4邻域分别对应的邻域平
三, 心得体会 1、在这次课程设计过程中,感触很深,由于对MATLAB图像处理的函数不 熟悉,导致自己走了很多的弯路,比如在设计图像左转90度和右转90度时,由 于开始并不知道imrotate函数,只知道上下翻转flipud和左右翻转fliplr函数, 想着要怎么用这两个函数来实现左转和右转呢,如果当当只用矩阵转置的话, 并不能达到要求,后来想可以结合flipud和fliplr函数来实现,下面程序是实 现左转90度: axes(handles.axes2);
(二)现状目前,国内的 ITS 产业仍然处于起步阶段,在产业链中,电子地图 商、导航终端商、嵌入式操作系统均已经具备产业规模,而所欠缺的环节则是 对实时交通信息的采集和处理系统。车牌识别系统是城市智能交通管理系统的 一个重要组成部分,广泛用于是针对公路行驶的机动车辆进行实时监控的智能 化交通系统,电子收费,交通违规管理,安全停车管理等重要领域。

期末课程报告:数字图像中车牌识别的matlab实现

期末课程报告:数字图像中车牌识别的matlab实现

数字图像处理期末课程报告题目:车牌识别的matlab实现题目类型:软件型学院信息工程与自动化学院专业:计算机科学与技术年级:XXXX 学号:XXXXXXX学生姓名: xxx指导教师:xx日期:2012-6-8目录摘要: (3)关键词: (3)实验工具: (3)车辆牌照识别流程: (3)实验内容及步骤 (3)1.图像预处理: (3)2.车牌定位——车牌起始位置和终止位置 (5)3.图片二值化 (6)4.列方向像素点灰度值累计 (7)5.字符分割: (8)6.建立字符模板数据库 (9)7.归一化训练 (10)结果分析: (15)摘要:本次课程设计的目的是通过对基于MATLAB 的字符识别的研究,以汽车牌照识别的设计为实例,详细介绍字符识别的相关原理。

整个汽车牌照识别的过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,用MATLAB 软件编程来实现每一个部分,最后识别出汽车牌照。

在研究的同时对其中出现的问题进行了具体分析,处理。

寻找出对于具体的汽车牌照识别过程的最好的方法。

关键词:MATLAB 字符识别 车牌识别 神经网络 图像处理实验工具:MATLAB 7.8(R2009a )。

车辆牌照识别流程:基于 MATLAB 图像处理的汽车牌照识别,主要包括车牌定位、字符车牌分割、和车牌字符识别三个关键环节。

流程图如下:其中,(1) 原始图像:由数码相机或其它扫描装置拍摄到的图像;(本实验图片由数码相机获得)(2) 图像预处理:对动态采集到的图像进行灰度处理、边缘检测、腐蚀、膨胀、滤波、等处理排除图像干扰;(3) 车牌定位:计算边缘图像的投影面积,寻找峰谷点,大致确定车牌位置,再计算此连通域内的宽高比,剔除不在域值范围内的连通域,最后得到的便为车牌区域;(4) 字符分割:利用投影检测的字符定位分割方法得到单个的字符;(5) 字符数据库:构造训练样本数据库,为第6步的字符识别建立字符模板数据库;(6) 字符识别:通过基于模板匹配的OCR 算法或基于人工神经网络的OCR 算法,通过特征对比或训练识别出相关的字符,得到最后的汽车牌照,包括英文字母和数字。

图像处理课程设计车牌识别

图像处理课程设计车牌识别

图像处理课程设计车牌识别一、课程目标知识目标:1. 让学生理解图像处理的基本概念,掌握车牌识别的技术原理。

2. 学会使用图像处理软件进行车牌检测、字符分割和识别。

3. 了解车牌识别技术在现实生活中的应用及其重要性。

技能目标:1. 培养学生运用图像处理技术解决实际问题的能力,如车牌识别。

2. 提高学生编程实践能力,能独立完成车牌识别程序的设计与实现。

3. 培养学生团队协作能力,通过小组讨论、分工合作完成项目任务。

情感态度价值观目标:1. 激发学生对计算机视觉领域的学习兴趣,培养探索精神。

2. 培养学生严谨的科学态度,注重实验数据和结果的分析。

3. 增强学生的社会责任感,认识到技术对社会发展的积极作用。

本课程针对高年级学生,具有较强的实践性和应用性。

结合学生特点,课程目标注重培养学生的动手实践能力和团队合作精神。

在教学过程中,教师应关注学生个体差异,提供针对性的指导,确保学生能够达到预定的学习成果。

通过本课程的学习,使学生能够掌握图像处理技术,为今后从事相关领域的研究和工作打下坚实基础。

二、教学内容1. 图像处理基础知识:图像基本概念、图像处理常用算法。

- 教材章节:第一章 图像处理基础- 内容:图像的表示、图像滤波、边缘检测等。

2. 车牌识别技术原理:车牌检测、字符分割、字符识别。

- 教材章节:第二章 车牌识别技术- 内容:车牌定位、车牌区域提取、字符分割与识别算法。

3. 图像处理软件应用:使用OpenCV、MATLAB等软件进行车牌识别。

- 教材章节:第三章 图像处理软件应用- 内容:软件基本操作、车牌识别功能实现。

4. 车牌识别编程实践:设计并实现车牌识别程序。

- 教材章节:第四章 编程实践- 内容:Python编程、OpenCV库使用、车牌识别算法实现。

5. 车牌识别应用案例分析:分析实际应用场景,了解车牌识别技术的应用。

- 教材章节:第五章 应用案例分析- 内容:车牌识别在交通、安防等领域的应用案例。

数字图像处理纸牌识别课程设计

数字图像处理纸牌识别课程设计

适用标准文案课程设计课程名称 ___数字图像办理 ______题目名称 ______纸牌辨别 ________学生学院 ______ ________专业班级 __ ___学号 __ ________学生姓名 ____ _ _______指导教师 _____ _ 曹江中 _______一、目(1)、在 VC++境下翻开、示一幅牌(猜中有牌)。

(2)、将供给的几幅片中的牌行分和,要求:a、判断出是那种型(共四:桃,梅花、黑桃、方片);b、出点数( 1、2⋯10);c:将上述的果出。

二、设计目的经过设计,以C++为工具,实现数字图像办理。

会用数字图像办理知识对图像进行加强,如全局阈值,对图像进行旋转,边沿检测,对图像进行平移,截取图像特点并会用简单的模板般配方法般配判断图片内容。

学会使用 FMC。

三设计内容。

( 1)基本思想为:对图片进行中值滤波去除噪声,对图像进行全局阈值办理,用锐化模板检测,纸牌边沿,左方开始丈量每个点当遇到纸牌边沿时灰度为255,此时记下像素距离,进而对获得纸牌水平地点,同理得图片竖直距离,对图片进行平移,并截取左上角的特点,对特点进行基本办理,如二值化。

逐个加载模板,进行般配,般配原理为特点于模板同样像素的个数,如个数很高则般配成功,进而辨别纸牌。

( 2)在VC下成立FMC平台。

使用DIB 类办理 bmp格式文件。

工程名为 pokeridentyfy。

CPokeridentyfyview.中包的DIB类有CDIB m_dib;CDIB mid_boader;CDIB boaer_crectCDIB cutmask;CDIB forcut;CDIB masknumber;CDIB masktype;用于寄存,办理和显示图片。

制作菜单每个关于图像办理功能,一个按键调用一个办理函数,也可一个按键调用多个办理函数。

菜单及其功能以下列图翻开图像的代码为功能为大开所办理图像:void CPokeridentifyView::OnOpenimage(){// TODO: Add your command handler code herestatic char szFilter[]="BMP文件(*.bmp)|*.bmp||"; //定义过滤文件的种类CFileDialog dlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);//定义文件对话框对象CString filename;int ret=dlg.DoModal(); //运转翻开文件对方框if(ret==IDOK){filename=dlg.GetFileName(); //获得所选择图像的路径m_dib.LoadFromFile(filename); //加载图像if(!m_dib.m_bLoaded)//判断能否加载图像成功{AfxMessageBox(" 图像打不开 ");return;}mid_boader.LoadFromFile(filename); //加载图像if(!mid_boader.m_bLoaded)//判断能否加载图像成功{AfxMessageBox(" 图像打不开 ");return;}boaer_crect.LoadFromFile(filename); //加载图像if(!boaer_crect.m_bLoaded)//判断能否加载图像成功{AfxMessageBox(" 图像打不开 ");return;}cutmask.LoadFromFile("TTcut.bmp"); //加载图像if(!cutmask.m_bLoaded)//判断能否加载图像成功{AfxMessageBox(" 图像打不开 ");return;}forcut.LoadFromFile(filename); //加载图像if(!forcut.m_bLoaded)//判断能否加载图像成功{AfxMessageBox(" 图像打不开 ");return;}masknumber.LoadFromFile("1.bmp"); //加载图像if(!masknumber.m_bLoaded)//判断能否加载图像成功masktype {AfxMessageBox(" 图像打不开 ");return;}masktype.LoadFromFile("111.bmp"); //加载图像if(!masktype.m_bLoaded)//判断能否加载图像成功{AfxMessageBox(" 图像打不开 ");return;}}翻开一图片后为:中值滤波的代码为:void CPokeridentifyView::OnMidiamaskImage(){//TODO: Add your command handler code hereif(!m_dib.m_bLoaded){AfxMessageBox(" 图像还翻开,请先翻开图像!");return;}//获得图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);double mid[9];for(j=3/2;j<nh-3/2;j++)for(i=3/2;i<nw-3/2;i++){double result=0;int k,h;for(k=0;k<3;k++)//k行 h 列for(h=0;h<3;h++){mid[k*3+h]=m_dib.m_pdata[(j-k)*nw+i-h];int ii,jj,tempmid;double sweep;for(ii=0;ii<8;ii++){tempmid=ii;for(jj=ii;jj<=8;jj++){if(mid[jj]<mid[tempmid])tempmid=jj;}sweep=mid[ii];mid[ii]=mid[tempmid];mid[tempmid]=sweep;}result=mid[4];if(result>255)result=255;if(result<0)result=0;}ptemp[j*nw+i]=result;}memcpy(m_dib.m_pdata,ptemp,nw*nh);m_dib.UpdateData();memcpy(mid_boader.m_pdata,ptemp,nw*nh);mid_boader.UpdateDatadup();delete[]ptemp;//刷新屏幕Invalidate();}调用后结果为:全局门限的代码中先计算图像的直方图,以一个点(一般去中间值)把直方图分红两份,分别计算两部分的灰度均值,m1与 m2,由 (m1+m2)/2 获得新的阈值与灰度切割点,知道新阈值与旧的阈值相差不到。

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

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

基于数字图像处理的车牌识别系统基于数字图像处理的车牌识别系统言经官电气学院电子112摘要:车牌识别系统(License Plate Recognition 简称LPR)技术基于数字图像处理,是智能交通系统中的关键技术,同时他的发展也十分迅速,已经逐渐融入到我们的现实生活中。

文章介绍了车牌识别系统的意义、图像去噪处理以及图像二值化方法,并通过仿真试验模拟了图像处理的过程。

本文所做的工作在于前期的图像预处理工作。

本次设计着重在于图像识别方面, 中心工作都为此而展开,文中没有进行车牌的定位处理,而是采用数码相机直接对牌照进行正面拍照,获取原始车牌图像。

之后利用Matlab编程对图片进行了大小的调整、彩色图片转化成灰度图片、图片去噪、以及图片二值化等工作。

其中,去噪与二值化是关系图像识别率的关键。

关键字:车牌识别系统;图像预处理;字符识别;Matlab;去噪;二值化引言智能交通系统(ITS)是当今世界交通管理体系发展的必然趋势,而作为智能交通系统中的重要组成部分之一的车牌自动识别技术,目前已被广泛应用于城市道路监控、高速公路收费与监控、小区与停车场出入口管理、公安治安卡口等场合,成为研究的热点。

伴随我国国民经济的高速发展,国内高速公路、城市道路、停车场建设越来越多,对交通控制,安全管理的要求也日益提高。

因此迫切需要采用高科技手段,对违法违章车辆牌照进行登记, 在这种情况下,作为信息来源的自动检索,图像识别技术越来越受到人们的重视。

车牌识别系统的出现成为了交通管制必不可少的有力武器。

1 车牌识别系统的目标利用计算机等辅助设备进行的自动汽车牌照自动识别就是在装备了数字摄像设备和计算机信息管理系统等软硬件平台的基础之上,通过对车辆图像的采集,采用先进的图像处理、模式识别和人工智能技术,在图像中找到车牌的位置,提取出组成车牌号码的全部字符图像,再识别出车牌中的文字、字母和数字,最后给出车牌的真实号码。

国外的车牌识别研究始于80 年代,90 年代始已有不少成套的产品出现。

数字图像处理纸牌识别课程设计

数字图像处理纸牌识别课程设计

...课程设计课程名称___数字图像处理______ 题目名称______纸牌识别________ 学生学院______ ________专业班级__ ___学号__ ________学生姓名____ _ _______指导教师_____ _ 曹江中_______一、设计题目纸牌图)。

有中(1)、在VC++环境下实现打开、显示一幅纸牌图(设计资料:(2)、将提供的几幅图片中的纸牌进行分类和识别,要求a、判断出是那种类型(共四类:红桃,梅花、黑桃、方片);b 、检测出点数(1、2⋯10);c:将上述检测的结果输出。

的二、设计目,通过设计,以C++为工具,实现数字图像处理。

会用数字图像处理知识对图像进行增强,截取图像特征并会用简单的模,边缘检测,对图像进行平移转如全局阈值,对图像进行旋板匹配方法匹配判断图片内容。

学会使用FMC。

三设计内容。

(1)基本思想为:对图片进行中值滤波去除噪声,对图像进行全局阈值处理,用锐化模板检测,为255,此时记下像素纸牌边缘,左方开始测量每个点当碰到纸牌边缘时灰度距离,从而对得到纸牌水平位置,同理得图片竖直距离,对图片进行平移,并截取左上角的特征,对特征进行基本处理,如二值化。

逐一加载模板,进行匹配,匹配原理为特征于模板相同像素的个数,如个数很高则匹配成功,从而识别纸牌。

(2)在VC下建立FMC 平台。

使用DIB 类处理bmp 格式文件。

工程名为pokeridentyfy 。

CPokeridentyfyview. 中包的DIB 类有CDIB m_dib;CDIB mid_boader;CDIB boaer_crectCDIB cutmask;CDIB forcut;CDIB masknumber;CDIB masktype;用于存放,处理和显示图片。

制作菜单每个对于图像处理功能,一个按键调用一个处理函数,也可一个按键调用多个处理函数。

菜单及其功能如下图打开图像的代码为功能为大开所处理图像:void CPokeridentifyV iew::OnOpenimage(){// TODO: Add your command handler code herestatic char szFilter[]="BMP 文件(*.bmp)|*.bmp||"; //定义过滤文件的类型CFileDialog dlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);// 定义文件对话框对象CString filename;int ret=dlg.DoModal(); //运行打开文件对方框if(ret==IDOK){filename=dlg.GetFileName(); //获取所选择图像的路径m_dib.LoadFromFile(filename); //加载图像if(!m_dib.m_bLoaded) //判断是否加载图像成功{AfxMessageBox(" 图像打不开");return;}mid_boader.LoadFromFile(filename); //加载图像if(!mid_boader.m_bLoaded) //判断是否加载图像成功{AfxMessageBox(" 图像打不开");return;}boaer_crect.LoadFromFile(filename); //加载图像if(!boaer_crect.m_bLoaded) //判断是否加载图像成功{AfxMessageBox(" 图像打不开");return;}cutmask.LoadFromFile("TTcut.bmp"); //加载图像if(!cutmask.m_bLoaded) //判断是否加载图像成功{AfxMessageBox(" 图像打不开");return;}forcut.LoadFromFile(filename); //加载图像if(!forcut.m_bLoaded) //判断是否加载图像成功{AfxMessageBox(" 图像打不开");return;}masknumber.LoadFromFile("1.bmp"); //加载图像if(!masknumber.m_bLoaded) //判断是否加载图像成功masktype {AfxMessageBox(" 图像打不开");return;}masktype.LoadFromFile("111.bmp"); //加载图像if(!masktype.m_bLoaded) //判断是否加载图像成功{AfxMessageBox(" 图像打不开");return;} }打开一图片后为:中值滤波的代码为:void CPokeridentifyV iew::OnMidiamaskImage(){// TODO: Add your command handler code hereif(!m_dib.m_bLoaded){AfxMessageBox(" 图像还打开,请先打开图像!");return;}//获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);double mid[9];for(j=3/2;j<nh-3/2;j++)for(i=3/2;i<nw-3/2;i++){ double result=0;int k,h;for(k=0;k<3;k++)//k 行h 列for(h=0;h<3;h++){mid[k*3+h]=m_dib.m_pdata[(j-k)*nw+i-h];int ii,jj,tempmid;double sweep;for(ii=0;ii<8;ii++){tempmid=ii;for(jj=ii;jj<=8;jj++){if(mid[jj]<mid[tempmid])tempmid=jj;}sweep=mid[ii];mid[ii]=mid[tempmid];mid[tempmid]=sweep;}result=mid[4];if(result>255)result=255;if(result<0)result=0;}ptemp[j*nw+i]=result;}memcpy(m_dib.m_pdata,ptemp,nw*nh);m_dib.UpdateData();memcpy(mid_boader.m_pdata,ptemp,nw*nh);mid_boader.UpdateDatadup();delete[]ptemp;//刷新屏幕Invalidate(); }调用后结果为:全局门限的代码中先计算图像的直方图,以一个点(一般去中间值)把直方图分成两份,分别计算两部分的灰度均值,m1 与m2,由(m1+m2)/2 得到新的阈值与灰度分割点,知道新阈值与旧的阈值相差不到。

第15章 纸币识别系统的设计 数字图像处理课件

第15章 纸币识别系统的设计 数字图像处理课件
第十五章 纸币识别系统的 设计
LOGO
15.1 纸币识别系统的应用背景
彩色复印技术用途广泛,技术也日益精湛。有的复印效果可以 以假乱真。为了防止先进的复印技术被用于复制纸币,需要复印机自 动判断并拒绝复印纸币。
所以,这项应用只需要识别纸币图像,而不需要识别纸币的其 他属性, 例如金属条,纸质等。另外,我们不用考虑变形的纸币图 像识别,因为变形的纸币没有造假价值。
LOGO
15.3 纸币识别预处理
实际要处理的图像和图15.1有一定差别,图像可以倾斜,有背景 干扰,有多种纸币等。本章附节的程序中提供了另外一种提取矩形区 域的方法。
(a) 有倾斜角度的待识别图像
(b) 有背景干扰的待识别图像
LOGO
15.4 纸币识别项目代码说明
项目目的:读入已经提取好的特征库(fet文件),然后对输 入的图像先定位,后比对,最后输出是否含纸币。 主要数据结构及宏定义 主要变量 程序流程描述 MoneyJudge 的流程描述
LOGO
15.2 基于匹配的识别技术
在图像中寻找特征目标的方法教图像匹配。从匹配方法上,可 以区别为全局匹配及特征匹配。 1.全局模版匹配
R 1
R越大,说明 f和 g的相似性越大。因为R 刻画了 f,g之间的相 关性。
LOGO
LOGO
LOGO
LOGO
1的匹配方法是特征匹配,图像的特征包括幅度、直方
图、频率系数、点线几何特征、颜色特征等。匹配时仍然可以采用计 算待识别特征与标准特征相关性的方法。特征匹配法由于大大降低了 计算相关性的运算量,变速度大幅度提高, 但是如果某一特征被噪 音干扰,会大大降低识别准确率。在纸币识别系统中,我们利用颜色 特征进行预匹配,然后再使用模板匹配进行精确识别,达到速度与准 确度的均衡。

基于数字图像处理的车牌识别系统设计

基于数字图像处理的车牌识别系统设计

基于数字图像处理的车牌识别系统摘要汽车的数量的日渐增多,目前,城市的交通情况受到了人们极大的关注,怎样进行有效的交通管理便成为了人们关注的重点。

针对此问题,人们利用新的科学技术,不断努力研发出了各种交通道路监视、管理系统等。

这些系统,通过使用车辆检测装置对过往的车辆进行检测,对相关的交通数据进行提取,是为了达到监控、管理和指挥交通的目的。

车牌识别系统现已经在高速公路、城市十字交通路口和停车场等项目中拥有着不可替代的地位。

本设计使用数字图像处理方法,来解决车牌识别的问题。

通过数字图像处理技术,对原始汽车图像进行处理,通过对图像的预处理、车牌定位、字符分割和字符识别四部分进行处理,最终得到车牌识别的字符。

本设计的图像预处理是把汽车图像通过灰度化、二值化、边缘检测等操作,转变成易于定位的图像;车牌定位是首先利用边缘检测和形态学处理对车牌进行预定位,之后利用Radon变换倾斜矫正车牌,最后进行精确定位剪切车牌;字符分割是通过投影法进行字符的切分,然后利用双线性插值算法对字符进行归一化的处理;字符识别是将归一化之后的字符和建立好的模板字符库进行逐一比对,通过找差值来实现字符的匹配。

本设计的算法是在MATLAB2017b上进行了仿真和测试,可以较好的识别出车牌号码。

关键词:图像处理,车牌识别,边缘检测,MATLABLicense plate recognition system based on digital imageprocessingAbstractThe number of cars is increasing day by day. At present, people pay great attention to the traffic situation of the city. How to carry out effective traffic management has become the focus of people's attention. In response to this problem, people have made continuous efforts to develop various traffic road monitoring and management systems by using new science and technology. These systems, through the use of vehicle detection devices to detect the passing vehicles, extract the relevant traffic data, in order to achieve the purpose of monitoring, management and command of traffic. License plate recognition system now has an irreplaceable position in expressway, urban cross traffic intersection and parking lot projects.This design uses digital image processing method to solve the problem of license plate recognition. Through the digital image processing technology, the original vehicle image is processed. Through the image preprocessing, license plate positioning, character segmentation and character recognition, the characters of license plate recognition are finally obtained. The image preprocessing of this design is to transform the automobile image into the image which is easy to locate through the operation of grayscale, binarization, edge detection, etc.; the license plate location is to use the edge detection and morphological processing to pre locate the license plate, then use Radon transform to tilt and correct the license plate, and finally carry out the accurate location and cutting of the license plate; the character segmentation is to cut the characters through the projection method Then, the bilinear interpolation algorithm is used to normalize the characters. Character recognition is to compare the normalized characters with the established template character library one by one, and to match the characters by finding the difference. The algorithm of this design is simulated and tested on matlab2017b, which can recognize the license plate number better.Keywords: Image processing, license plate recognition, edge detection, MATLAB目录1 绪论 (1)1.1 研究背景及意义 (1)1.2 车牌识别系统现状 (1)1.2.1 国内外研究现状 (1)1.2.2 车牌识别技术的应用情况 (3)1.2.3 车牌识别技术的难点 (3)1.3 本文研究内容与结构安排 (4)2 车牌识别系统设计 (5)2.1图像预处理 (5)2.1.1图像灰度化 (5)2.1.2二值化 (7)2.1.3中值滤波 (7)2.1.4边缘检测 (8)2.1.5数学形态学处理 (8)2.2 车牌定位 (10)2.2.1车牌预定位 (11)2.2.2车牌倾斜校正 (12)2.2.3车牌精确定位及剪切 (13)2.3 字符分割 (14)2.3.1传统车牌字符分割算法 (14)2.3.2基于先验知识约束的垂直投影分割算法 (15)2.3.3字符归一化 (16)2.4 字符识别 (17)3 车牌识别系统开发与性能检验 (11)3.1车牌识别系统开发 (20)3.1.1系统开发软件 (20)3.1.2系统操作界面 (20)3.2车牌识别系统运行过程 (21)3.2.1进一步优化设计 (23)3.3车牌识别系统的分析 (23)总结 (25)致谢 (26)参考文献 (27)1绪论1.1研究背景及意义近些年,私家车的需求数量迅速上升,城市交通设施的快速发展无法跟上车辆的增加,而大规模交通设施的大力发展也解决不了现有的交通拥挤问题,由于被限制的城市空间和政策资金的有限,道路基础设施的建设,受到了严重的制约,所以发展现代智能交通系统,是一个迫切的问题。

数字图像处理-汽车牌照自动识别要点

数字图像处理-汽车牌照自动识别要点

数字图象处理题目:汽车牌照自动识别学院:计算机科学与信息学院专业:_______网络工程_______目录1 实验目的 (1)2 实验原理和方法 (1)3 实验内容和步骤 (1)3.1 牌照定位 (1)3.2 牌照字符分割 (2)3.3 牌照字符识别 (2)4 实验数据 (2)4.1 源程序 (2)4.2 运行结果 (7)4.2.1 牌照定位 (7)4.2.2 牌照字符分割 (9)4.2.2 牌照字符识别 (10)1 实验目的1.分析汽车牌照的特点,正确获取整个图像中车牌的区域,并识别出车牌号。

2.将图像预处理、分割、分析等关键技术结合起来,理论与实践相结合,提高图像处理关键技术的综合应用能力。

2 实验原理和方法牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。

其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。

某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。

一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。

当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。

牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。

3 实验内容和步骤为了进行牌照识别,需要以下几个基本的步骤:a.牌照定位,定位图片中的牌照位置;b.牌照字符分割,把牌照中的字符分割出来;c.牌照字符识别,把分割好的字符进行识别,最终组成牌照号码。

3.1 牌照定位自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。

首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。

利用MATLAB做车牌识别系统

利用MATLAB做车牌识别系统
《数字图像处理》 课程设计说明书
题 目:
车牌号识别
成 绩:
时 间: 2013 年 5 月 20 日至 2013 年 6 月 8 日
一、目的与要求 1.1 本课题的设计目的及意义 车牌识别系统的主要任务是分析和处理摄取到的复杂背景下的车辆图像,定位分 割牌照,最后自动识别汽车牌照上的字符,车牌识别是利用车辆牌照的唯一性来 识别和统计车辆,它是以数字图像处理、模式识别、计算机视觉等技术为基础的 智能识别系统。在现代化交通发展中车牌识别系统是制约交通系统智能化、现代 化的重要因素,车牌识别系统应该能够从一幅图像中自动提取车辆图像,自动分 割牌照图像,对字符进行正确识别,从而降低交通管理工作的复杂度。车牌识别 系统将获取的车辆图像进行一系列的处理后,以字符串的形式输出结果,这样不 但数据量小,便于存储,操作起来也更容易,因此车牌识别系统的便捷性是人工 车牌识别所不能比拟的,它蕴藏着很大的经济价值和发展空间,对车牌识别技术 的研究是非常有的意义的。在车牌识别系统中最为重要的两个技术是车牌定位和 车牌字符识别,这两个技术的好坏直接影响到整个车牌识别系统的实时性和准确 性。国内外己有不少学者对车牌定位技术做了大量的研究,但在实际的应用中还 没有一个有效可行的方法,如由于车辆抖动造成车牌图像的歪斜、由于污迹和磨 损造成车牌字符的模糊、由于光照不均造成车牌图像的模糊等都会或多或少影响 到车牌定位的准确度。针对以上实际情况,很多学者开始在鉴于车牌图像本身特 征的基础上研究车牌定位技术,并先后提出了一些有效的定位方法,以减小种种 主、客观因素对车牌定位准确度的影响。然而智能交通的不断发展使得对车牌定 位系统有了更高的要求,主要表现在系统的实时性和准确性。
三、总体方案设计 3.1 系统框架结构和工作流程
汽车牌照识别(LPR)系统通过引入数字摄像技术和计算机信息管理技术,采 用先进的图像处理、模式识别和人工智能技术,通过对图像的采集和处理,获得 更多的信息,从而达到更高的智能化管理程度。在 LPR 系统产品的性能指标中, 识别率和识别速度难以同时提高其中原因既包括图像处理技术不够成熟,又受到 摄像设备计算机等性能的限制。因此,研究高速准确的定位与识别算法,是当前 的主要任务。

车牌图像处理课程设计

车牌图像处理课程设计

车牌图像处理课程设计一、课程目标知识目标:1. 学生能理解车牌图像处理的基本概念,掌握图像处理的基本原理;2. 学生能掌握车牌识别中图像预处理、特征提取、字符分割和识别等关键技术;3. 学生能了解车牌图像处理在现实生活中的应用,提高对技术与社会关系的认识。

技能目标:1. 学生能运用图像处理软件对车牌图像进行预处理,包括图像增强、去噪等;2. 学生能通过编程实现对车牌特征的提取,并进行字符分割和识别;3. 学生能运用所学知识解决实际问题,设计简单的车牌识别系统。

情感态度价值观目标:1. 学生通过学习车牌图像处理,培养对图像处理技术的兴趣和热情;2. 学生在团队协作中,学会分享和交流,培养合作意识和团队精神;3. 学生了解车牌识别技术在交通安全、治安管理等领域的应用,增强社会责任感和法制观念。

课程性质分析:本课程为信息技术学科,结合图像处理技术,注重理论知识与实际应用的结合,以提高学生的实践操作能力和解决问题的能力。

学生特点分析:本课程面向高年级学生,他们在前期的学习中已具备一定的编程基础和图像处理知识,对新技术充满好奇心,具备较强的自主学习能力。

教学要求:1. 结合学生特点和课程性质,注重理论与实践相结合,提高学生的实际操作能力;2. 激发学生兴趣,引导学生主动探究车牌图像处理技术;3. 培养学生的团队协作能力和创新精神,使其具备解决实际问题的能力。

二、教学内容1. 图像处理基础理论:- 数字图像处理的基本概念;- 图像增强、去噪和边缘检测等预处理技术;- 常用图像处理算法及其原理。

2. 车牌识别关键技术:- 车牌定位与提取;- 车牌字符分割;- 车牌字符识别算法;- 车牌识别系统的设计与实现。

3. 实践操作与案例分析:- 使用图像处理软件进行车牌图像预处理;- 编程实现车牌特征提取、字符分割和识别;- 分析实际案例,了解车牌识别技术在生活中的应用。

4. 教学内容安排与进度:- 第一周:图像处理基础理论,学习数字图像处理基本概念和预处理技术;- 第二周:车牌识别关键技术,学习车牌定位、字符分割和识别算法;- 第三周:实践操作与案例分析,动手实践车牌图像处理和识别;- 第四周:总结与展示,展示作品,交流学习心得。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计课程名称___数字图像处理______ 题目名称______纸牌识别________ 学生学院______ ________专业班级__ ___学号__ ________学生____ _ _______指导教师_____ _江中_______一、设计题目(1)、在VC++环境下实现打开、显示一幅纸牌图(设计资料中有纸牌图)。

(2)、将提供的几幅图片中的纸牌进行分类和识别,要求:a、判断出是那种类型(共四类:红桃,梅花、黑桃、方片);b、检测出点数(1、2…10);c:将上述检测的结果输出。

二、设计目的通过设计,以C++为工具,实现数字图像处理。

会用数字图像处理知识对图像进行增强,如全局阈值,对图像进行旋转,边缘检测,对图像进行平移,截取图像特征并会用简单的模板匹配方法匹配判断图片容。

学会使用FMC。

三设计容。

(1)基本思想为:对图片进行中值滤波去除噪声,对图像进行全局阈值处理,用锐化模板检测,纸牌边缘,左方开始测量每个点当碰到纸牌边缘时灰度为255,此时记下像素距离,从而对得到纸牌水平位置,同理得图片竖直距离,对图片进行平移,并截取左上角的特征,对特征进行基本处理,如二值化。

逐一加载模板,进行匹配,匹配原理为特征于模板相同像素的个数,如个数很高则匹配成功,从而识别纸牌。

(2)在VC下建立FMC平台。

使用DIB类处理bmp格式文件。

工程名为pokeridentyfy。

CPokeridentyfyview.中包的DIB类有CDIB m_dib;CDIB mid_boader;CDIB boaer_crectCDIB cutmask;CDIB forcut;CDIB masknumber;CDIB masktype;用于存放,处理和显示图片。

制作菜单每个对于图像处理功能,一个按键调用一个处理函数,也可一个按键调用多个处理函数。

菜单及其功能如下图打开图像的代码为功能为大开所处理图像:void CPokeridentifyView::OnOpenimage(){// TODO: Add your command handler code herestatic char szFilter[]="BMP文件(*.bmp)|*.bmp||"; //定义过滤文件的类型CFileDialog dlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);//定义文件对话框对象CString filename;int ret=dlg.DoModal(); //运行打开文件对方框if(ret==IDOK){filename=dlg.GetFileName(); //获取所选择图像的路径m_dib.LoadFromFile(filename); //加载图像if(!m_dib.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;}mid_boader.LoadFromFile(filename); //加载图像if(!mid_boader.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;}boaer_crect.LoadFromFile(filename); //加载图像if(!boaer_crect.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;}cutmask.LoadFromFile("TTcut.bmp"); //加载图像if(!cutmask.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;}forcut.LoadFromFile(filename); //加载图像if(!forcut.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;}masknumber.LoadFromFile("1.bmp"); //加载图像if(!masknumber.m_bLoaded) //判断是否加载图像成功masktype {AfxMessageBox("图像打不开");return;}masktype.LoadFromFile("111.bmp"); //加载图像if(!masktype.m_bLoaded) //判断是否加载图像成功{AfxMessageBox("图像打不开");return;} }打开一图片后为:中值滤波的代码为:void CPokeridentifyView::OnMidiamaskImage(){// TODO: Add your command handler code hereif(!m_dib.m_bLoaded){AfxMessageBox("图像还打开,请先打开图像!");return;}//获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);double mid[9];for(j=3/2;j<nh-3/2;j++)for(i=3/2;i<nw-3/2;i++){ double result=0;int k,h;for(k=0;k<3;k++)//k行h列for(h=0;h<3;h++){mid[k*3+h]=m_dib.m_pdata[(j-k)*nw+i-h];int ii,jj,tempmid;double sweep;for(ii=0;ii<8;ii++){tempmid=ii;for(jj=ii;jj<=8;jj++){if(mid[jj]<mid[tempmid])tempmid=jj;}sweep=mid[ii];mid[ii]=mid[tempmid];mid[tempmid]=sweep;}result=mid[4];if(result>255)result=255;if(result<0)result=0;}ptemp[j*nw+i]=result;}memcpy(m_dib.m_pdata,ptemp,nw*nh);m_dib.UpdateData();memcpy(mid_boader.m_pdata,ptemp,nw*nh);mid_boader.UpdateDatadup();delete[]ptemp;//刷新屏幕Invalidate(); }调用后结果为:全局门限的代码中先计算图像的直方图,以一个点(一般去中间值)把直方图分成两份,分别计算两部分的灰度均值,m1与m2,由(m1+m2)/2得到新的阈值与灰度分割点,知道新阈值与旧的阈值相差不到。

用新的阈值进行二值化。

代码为:void CPokeridentifyView::OnAllthrImage(){// TODO: Add your command handler code hereif(!m_dib.m_bLoaded){AfxMessageBox("图像还打开,请先打开图像!");return;} //获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;double p[256];//存放直方图int throld=200,thrnew=210,m1=0,m2=0;//匹配时用180for(i=0;i<256;i++)p[i]=0;for(j=0;j<nh;j++)for(i=0;i<nw;i++){p[m_dib.m_pdata[j*nw+i]]++; //统计各像素总数}for(i=0;i<256;i++){p[i]=p[i]*1.0/(nw*nh); //直方图归一化}do{throld=thrnew;for(i=0;i<=throld;i++){m1=m1+p[i]*i;}for(i=throld+1;i<256;i++){m2=m2+p[i]*i;}thrnew=(m1+m2)/2;}while( abs(thrnew=throld)<5 );for(j=0;j<nh;j++)for(i=0;i<nw;i++){//对图像的第j行、第i列的象素的灰度信息进行判断,修改if(m_dib.m_pdata[j*nw+i]>thrnew)m_dib.m_pdata[j*nw+i]=255;elsem_dib.m_pdata[j*nw+i]=0;}//将修改的m_pdata的数据赋值给m_pDIBData,以显示修改的结果m_dib.UpdateData();memcpy(mid_boader.m_pdata,m_dib.m_pdata,nw*nh);mid_boader.UpdateData(); //刷新屏幕Invalidate();} 结果为:对图像进行边缘检测的代码为:void CPokeridentifyView::OnFindborderImage(){// TODO: Add your command handler code hereif(!m_dib.m_bLoaded){AfxMessageBox("图像还打开,请先打开图像!");return;}//获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);double mask[3][3]={-1,-1,-1,-1,8,-1,-1,-1,-1};for(j=3/2;j<nh-3/2;j++)for(i=3/2;i<nw-3/2;i++){double result=0;int k,h;for(k=0;k<3;k++)for(h=0;h<3;h++)result+=mask[k][h]*m_dib.m_pdata[(j-k)*nw+i-h];if(result>255)result=255;if(result<0)result=0;ptemp[j*nw+i]=result;}memcpy(m_dib.m_pdata,ptemp,nw*nh);m_dib.UpdateData();memcpy(boaer_crect.m_pdata,ptemp,nw*nh);boaer_crect.UpdateData();delete[]ptemp; //刷新屏幕Invalidate();}结果为:对图片进行测量并平移校正的代码为:void CPokeridentifyView::OnAutomoveImage(){// TODO: Add your command handler code hereif(!m_dib.m_bLoaded){AfxMessageBox("图像还打开,请先打开图像!");return;} //获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);int movedownj,moverighti;//移动像素距离int h,k;int temp;int nwmove[7],nhmove[7];intnwmlength[7]={600,600,600,600,600,600,600},nhmlength[7]={600,600,600,600,600,600,600};int bnw,bnh;for(i=0;i<7;i++){ nhmove[i]=nh*(i+1)/8;nwmove[i]=nw*(i+1)/8;}for(k=0;k<7;k++)//寻找水平距离{ for(i=0;i<nw;i++){ if(m_dib.m_pdata[nhmove[k]*nw+i]!=0){ nhmlength[k]=i;break;}}for(k=0;k<7;k++)//寻找竖直距离{ for(j=nh;j>0;j--){ if(m_dib.m_pdata[j*nw+nwmove[k]]!=0){ nwmlength[k]=nh-j;break;}}}for(i=0;i<6;i++)//水平测量量nhmlegnth的排列{ k=i;for(j=i;j<7;j++){ if(nhmlength[j]<nhmlength[k])k=j;}temp=nhmlength[k];nhmlength[k]=nhmlength[i];nhmlength[i]=temp;}bnw=nhmlength[0];for(i=0;i<6;i++)//竖直测量量nwmlength的排列{ k=i;for(j=i;j<7;j++){ if(nwmlength[j]<nwmlength[k])k=j;}temp=nwmlength[k];nwmlength[k]=nwmlength[i];nwmlength[i]=temp;}bnh=nwmlength[0];movedownj=-bnh;moverighti=-bnw;for(j=0;j<nh;j++)//进行平移for(i=0;i<nw;i++){ h=j-movedownj;k=i+moverighti;if(h>0&&h<nh&&k>0&&k<nw)ptemp[h*nw+k]=m_dib.m_pdata[j*nw+i];}memcpy(m_dib.m_pdata,ptemp,nw*nh);m_dib.UpdateData();memcpy(boaer_crect.m_pdata,ptemp,nw*nh);boaer_crect.UpdateDatadup();//刷新屏幕Invalidate();/***********************************/for(j=0;j<nh;j++)for(i=0;i<nw;i++){ h=j-movedownj;k=i+moverighti;if(h>0&&h<nh&&k>0&&k<nw)ptemp[h*nw+k]=forcut.m_pdata[j*nw+i]; }memcpy(forcut.m_pdata,ptemp,nw*nh);forcut.UpdateData();delete[]ptemp;}void CPokeridentifyView::OnRecreactImage(){// TODO: Add your command handler code hereif(!m_dib.m_bLoaded){ AfxMessageBox("图像还打开,请先打开图像!");return;} //获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;int h,k;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);int movedownj,moverighti;//移动像素距离int bnh;int moveup=500;for(j=0;j<nh;j++){if(m_dib.m_pdata[j*nw+50]==255){ moveup=j;break;}}bnh=moveup;movedownj=bnh;moverighti=0;for(j=0;j<nh;j++)for(i=0;i<nw;i++){h=j+movedownj;k=i-moverighti;if(h>0&&h<nh&&k>0&&k<nw)ptemp[h*nw+k]=m_dib.m_pdata[j*nw+i];}memcpy(m_dib.m_pdata,ptemp,nw*nh);m_dib.UpdateData();//刷新屏幕delete[]ptemp;Invalidate();}平移结果为:截取特权的代码为:void CPokeridentifyView::OnCrectGetfeature(){// TODO: Add your command handler code hereif(!cutmask.m_bLoaded){ AfxMessageBox("图像还打开,请先打开图像!");return;} //获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];memset(ptemp,0,nw*nh);int nw1=cutmask.GetDIBWidth();int nh1=cutmask.GetDIBHeight();for(j=nh-nh1;j<nh;j++){for(i=0;i<nw1;i++){ cutmask.m_pdata[(j-(nh-nh1))*nw1+i]=forcut.m_pdata[j*nw+i];}}cutmask.UpdateDatadup();Invalidate();}结果为:对特征进行处理并加载模板,进行匹配,并显示匹配结果的代码为:void CPokeridentifyView::OnFeatureRecognize(){// TODO: Add your command handler code hereif(!cutmask.m_bLoaded){ AfxMessageBox("图像还打开,请先打开图像!");return;} //获取图像宽和高int nw=cutmask.GetDIBWidth();int nh=cutmask.GetDIBHeight();int i,j;int k,h,t;BYTE * ptemp=(BYTE *) new BYTE[nw*nh];/**************************************************************************************/ //特征增强double p[256];int throld=200,thrnew=180,m1=0,m2=0;//匹配时用180for(i=0;i<256;i++)p[i]=0;for(j=0;j<nh;j++)for(i=0;i<nw;i++){ p[cutmask.m_pdata[j*nw+i]]++; //统计各像素总数}for(i=0;i<256;i++){ p[i]=p[i]*1.0/(nw*nh); //直方图归一化}do{ throld=thrnew;for(i=0;i<=throld;i++){ m1=m1+p[i]*i;}for(i=throld+1;i<256;i++){ m2=m2+p[i]*i;}thrnew=(m1+m2)/2;}while( abs(thrnew=throld)<5 );for(j=0;j<nh;j++)for(i=0;i<nw;i++){ //对图像的第j行、第i列的象素的灰度信息进行判断,修改if(cutmask.m_pdata[j*nw+i]>thrnew)ptemp[j*nw+i]=255;elseptemp[j*nw+i]=0;}memcpy(cutmask.m_pdata,ptemp,nw*nh);cutmask.UpdateData();Invalidate();//识别int cardnumber;float nuberthr=0.9;float typethr=0.92;CString filename;/*****************************************************************************/ //数字识别for(t=0;t<10;t++){switch(t){ case 0:filename="1.bmp";break;case 1:filename="2.bmp";break;case 2:filename="3.bmp";break;case 3:filename="4.bmp";break;case 4:filename="5.bmp";break;case 5:filename="6.bmp";break;case 6:filename="7.bmp";break;case 7:filename="8.bmp";break;case 8:filename="9.bmp";break;case 9:filename="10.bmp";break;} masknumber.LoadFromFile(filename); //加载图像if(!masknumber.m_bLoaded) //判断是否加载图像成功{ AfxMessageBox("匹配加载模板失败");return;}int nw2=masknumber.GetDIBWidth();int nh2=masknumber.GetDIBHeight();BYTE * maskptemp=(BYTE *) new BYTE[nw2*nh2];/*****************************************************/double p[256];int throld=200,thrnew=180,m1=0,m2=0;//匹配时用180for(i=0;i<256;i++)p[i]=0;for(j=0;j<nh2;j++)for(i=0;i<nw2;i++){ p[masknumber.m_pdata[j*nw2+i]]++; //统计各像素总数}for(i=0;i<256;i++){ p[i]=p[i]*1.0/(nw2*nh2); //直方图归一化}do{throld=thrnew;for(i=0;i<=throld;i++){ m1=m1+p[i]*i;}for(i=throld+1;i<256;i++){ m2=m2+p[i]*i;}thrnew=(m1+m2)/2;}while( abs(thrnew=throld)<5 );for(j=0;j<nh2;j++)for(i=0;i<nw2;i++){ //对图像的第j行、第i列的象素的灰度信息进行判断,修改if(masknumber.m_pdata[j*nw2+i]>thrnew)maskptemp[j*nw2+i]=255;elsemaskptemp[j*nw2+i]=0;}memcpy(masknumber.m_pdata,maskptemp,nw2*nh2);masknumber.UpdateData();Invalidate(); delete[] maskptemp;/****************************************************/int count;int flag=0;for(h=0;h<31;h++)for(k=0;k<5;k++){ count=0;for(j=0;j<20;j++)for(i=0;i<16;i++){ if(masknumber.m_pdata[j*nw2+i]==cutmask.m_pdata[(j+h)*nw+i+k])count++;}if((count*1.0/(nw2*nh2))>nuberthr){ cardnumber=t;flag=1;break;}}if(flag==1)break;}//检测花型int cardtype;/******************************************************************************************/ double type[4];for(t=0;t<4;t++){switch(t){case 0:filename="111.bmp";break;case 1:filename="222.bmp";break;case 2:filename="333.bmp";break;case 3:filename="444.bmp";break;}masktype.LoadFromFile(filename); //加载图像if(!masktype.m_bLoaded) //判断是否加载图像成功{ AfxMessageBox("匹配加载模板失败");return;}int nw3=masktype.GetDIBWidth();int nh3=masktype.GetDIBHeight();BYTE * typeptemp=(BYTE *) new BYTE[nw3*nh3];/*****************************************************/double p[256];int throld=200,thrnew=180,m1=0,m2=0;//匹配时用180for(i=0;i<256;i++)p[i]=0;for(j=0;j<nh3;j++)for(i=0;i<nw3;i++){ p[masktype.m_pdata[j*nw3+i]]++; //统计各像素总数}for(i=0;i<256;i++){ p[i]=p[i]*1.0/(nw3*nh3); //直方图归一化}do{throld=thrnew;for(i=0;i<=throld;i++){ m1=m1+p[i]*i;}for(i=throld+1;i<256;i++){ m2=m2+p[i]*i;}thrnew=(m1+m2)/2;}while( abs(thrnew=throld)<5 );for(j=0;j<nh3;j++)for(i=0;i<nw3;i++){ //对图像的第j行、第i列的象素的灰度信息进行判断,修改if(masktype.m_pdata[j*nw3+i]>thrnew)typeptemp[j*nw3+i]=255;elsetypeptemp[j*nw3+i]=0;} memcpy(masktype.m_pdata,typeptemp,nw3*nh3);masktype.UpdateData();Invalidate();delete[] typeptemp;int count;double cmp[5][35];for(h=0;h<35;h++)for(k=0;k<5;k++){count=0;for(j=0;j<16;j++)for(i=0;i<16;i++){ if(masktype.m_pdata[j*nw3+i]==cutmask.m_pdata[(j+h)*nw+i+k])count++; }cmp[k][h]=count;}type[t]=cmp[0][0];for(h=0;h<35;h++)for(k=0;k<5;k++){ if(cmp[k][h]>type[t])type[t]=cmp[k][h];} }cardtype=0;double tmepp=type[0];for(i=0;i<4;i++)if(type[i]>tmepp){ tmepp=type[i];cardtype=i;}//检测结果显示略}结果为:四、实验分析与总结由于图片的位置可能是斜的,所以需要对图片进行旋转;可以再以个函数调用多个以上函数依次完成上面操作。

相关文档
最新文档