文档介绍:要定位汽车牌照并识别其中的字符,我们采用Matlab平台提供的一些图像处理函数,以傅立叶变换通过字符模板与待处理的图像匹配为核心思想。基本方法如下:
1、读取待处理的图像,将其转化为二值图像。经试验,,杂点最少(如下图)。
I = imread(’’);I2 = rgb2gray(I);I4 = im2bw(I2, );
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、找出所有连通域中最可能是车牌的那一个。判断的标准是::1,其面积和周长存在关系:(×L×L)/(2× (+1)×L)2≈1/27,以此为特征,取metric=27*area/perimeter^2作为连通域的匹配度,它越接近1,: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(’%’,metric);
% 标记出匹配度接近1的连通域
if metric >= && metric <=
    centroid = stats(k).Centroid;
    plot(centroid(1),centroid(2),’ko’);
    % 提取该连通域所对应在二值图像中的矩形区域
    goalboundary = boundary;
    s = min(goalboundary, [], 1);
    e = max(goalboundary, [], 1);
goa