边缘检测在车牌识别中的应用Word格式.docx
- 文档编号:6203052
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:16
- 大小:132.13KB
边缘检测在车牌识别中的应用Word格式.docx
《边缘检测在车牌识别中的应用Word格式.docx》由会员分享,可在线阅读,更多相关《边缘检测在车牌识别中的应用Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
(2-4)
(2-5)
由于数字图像是离散的,偏导数
,
常用差分来代替,为计算方便,常用小区模板和图像卷积来近似计算。
2.2Roberts边缘检测算子
Roberts边缘检测算子是一种利用局部方差算子寻找边缘的算子。
差分值将在内插点[i+1/2,j+1/2]处计算。
Roberts算子是该点连续梯度的近似值,而不是所预期的点[i,j]处的近似值。
Roberts边缘检测算子近似计算
对x和y的偏导数:
(2-6)
(2-7)
2.3Sobel边缘检测算子
Sobel边缘算子的掩模模板是两个3×
3的卷积核。
采用邻域可以避免在像素之间内插点上计算梯度。
Sobel边缘算子强调中心像素的4个边邻域像素对其的影响,而削弱4个对角近邻像素的作用。
它是有方向性的,在水平方向和垂直方向上形成最强烈的边缘。
Sobel边缘检测算子近似计算
(2-8)
(2-9)
2.4Prewitt边缘检测算子
与使用Sobel算子的方法一样,图像中的每个点都用两个核进行卷积,取最大值输出。
它与Sobel算子不同,这一算子没有把重点放在接近模板中心的像素点。
Prewitt边缘检测算子近似计算
(2-14)
(2-15)
计算出
的值后,用下式计算
点处的梯度值:
(2-10)
计算出各点的值后,设定一个合适的阈值T,如果
处的
则认为该点的边缘点。
2.5Canny边缘检测算子
Canny算子的具体步骤为:
1)用高斯滤波器平滑图像;
2)用一阶偏导的有限差分来计算梯度的幅值和方向;
3)对梯度幅值应用非极大值抑制;
4)用双阈值算法检测和连接边缘。
完边缘检测功能结果,如图2-1~图2-4各种算法比较。
图2-1Prewitt算法边缘检测图图2-2Canny算法边缘检测图
图2-3Sobel算法边缘检测图图2-4Roberts算法边缘检测图
在边缘检测中,边缘定位能力和噪声抑制能力是一对矛盾体,有的算法边缘定位能力比较强,有的抗噪声能力比较好。
边缘检测算子都有各自的优缺点:
Roberts算子利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失部分边缘,由于没有经过平滑处理,因此不具备抑制噪声能力。
Sobel算子和Prewitt算子都是先对图像先做加权平滑滤波处理,然后再做微分运算,对噪声有一定抑制能力但不能完全排除检测结果出现虚假边缘。
Canny算子有抑制噪声能力,但会将一些高频边缘平滑掉。
3、结束语
文中讨论和比较了几种常用的边缘检测算子。
梯度算子计算简单,但精度不高,只能检测出图像大致的轮廓,而对于比较细的边缘可能会忽略。
Prewitt和Sobel算子比Roberts效果要好一些。
Canny算子的检测效果优于梯度算子,能够检测出图像较细的边缘部分。
不同的系统,针对不同的环境条件和要求,选择合适的算子来对图像进行边缘检测。
参考文献:
[1]陶涛、马静,浅谈中国智能交通系统的发展[J].青海交通科技,2007(6):
3-5.
[2]廖翔云,许锦标,龚仕伟.车牌识别技术研究[J].微机发展,2003(6):
32-35.
[3]姚敏.数字图像处理[M].北京:
机械工业出版社,2006.
[4]朱光忠、黄云龙、余世明,边缘检测算子在汽车牌照区域检测中的应用[J].计算机技术与发展,2006(3):
161-166.
[5]RafaelC.Gonzalez,RichardE.Woods著,数字图像处理(第二版)[M].阮秋琦、阮宇智译,电子工业出版社,2004
[6]吴传孙、邹杨德、周定康,二值化算法在车牌识别中的应用[J].计算机与现代化,2003.6:
44.
[7]刘锦、杨顺、余焕,Sobel算法在车牌识别系统中的改进与实现[J].计算机系统应用,2010(5):
209-211.
[8]刘怡光.车辆识别若干基础算法与技术研究[C].四川:
四川大学,2004.
[9]张美多,郭宝龙.车牌识别系统关键技术研究[J].计算机工程,2007(8):
186~188.
function[d]=main(jpg)
I=imread('
car.jpg'
);
figure
(1),imshow(I);
title('
原图'
I1=rgb2gray(I);
%将真彩色图像转换为灰度图像
figure
(2),subplot(1,2,1),imshow(I1);
灰度图'
figure
(2),subplot(1,2,2),imhist(I1);
灰度图直方图'
I2=edge(I1,'
robert'
0.08,'
both'
%高斯滤波器,方差为0.08
figure(3),subplot(2,2,1),imshow(I2);
robert算子边缘检测'
)
se=[1;
1;
1];
I3=imerode(I2,se);
%图像的腐蚀
subplot(2,2,2),imshow(I3);
腐蚀后图像'
se=strel('
rectangle'
[40,40]);
%构造结构元素,以长方形构造一个se
I4=imclose(I3,se);
%对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
subplot(2,2,3),imshow(I4);
平滑图像的轮廓'
I5=bwareaopen(I4,2000);
%从二进制图像中移除所有少于p像素的连接的组件(对象),产生另一个二进制图像
subplot(2,2,4),imshow(I5);
从对象中移除小对象'
[y,x,z]=size(I5);
%返回I5各维的尺寸,并存储在变量y、x、z中
myI=double(I5);
%换成双精度数值
%begin横向扫描
tic%计算tic与toc之间程序的运行时间
Blue_y=zeros(y,1);
%产生y*1的全0矩阵
fori=1:
y
forj=1:
x
if(myI(i,j,1)==1)
%如果myI(i,j,1)即myI图像中坐标为(i,j)的点为蓝色
%则Blue_y的相应行的元素white_y(i,1)值加1
Blue_y(i,1)=Blue_y(i,1)+1;
%蓝色像素点统计
end
end
[tempMaxY]=max(Blue_y);
%temp为向量white_y的元素中的最大值,MaxY为该值的索引(在向量中的位置)
PY1=MaxY;
while((Blue_y(PY1,1)>
=120)&
&
(PY1>
1))
PY1=PY1-1;
PY2=MaxY;
while((Blue_y(PY2,1)>
=40)&
(PY2<
y))
PY2=PY2+1;
IY=I(PY1:
PY2,:
:
%IY为原始图像I中截取的纵坐标在PY1:
PY2之间的部分
%end横向扫描
%begin纵向扫描
Blue_x=zeros(1,x);
%进一步确定x方向的车牌区域
fori=PY1:
PY2
if(myI(i,j,1)==1)
Blue_x(1,j)=Blue_x(1,j)+1;
PX1=1;
while((Blue_x(1,PX1)<
3)&
(PX1<
x))
PX1=PX1+1;
PX2=x;
while((Blue_x(1,PX2)<
(PX2>
PX1))
PX2=PX2-1;
%end纵向扫描
PX1=PX1-2;
%对车牌区域的校正
PX2=PX2+2;
dw=I(PY1:
t=toc;
figure(4),subplot(4,2,1),imshow(IY),title('
行方向合理区域'
figure(4),subplot(4,2,2),imshow(dw),title('
定位剪切后的彩色车牌图像'
imwrite(dw,'
dw.jpg'
%将图像数据写入到图像文件中
%读取
a=imread('
%读取图片文件中的数据
b=rgb2gray(a);
imwrite(b,'
车牌灰度图像.jpg'
figure(4);
subplot(4,2,3),imshow(b),title('
车牌灰度图像'
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);
%返回矩阵b的尺寸信息,并存储在m、n中。
其中m中存储的是行数,n中存储的是列数。
d=(double(b)>
=T);
%d:
二值图像
imwrite(d,'
车牌二值图像.jpg'
subplot(4,2,4),imshow(d),title('
车牌二值图像'
figure(4),subplot(4,2,5),imshow(d),title('
均值滤波前'
%滤波
h=fspecial('
average'
3);
%建立预定义的滤波算子,average指定算子的类型,3为相应的参数
d=im2bw(round(filter2(h,d)));
%转换为二值图像
均值滤波后.jpg'
figure(4),subplot(4,2,6),imshow(d),title('
均值滤波后'
%膨胀或腐蚀
se=eye
(2);
%eye(n)returnsthen-by-nidentitymatrix单位矩阵
[m,n]=size(d);
其中m中存储的是行数,n中存储的是列数
ifbwarea(d)/m/n>
=0.365%计算二值图像中对象的总面积
d=imerode(d,se);
elseifbwarea(d)/m/n<
=0.235%计算二值图像中对象的总面积
d=imdilate(d,se);
%实现膨胀操作
end
膨胀或腐蚀处理后.jpg'
figure(4),subplot(4,2,7),imshow(d),title('
膨胀或腐蚀处理后'
%寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(d);
%切割
figure(4),subplot(4,2,8),imshow(d),title('
切割前面空白部分后'
k1=1;
k2=1;
s=sum(d);
j=1;
whilej~=n
whiles(j)==0
j=j+1;
k1=j;
whiles(j)~=0&
j<
=n-1
k2=j-1;
ifk2-k1>
=round(n/6.5)
[val,num]=min(sum(d(:
[k1+5:
k2-5])));
d(:
k1+num+5)=0;
%分割
%再切割
%切割出7个字符
y1=10;
y2=0.25;
flag=0;
word1=[];
whileflag==0
[m,n]=size(d);
left=1;
wide=0;
whilesum(d(:
wide+1))~=0
wide=wide+1;
ifwide<
y1%认为是左侧干扰
[1:
wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[11widem]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):
2*round(m/3)],:
)));
iftwo_thirds/all>
y2
flag=1;
word1=temp;
%WORD1
[word2,d]=getword(d);
%分割出第二个字符
[word3,d]=getword(d);
%分割出第三个字符
[word4,d]=getword(d);
%分割出第四个字符
[word5,d]=getword(d);
%分割出第五个字符
[word6,d]=getword(d);
%分割出第六个字符
[word7,d]=getword(d);
%分割出第七个字符
[m,n]=size(word1);
word1=imresize(word1,[4020]);
%对图像做缩放处理,高40,宽20
word2=imresize(word2,[4020]);
word3=imresize(word3,[4020]);
word4=imresize(word4,[4020]);
word5=imresize(word5,[4020]);
word6=imresize(word6,[4020]);
word7=imresize(word7,[4020]);
figure(5),
subplot(3,7,8),imshow(word1),title('
车牌号为'
subplot(3,7,9),imshow(word2);
subplot(3,7,10),imshow(word3);
subplot(3,7,11),imshow(word4);
subplot(3,7,12),imshow(word5);
subplot(3,7,13),imshow(word6);
subplot(3,7,14),imshow(word7);
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'
%子程序:
(getword子程序)
function[word,result]=getword(d)
word=[];
y1=8;
y2=0.5;
whileflag==0
wide=0;
wide+1))~=0&
wide<
=n-2
[m1,n1]=size(temp);
y1&
n1/m1>
ifsum(sum(d))~=0
%切割出最小范围
elseword=[];
flag=1;
word=qiege(imcrop(d,[11widem]));
ifsum(sum(d))~=0;
elsed=[];
result=d;
%(切割子程序)
functione=qiege(d)
top=1;
bottom=m;
left=1;
right=n;
%init
whilesum(d(top,:
))==0&
top<
=m
top=top+1;
whilesum(d(bottom,:
bottom>
1
bottom=bottom-1;
whilesum(d(:
left))==0&
left<
n
left=left+1;
right))==0&
right>
=1
right=right-1;
dd=right-left;
hh=bottom-top;
e=imcrop(d,[lefttopddhh]);
%返回图像的一个裁剪区域
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 边缘 检测 车牌 识别 中的 应用
![提示](https://static.bingdoc.com/images/bang_tan.gif)