用连通域分析方法对字符分割(matlab源程序)



文献:

《复杂车辆图像中的车牌定位与字符分割方法》:

1.先搜索标记二值图像的所有连通域

2.根据连通域的形状和进邻连接等特征筛选,合并连通域。对于文档而言,连通域应该符合一定的高度,宽度以及相互间的比例。可以通过某种方法进行度量(根据文档特征),进行区域筛选合并。文中通过寻找波谷位置进行定位,接着以已有的车牌进行匹配。

《一种低质量车辆牌照的字符分割方法》

主流方法:基于投影+先验规则/滤波分析      无法分析倾斜,污损情况

         连通区域分析                    对字符粘连,断裂情况不佳

         机器学习方法                    HMM与上述两种方法结合

         自适应形态学      

文章方法:需要先验知识,和车牌的特征对车牌进行精确分割。特点:是两级的分割方法预分割和精细分割

实验:

用连通区域分析的方法对字符图像进行处理,首先二值化后,对图像开运算,去除细小的噪声,然后对图像中八领域方式连接的连通域进行标记,计算连通区域的框线特征,包括左上顶点坐标,长宽,依照这些数据对图像进行分割。除了i,j对字母的分割效果还是不错的。

源程序:

 clear all;clc;close all;
[fn pn fi]=uigetfile('*.*','choose a picture');
Img=imread([pn fn]);
[~,~,c]=size(Img);
if  c==1
    f2= ~im2bw(Img,graythresh(Img));
else 
    Img=rgb2gray(imread([pn fn]));
    f2= ~im2bw(Img,graythresh(Img));
end
f=f2;
f=bwareaopen(f,50);
% figure(3);imshow(f);
str=strel('square',2);
% f=imclose(f,str);
% str=strel('line',5,0);
 f=imdilate(f,str);
figure(3);imshow(f);




[L,num] = bwlabel(f,8);%标注二进制图像中已连接的部分
Feastats = regionprops(L,'basic');%计算图像区域的特征尺寸
Area=[Feastats.Area];%区域面积
b=[Feastats.BoundingBox];%[x y width height]字符的大小
sub=cell(1,num);%存储分割后的图像
figure(1);
%===============分割过程==============%
for i=1:num
    a=floor(b((i-1)*4+2));%b中字符的特性是按4个一组放的,前两个为左上顶点坐标,后两个为长宽。
     if a==0
         a=1;
    end
    e=b((i-1)*4+4);
    d=floor(b((i-1)*4+1));


     if d==0
         d=1;
     end
    g=b((i-1)*4+3);
    
    sub{1,i}=f2(a:a+e,d:d+g);
     subplot(1,num,i);imshow(sub{1,i});
end


 figure(2),imshow(f)
hold on
for k=1:num
    [r,c]=find(L==k);
    rbar=mean(r);
    cbar=mean(c);
    plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',10);
    plot(cbar,rbar,'Marker','*','MarkerEdgecolor','w');
end

同的投影算法比较,连通域对数字的分割效果更好。


你可能感兴趣的:(机器学习)