基于MATLAB的车牌分割及数字识别系统 - 毕业论文设计40论文41 -(4)

2019-07-13 17:59

4 基于MATLAB的算法设计与实现

4.1 MATLAB概述

MATLAB 语言是由Clever Moler博士于20世纪80年代开发的一种功能强、效率高、简单易学的数学软件,它是 MATrix LABoratory(矩阵实验室)的缩写,设计者的初衷是为了解决“线性代数”课程的矩阵运算问题。该语言具有四大特点:(1)具有丰富的工具箱,功能十分强大,支持的图像文件格式非常丰富,如 *.BMP、*.JPG、*.JPEG、*.GIF、*.TIF、*.TIFF、*.PNG、*.PCX、*.XWD、*.HDF、*.ICO、*.CUR 等,MATLAB7.1 提供了 20 多类图像处理函数,几乎涵盖了图像处理的所有技术方法,是学习和研究图像处理的人员难得的宝贵资料和加工工具箱;(2)具有超强的数值运算功能,超过500种数学、统计、科学以及工程方面的函数运算,并且简单快捷;(3)具有强大的数据可视化功能,高质量的图形;(4)具有开放式的构架和可延拓的特性,除了内部函数外,MATLAB主包文件和各种工具箱均可读可改,还可以加入自己的函数构成新的工具包。

MATLAB函数按其功能可分为:数值的分析、数值与符号的计算、工程与科学的绘图、控制系统的设计与仿真、数字图像的处理、数字信号的处理、通讯系统的设计与仿真、财务与金融工程、图像转换等。MATLAB在图形用户界面(GUI)的制作上做了较大的调整,使得即使在这方面有特殊要求的用户也可以得到相应的满足[23]。本文将给出MATLAB的图像处理工具箱中图像处理与分析的实际应用技术实例。

4.2 车牌分割算法设计

简而言之,投影法实质上是将车牌图像二值化后,将二值图像所有列的垂直投影做一个统计,再利用之前所得到的垂直投影直方图的期望与方差计算阈值,从而根据车牌的形状、车牌的纹理特征、字符特征、字符宽度以及相对位置,可以准确的分割出车牌的字符位置。但是基于投影分割法也有他一定的缺点,例如无法精确地分割出倾斜车牌的字符位置。

4.2.1 算法流程

开始车牌二值图像切除周边空白垂直投影从左往右查找,垂直投影白色像素点累计小于10的值的wide以水平区域(0,wide)剪切出判断是否为标准字符Y保存该字符N将剩余部分保存并覆盖原先图像N字符个数是否为7Y结束

图 4.1 车牌分割流程图

4.2.2 程序设计 主要代码: %ex1505 clc clear

filename='car.jpg';

I=im2gray(filename);%调用自编函数读取图像,并转化为灰度图像; tic %计时开始

[(min(I_edge))))*(I_edge-min(min(I_edge))); [I_edge,y1]=select(I_edge,(IM2,20); IM3=imdilate(IM2,SE);

%%%%%%%%%%%%%%%%%%投影以粗略估计车牌位置 p_(double(IM3),'h'); %调用projection函数 if(p_(double(IM3),'v'); %调用projection函数 if(p_v(1)>0) p_v=[0,p_v]; end

%%%%%% p___v=length(p_v)2;

%%%%%%%%%%%%%%%%%粗略计算车牌候选区 k=1;

for i=1:len__v

s=IM3(p_(mean(s))>0.1)

p{k}=[p_(x),p{i}(2)-(p{i}(2)-p{i}(1)+1-max(x)),... p{i}(3)+min(y),p{i}(4)-(p{i}(4)-p{i}(3)+1-max(y))]; p_center{i}=[fix((p{i}(1)+p{i}(2))2),fix((p{i}(3)+p{i}(4))2)]; p_ratio(i)=(p{i}(4)-p{i}(3))(p{i}(2)-p{i}(1)); end

%对上面参数和变量的说明:p为一胞元,用于存放每个图像块的左上和右下两个点的坐标;

%存放格式为:p{k}=[x1,x2,y1,y2];x1,x2分别为行坐标,y1,y2为列坐标

%p_center为一胞元,用于存放每个图像块的中心坐标,p_center{k}=[x,y];x,y分别为行,列坐标

%p_ratio为一矩阵,用来存放图像块的长宽比例 %%%%%%%%%%合并临近区域%%%%%%%

%如果有多个区域则执行合并 if k>1 n=0;

ncount=zeros(1,k); for i=1:k-1

%%%需要调整if条件中的比例 %%%需要调整

%检查是否满足合并条件

if(abs(p{i}(1)+p{i}(2)-p{i+1}(1)-p{i+1}(2))<=(p{i}(1),p{i+1}(1)); p{i+1}(2)=max(p{i}(2),p{i+1}(2)); p{i+1}(3)=min(p{i}(3),p{i+1}(3));

p{i+1}(4)=max(p{i}(4),p{i+1}(4)); %向后合并 n=n+1; ncount(n)=i+1; end end

%如果有合并,求出合并后最终区域 if(n>0)

d_ncount=ncount(2:n+1)-ncount(1:n); %避免重复记录临近的多个区域。 index=find(d_ncount~=1); m=length(index); for i=1:m

pp{i}=p{ncount(index(i))}; %重新记录合并区域的比例

pp_ratio(i)=(pp{i}(4)-pp{i}(3))(pp{i}(2)-pp{i}(1)); end

p=pp; %更新区域记录

p_ratio=pp_ratio; %更新区域比例记录 clear pp;clear pp_ratio; %清除部分变量 end

end

k=length(p); %更新区域个数 %%%%%%%%%%%%%%

束%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%根据区域比例判断是否为车牌区域%%%%%%%%%%%% m=1;T=0.6*max(p_ratio); for i=1:k

if(p_ratio(i)>=T&p_ratio(i)<20) p1{m}=p{i}; m=m+1; end end

p=p1;clear p1;

k=m-1; %更新区域数

%%%%%%%%%%%判定结束%%%%%%%%%%%%%%%%%%%%% toc %计时结束 clear edge_IM3;clear x; clear y; % 清空部分变量 %%%%%%%%%%%%%%%%显示 figure(1)

imshow(I);title('原始图像') figure(2)

imshow(IM2);title('腐蚀后图像') figure(3)

imshow(IM3);title('灰度膨胀后图像') %%%%%%%%%%%%%%%%%显示 figure(4) for i=1:k

subplot(1,k,i); index=p{i};

imshow(I(index(1)-2:index(2),index(3):index(4)));title('车牌图像')


基于MATLAB的车牌分割及数字识别系统 - 毕业论文设计40论文41 -(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国内外应急管理及应急通信发展概述

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: