MATLAB大作业

发布 2020-02-25 08:54:28 阅读 1138

基于matlab识别**中的文字。

知识点:图像识别图像处理计算机视觉。

实验目的:以matlab为工具,识别**中的文字。

问题描述:交通是一个十分重要的问题,红绿灯上的摄像头可以辨别车主的身份。现在,我们是否能够用matlab设计一个图像识别的系统,通过车牌号的来识别相应的数字。

问题分析及模型建立:

第一步:确定车牌号的区域。

对于一张图像。

在matlab中,在处理图像元素时用(x,y,z)三坐标的形式表达的灰度集时,其中,x和y是空间坐标,z是f 在坐标(x,y)处的值,就可以表达图像在该坐标轴上的点。再将,将f(x,y)的数值简单地显示为一个矩阵,就可以定量地表达了一幅数值图像。

矩阵中的每个元素称为像素。

所以,如果我们想要截取一段车牌号的图像,我们就可以扫描图像每一个点的像素。然后我们进行恢复处理,算子边缘检测,腐蚀,闭操作,删除小对象得到。

我们就可以利用rgb的值找到白色区域的边界,然后我们利用边界,截取我们的原图像就可以得到我们所需要的车牌号的区域了。

第二步:进行文字的分割。

在进行分割之前,就需要将我们所获得的车牌号的区域的图像进行进一步的处理,突出我们需要的文字部分。

灰度处理。彩色的**占用的空间比较大,处理会花费很长的时间,先将**进行灰度处理。

二值化。再将**二值化,将**的256个灰度级强制减少到只有2个灰度级,更加方便了后续的文字识别识别。

均值滤波。均值滤波是对是对图像进行局部平均, 以平均值来代表该像素点的灰度值。矩形滤波器对这个二维矢量的每一个分量进行独立的平滑处理。获得一张比较干净清晰的图像。

腐蚀和膨胀。

腐蚀可以分割独立的图像元素,膨胀用于连接相邻的元素,更加利于图像的分割。

进行完图像的预处理,就可以开始图像的切割了。

首先进行边缘的切割,处理完后的图像为黑底白字。其中黑色为0,白色1为。这样我们就可以从四个边缘进行扫描,若行或者列像素之和0的话,就为背景,这样就可以继续向内推移,直到和不为0的位置为止。

这样就进行了边缘的切割。

接下来,先进行文字的切割,文字和字母、数字在长度和宽度上有较大的差别,所以需要单独的拿出来。因为号码是平铺过来的,所以我们进行列的扫描。先从最左边进行扫描,若列像素之和不为0的话,则说明有文字,直到和为0的时候停止。

但是如果扫描出来的宽度太小的话就说明背景可能有白色区域干扰。这时,应该将刚刚扫描出来的区域置黑,再次进行扫描,截取图像。同理,数字和字母可同样按着上面的方式扫描,截取。

截取后的图像。

模板的配对。

所有的文字数字和字母都截取下来后,我们需要将所得的**统一的量化为同样大小的图像方便比对。

统一量化后的图像。

完成了这部的操作之后,就需要建立一个小型的模板库。将车牌号常见的文字、十个数字和26个英文字母存储为上面同样大小的二值化**,并且以对应字符的名称命名。

将所有的模板放在一起,按照一定的顺序排列。然后,我们就可以调用我们已经切割好的**和模板内部的**进行相减,寻找差别最小的**进行匹配,这样就可以识别出车牌号上的字符了。

问题求解:matlab**:

主函数。function [d]=main(jpg)

close all

clci=imread(''读入车牌图像。

i1=rgb2gray(i);

i2=edge(i1,'roberts',0.15,'both');

se=[1;1;1];

i3=imerode(i2,se);

se=strel('rectangle',[25,25]);

i4=imclose(i3,se);

i5=bwareaopen(i4,2000);

figure(1),imshow(i5);title('从对象中移除小对象');

y,x,z]=size(i5);%图像以(y,x,z)表达灰度集,x,y为坐标,z为对应位置的值。

myi=double(i5);%转化为双精度,便于确定范围。

tic % 测定算法执行的时间,开始计时。

blue_y=zeros(y,1);

for i=1:y

for j=1:x

if(myi(i,j,1)==1)

% 寻找y轴方向的白色区域。

blue_y(i,1)= blue_y(i,1)+1; %是蓝色区域的则进行计数。

end end

end[temp maxy]=max(blue_y);%y方向车牌区域确定 temp(最多点数):所有行中,最多的累积。

py1=maxy;

while ((blue_y(py1,1)>=5)&&py1>1))

py1=py1-1;

end %y轴方向的上限。

py2=maxy;

while ((blue_y(py2,1)>=5)&&py2 py2=py2+1;

end %y轴方向的的下限。

iy=i(py1:py2,:,

%%%x方向。

blue_x=zeros(1,x);%进一步确定x方向的车牌区域。

for j=1:x

for i=py1:py2 %只需要扫描py1:py2 的部分,简化程序。

if(myi(i,j,1)==1)

blue_x(1,j)= blue_x(1,j)+1

end end

endpx1=1;

while ((blue_x(1,px1)<3)&&px1 px1=px1+1;

end %确定x轴的右边界。

px2=x;

while ((blue_x(1,px2)<3)&&px2>px1))

px2=px2-1;

end %确定x轴的左边界。

px1=px1-1;%对车牌区域的校正。

px2=px2+1;

dw=i(py1:py2-8,px1:px2,:)确定**的截取区域。

t=toc; %读取程序的运行时间。

a=imread(''读入已经截取好的图像。

a=size(a);

if length(a)==3

b=rgb2gray(a);

elseb=a;

endfigure(8);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); t 为二值化的阈值。

m,n]=size(b);

d=(double(b)>=t); d:二值图像。

imwrite(d,'2.车牌二值图像。jpg');

figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像')

figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前')

滤波。h=fspecial('**erage',3); 进行均值滤波。

imwrite(d,'4.均值滤波后。jpg');

figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后')

某些图像进行操作。

膨胀或腐蚀。

se=eye(2); eye(n)可返回一个2*2单位矩阵。

m,n]=size(d);%图像为二值图像,x,y为坐标。

if bwarea(d)/m/n>=0.365 %计算二值图像中对象的总面积。

d=imerode(d,se); 实现图形的腐蚀。

elseifbwarea(d)/m/n<=0.235

d=imdilate(d,se);%实现图像的膨胀。

endimwrite(d,'5.膨胀或腐蚀处理后。jpg');

figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后')

寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。

d=qiege(d); 截掉边界黑色的部分。

m,n]=size(d); 图像已经切割的图像的坐标。

figure,subplot(2,1,1),imshow(d),title(n)

k1=1;k2=1;

s=sum(d);

j=1;while j~=n

while s(j)==0

j=j+1;

end %扫过的地方全为黑色,则向右移动,直到不是停止。

k1=j; %确定截图的左边界。

while s(j)~=0 &&j<=n-1

j=j+1;

end %继续扫描,扫过的地方不全为黑色,向右移动,直到不是停止

k2=j-1; %确定截图的右边界。

if k2-k1>=round(n/6.5)

[val,num]=min(sum(d(:,k1+5:k2-5]))

d(:,k1+num+5)=0; %k1+num+5列的位置赋值为黑色,分割。

endend

再切割。d=qiege(d);

切割出 7 个字符。

y1=10;y2=0.25;flag=0;word1=

while flag==0

[m,n]=size(d);

left=1;wide=0;

while sum(d(:,wide+1))~0

wide=wide+1;

end扫过的地方不全为黑色,向右移动,直到不是停止。

if wide d(:,1:wide])=0; %将此片区域全部转化为黑色,继续进行切割。

d=qiege(d);

matlab大作业

matlab语言及应用。周一晚作业廖育州07010559 第一组程序。绘制选用潍柴发动机wd615.50时汽车行驶性能曲线图,ft ua图clear,clc 清除内存变量,清屏 n为发动机的转速。n 1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,...

MATLAB大作业

实验七图像的形态 算。一 实验目的。1.掌握图像的奇异值分解与合成。2.能够利用模板操作实现图像的腐蚀运算3.能够利用模板操作实现图像的膨胀运算4.掌握图像的开 闭运算。二 实验内容。1.读下面的程序,分析该程序要完成什么样的功能。a 1 2 1 2 3 2 1 2 1 u d v svd a nx...

MATLAB大作业

1.设计一个程序,要求用户用键盘输入10次,输入内容可以是数字 英文 汉字 或者其他文字或者符号。如果输入的是数字,则把存入一个数字数组当中 如果输入的是英文的字符,则存入一个英文字符数组当中 如果是其他字符,则存入一个字符串数组中。当10次内容都输入完毕后,先输出英文数组中的内容,然后输出字符串数...