Matlab在图像处理与目标识别方面实验-汽车牌照定位与字符识别.doc
文本预览下载声明
Matlab在图像处理与目标识别方面的应用实验 —— 二、汽车牌照定位与字符识别 收藏
Matlab在图像处理与目标识别方面的应用实验 —— 二、汽车牌照定位与字符识别
作者:林健(北京理工大学计算机科学技术学院)
指导教师:尚斐(北京理工大学医学图像实验室)
对于汽车牌照定位和数字识别,通过高通滤波,得到所有的边缘;对边缘细化,找出所有封闭的边缘;对封闭边缘求多边形逼近,在逼近后的所有四边形中,找出尺寸与牌照大小相同的,牌照被定位。对牌照区域中细化后的图形对象计算傅立叶描述子,用预先定义好的决策函数,对描述子进行计算,判断数字是几。
注意,由于BLOG功能的原因,这里无法显示图片。您可以下载Word原文档(包含m源文件和相关图片)。下载地址:
二、汽车牌照定位与字符识别
待处理的图像如下所示。图像整体比较清晰干净,车牌方向端正,字体清楚,与周围颜色的反差较大。
要定位汽车牌照并识别其中的字符,我们采用Matlab平台提供的一些图像处理函数,以傅立叶变换通过字符模板与待处理的图像匹配为核心思想。基本方法如下:
1、读取待处理的图像,将其转化为二值图像。经试验,采用门限值为0.2附近时车牌字符最为清楚,杂点最少(如下左图)。
I = imread(car.jpg);
I2 = rgb2gray(I);
I4 = im2bw(I2, 0.2);
2、去除图像中面积过小的,可以肯定不是车牌的区域。
bw = bwareaopen(I4, 500);
3、为定位车牌,将白色区域膨胀,腐蚀去无关的小物件,包括车牌字符(如下右图)。
se = strel(disk,15);
bw = imclose(bw,se);
4、此时车牌所在白色连通域已清晰可见,但在黑色区域以外,是一个更大的白色连通域,将车牌所在连通域包围了。有必要将其填充。
bw = imfill(bw,[1 1]);
5、查找连通域边界。同时保留此图形,以备后面在它上面做标记。
[B,L] = bwboundaries(bw,4);
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2),boundary(:,1),w,LineWidth,2)
end
6、找出所有连通域中最可能是车牌的那一个。判断的标准是:测得该车牌的长宽比约为4.5:1,其面积和周长存在关系:(4.5×L×L)/(2×(4.5+1)×L)2≈1/27,以此为特征,取metric=27*area/perimeter^2作为连通域的匹配度,它越接近1,说明对应的连通域越有可能是4.5:1的矩形。
% 找到每个连通域的质心
stats = regionprops(L,Area,Centroid);
% 循环历遍每个连通域的边界
for k = 1:length(B)
% 获取一条边界上的所有点
boundary = B{k};
% 计算边界周长
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));
% 获取边界所围面积
area = stats(k).Area;
% 计算匹配度
metric = 27*area/perimeter^2;
% 要显示的匹配度字串
metric_string = sprintf(%2.2f,metric);
% 标记出匹配度接近1的连通域
if metric = 0.9 metric = 1.1
centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),ko);
% 提取该连通域所对应在二值图像中的矩形区域
goalboundary = boundary;
s = min(goalboundary, [], 1);
e = max(goalboundary, [], 1);
goal = imcrop(I4,[s(2) s(1) e(2)-s(2) e(1)-s(1)]);
end
% 显示匹配度字串
text(boundary(1,2)-35,boundary(1,1)+13,...
metric_string,Color,g,...
FontSize,14,FontWeight,bold);
end
图示为找到的各个连通区域,中部被标记“○”的矩形匹配度为0.99,是最可能的区域。下边是由它确定的二值图像中的车牌区域:
7、将车牌图像反白处
显示全部