数字图像处理--车牌识别

Matlab提取车牌信息

分析:

1)当我们得到带有汽车车牌号信息的图片时,会发现,大面积的背景都是需要去除的,此时,想到顶帽操作。

顶帽操作的作用:去背景,使白色边界更清晰。

顶帽操作作用对象是灰度图,首先把原图转化为灰度图后顶帽操作。

顶帽操作是原图减去开运算,开运算是先腐蚀后膨胀,被原图减去过之后,就是我们的目标部分。Strel()函数参数的选择根据即为顶帽操作的原理,参照标准为目标图像。

若目标图像上出现小坑洞说明值disk值太小;

若目标图像上出现光晕说明disk值取大了。

顶帽操作最终效果为:想要的部分很清晰,其他部分很少且小。

  1. 转换成二值图。去除小对象--边缘信息提取--去除小对象

轻微去除小对象后,提取边缘信息。再去除小对象。

提取边缘信息:汉字和数字的边缘信息丰富

经测试不进行边缘信息提取最终会发现有粘连,个人认为多调调去除小对象也是会得到目标图像的。建议进行边缘信息提取。

  1. 用短竖线进行腐蚀:数字竖线信息比较多,用短线腐蚀把周围小噪声腐蚀掉。
  2. 膨胀将车牌信息连成一块,在去除小对象。
  3. 通过找到车牌的行列信息,截取车牌。
  4. 结束。

 

%分析:要汽车车牌号,其他部分都是背景,去背景采用顶帽操作(原图-开运算(先腐蚀后膨胀))

clear,clc,close all;

f=imread('c4.jpg');

g=rgb2gray(f);%顶帽操作作用对象是灰度图

figure,imshow(g);

gth=imtophat(g,strel('disk',6));%顶帽操作去背景,strel以想要的东西为参照进行取值

%若得到的图出现小坑洞,说明值太小;出现光晕说明值太大;当想要的东西很清晰,零星的东西很少时,转换成二值图

% bw=im2bw(gth);figure,imshow(bw);

bw=im2bw(gth,0.3);figure,imshow(bw);%白色更明显

 

%去除小对象

bwao=bwareaopen(bw,20);%调制的时候注意目标部分不要受损

figure,imshow(cat(2,bw,bwao));

%PS:数字和汉字的边缘信息最多,进行边缘信息提取

bwedge=edge(bwao);figure,imshow(bwedge);

%再去除小对象

bwao=bwareaopen(bwedge,20);

figure,imshow(bwao),title('提取边缘信息再去除小对象');

 

%数字中的竖线信息最多,用小短线进行腐蚀,腐蚀掉非数字部分

bwerode=imerode(bwao,strel('line',5,90));

figure,imshow(bwerode),title('小短线腐蚀后的图像');

%通过膨胀使咱们的车牌连起来,再去除小对象

bwdilate=imdilate(bwerode,strel('disk',25));

figure,imshow(bwdilate),title('进行边缘提取后膨胀后的图像');

bwao=bwareaopen(bwdilate,20000);

figure,imshow(bwao),title('再一次去除小对象');

 

%最后通过找到车牌行列坐标,进行截取,然后就完成了呢。

[r,c]=find(bwao);

result=f(min(r):max(r),min(c):max(c));

figure,imshow(result);

数字图像处理--车牌识别_第1张图片

数字图像处理--车牌识别_第2张图片

数字图像处理--车牌识别_第3张图片

 

数字图像处理--车牌识别_第4张图片

 

figure,imshow(cat(2,bw,result));

PS:cat函数只能连接维度相同的图像

数字图像处理--车牌识别_第5张图片

你可能感兴趣的:(数字图像处理)