切割数字及识别的程序初步成型Matlab环境下

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

切割数字及识别的程序初步成型(Matlab环境下)
最后的识别存在数组real中
######################7.2.13:18################################################# ####
Tic %计时
I = imread('C:\no1.bmp');
BW = im2bw(I,1);
%imview(BW);
for i=1:1:500,
b(i)=0;
c(i)=0;
end
b(1)=1;
c(1)=1; %使其不为0,
[L,NUM] = bwlabel(~BW,8); %工具箱里的连通域标号
for i1=1:1:NUM, %每个标号对应一个数字
real(i1)=10; %初始化存储识别出的数字的数组
end
for i1=1:1:NUM,
lie=0;
k=0;
t=0;
no1=0; %每个数字分为左上右上左下右下四块
no2=0; %用no1no2no3no4表示
no3=0; %用来存放处于该区域的黑色特征像素数目
no4=0;
for i=b(1):1:198, %图像列搜索通过b(1)节省搜索时间
for j=1:1:238, %相当于从上一个数字的第一个点开始搜索下一个数字if L(j,i)==i1 %节省了很多时间
k=k+1;
b(k)=i; %通过b(k)数组确定切割的列坐标
lie=j;
break;
end
end
if (k>1)&&((i-b(k))>0) %一旦出连通域马上跳出循环
break;
end
end
for j=1:1:238, %估计行搜索的范围
for i=b(1):1:b(k), %列基本固定
if L(j,i)==i1
t=t+1;
c(t)=j; %通过c(t)数组确定切割的行坐标
%break;
end
end
if (t>1)&&((j-c(t))>0)
break;
end
end
pic=BW(c(1):c(t),b(1):b(k)); %切割
imview(pic) %显示切割完的数字%%%%%%%%%%%%%%%数字特征%%%%%%%%%%%%%%%%%% c1=round((c(1)+c(t))/2); %把切割出来的数字分成四块
b1=round((b(1)+b(k))/2); %并且统计每块的像素数目
for j=c(1):1:c1,
for i=b(1):1:b1,
if BW(j,i)==0
no1=no1+1;
end
end
end
for j=c1:1:c(t),
for i=b(1):1:b1,
if BW(j,i)==0
no2=no2+1;
end
end
end
for j=c(1):1:c1,
for i=b1:1:b(k),
if BW(j,i)==0
no3=no3+1;
end
end
end
for j=c1:1:c(t),
for i=b1:1:b(k),
if BW(j,i)==0
no4=no4+1;
end
end
end
%%%%%%%%%%%%%数字识别%%%%%%%%%%%
W=b(k)-b(1); %切割得到的数字宽度
F=c(t)-c(1); %切割得到的数字长度
if W/F<0.5
real(i1)=1; %一的长宽比最小
elseif no1/no3<0.45
real(i1)=4;
elseif (no1/no3>0.3)&&(no1/no3<0.7)
if no1/no2<0.9
real(i1)=2;
else
real(i1)=3;
end
elseif no4/no2<0.65
real(i1)=7;
elseif no4/no2>1.6
real(i1)=5;
elseif (no1+no2)/(no3+no4)>1.2
real(i1)=6;
elseif (no1+no2)/(no3+no4)<1
real(i1)=9;
elseif no1/no2>1.1
real(i1)=8;
else
real(i1)=0;
end
end
t=toc %记下运算程序的时间~
数字:no1 no2 no3 no4 上下比左右比no1/no3 no3/n04 no2/no3 no1/no2
6: 210;207;168;166 @
1: 143:160:97:126 @
2: 101;181:205;167 # $ # $
7: 120;173;167;31 @
8: 206;147;168;186 $ $ @ 3: 111:100:196;188 # $ # #
4: 46:78:186:222 # #(ok)
9: 184:158:209:207 # $ $ $
0: 197:189:190:185 $ $ $ 5: 153:103:157:204 # $ $ #
no1左上no2右上no3左下no4右下@前比后大#后比前大$差不多
1/3 3比1大很多(<0.3)的只有4 4一下子就区别出来(0.3-0.7)是2 3 1/2 (<0.9)2 4/2 (<0.3)是7(>1.6)是5
上下比上比下大很多(>1.3)的只有6
下比上大很多(<0.9)的是9
差不多的是0 8 no1/no2 (>1.3)8
最后是0
原图
识别结果
ans =
Columns 1 through 12
4 3
5 5 1 1 2 4 4
6 1 6 Columns 13 through 24
0 3 5 5 4 6 8 0 5 8 0 5 Columns 25 through 36
7 5 6 8 7 5 5 9 9 6 7 5 Columns 37 through 48
8 9 4 5 1 9 4 8 3 5 6 8
Columns 49 through 56
5 1 1 2 3 5 5 5
分割效果。

相关文档
最新文档