字符定位与字符分割

Abstract字符串识别最重要的是字符串定位以及字符串分割。例如做车牌识别,车牌字符定位和分割是最难的部分。对于一张字符串的图像,首先必须要定位出字符串的边界,然后分别对字符串进行单个切割,单个分割出来的字符再做识别。 下面就介绍字符串定位和字符串分割的方法。

1. 字符串定位
下面先看一幅手写字图片


我们需要做的是找出整个字符的边界然后对图片进行切割。
对于一张 M×N 大小的图片I,我们先对图片进行二值化处理。一张图片可以看成一个矩阵,这样这个矩阵里面的数字不是1就是0。我们需要对这个矩阵进行行扫描和列扫描。对于列扫描和行扫描统计一行或者一列中1的个数分别有如下公式:
colA =Mj=1Ij
rowA =Ni=1Ii
这样就统计出每一列或者每一行的1的个数。下图为统计图:

这下我们可以定义出左边界、右边界、上边界、下边界。这样就可以切割出字符串的边界如下图所示:


xfenge.m

function [ix,iy]=xfenge(goal1)
[m,n]=size(goal1);
ix(m)=0;
xx=0;j=1;
for  x=1:m
    for y=1:n
        if goal1(x,y)==1;
            xx=1;
        end
    end
    if xx==1
        ix(j)=x;
        j=j+1;
    end
end
ix=ix(1);


iy(m)=0;
xx=0;j=1;
for  x=m:-1:1
    for y=n:-1:1
        if goal1(x,y)==1;
            xx=1;
        end
    end
    if xx==1
        iy(j)=x;
        j=j+1;
    end
end
iy=iy(1);

yfenge.m

function [jx,jy]=yfenge(goal1)
[m,n]=size(goal1);
jx(m)=0;
xx=0;j=1;
for  y=1:n
    for x=1:m
        if goal1(x,y)==1;
            xx=1;
        end
    end
    if xx==1
        jx(j)=y;
        j=j+1;
    end
end
jx=jx(1);


jy(m)=0;
xx=0;j=1;
for  y=n:-1:1
    for x=m:-1:1
        if goal1(x,y)==1;
            xx=1;
        end
    end
    if xx==1
        jy(j)=y;
        j=j+1;
    end
end
jy=jy(1);

2. 字符分割
对于字符分割我们只看X方向,对于X我们可以看到很多断点,如下所示


我们可以统计出断点的位置来对不同字符进行分割,两个段点之间能进行确定一个字符。当然这个只是针对未粘连的字符,但是对于粘连字符断点可以设置一个小的阈值来当做断点。这个需要根据实际处理的字符串来判断。下面给出结果和代码:

I=imread('24.jpg');
figure(1)
imshow(I)
I=rgb2gray(I);
I=1-im2bw(I);
[ix1,iy1]=xfenge(I);
[jx1,jy1]=yfenge(I);
goal=I(ix1:iy1,jx1:jy1);
goal=[zeros(size(goal,1),2) goal zeros(size(goal,1),2)];
a=sum(goal);
label=find(a>0);
summ=0;
j=1;
for i=1:length(label)-1
    if (label(i+1)-label(i))>1
        KK(j)=label(i);
        JJ(j)=label(i+1);
        summ=summ+1;
        j=j+1;
    end
end
%figure(2)
JJ=[3 JJ];
KK=[KK size(goal,2)-2];
summ=summ+1;
figure(2)
for i=1:summ
    subplot(1,summ,i);
    II=goal(:,JJ(i)-2:KK(i)+2);
    II=imresize(II,[25,18]);
    imshow(II);
    hold on
end

车牌等字符串定位分割也可以采用类似的方法。

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值