将图中的车牌号提取出来并且分割 [ 操作步骤: 顶帽去背景>>**提取边缘>>膨胀>>去除小对象>>得到车牌区域>>进一步分割**
clear,clc,close all;
f=imread(‘c5.jpg’);
imshow(f);
g=rgb2gray(f);
figure,imshow(g);
se=strel(‘disk’,20);
gth=imtophat(g,se); %顶帽操作
figure,imshow(gth);
e=edge(gth); %边缘提取
figure,imshow(e);
se=strel(‘line’,9,90);
ee=imerode(e,se);
figure,imshow(ee);
se=strel(‘disk’,18);
ed=imdilate(ee,se);
figure,imshow(ed);
eao=bwareaopen(ed,7000); %去除小对象
figure,imshow(eao);
[hs,ws]=find(eao==1);
a=min(hs);b=max(hs);
c=min(ws);d=max(ws);
carnumarea=gth(a:b,c:d);
figure,imshow(carnumarea);
bwcarnumarea=im2bw(carnumarea,0.3);
figure,imshow(bwcarnumarea);
bao=bwareaopen(bwcarnumarea,30); %去除小对象
figure,imshow(bao);
[hs2,ws2]=find(bao==1);
a1=min(hs2);b1=max(hs2);
c1=min(ws2);d1=max(ws2);
bc=bao(a1:b1,c1:d1-2);
bcb=imclearborder(bc); %去边框
figure,imshow(bcb);
[ss,~]=getSplitPic(bcb); %分割图像
for i=1:size(ss,2)
s=ss{i};
figure,imshow(s);
end
getSplitPic分割函数:
function [splitfs,points]=getSplitPic(bw)
%函数说明
%input:bw为需要分割的二值图
%output: splitfs 为元数据 分割好的图片都保存在splitfs中
% points 为分割好的坐标 a,b,c,d a:b,c:d
%right by Seven 2017.12.3
splitfs={};
points=[];
hs=sum(bw);
[,w]=size(bw);]=find(x);
c=1;d=1;i=1;
while(c<w)
while(hs(c)==0&&c<w)
c=c+1;
end
d=c;
while(hs(d)>0)
d=d+1;
end
if((d-c)>10)
x=bw(:,c:d-1);
[r,
a=min(r);b=max(r);
xi=x(a:b,:);
splitfs{i}=xi;
points=[points;a,b,c,d-1];
i=i+1;
end
c=d;
end
结果如下:[