5、对腐蚀膨胀后的图像进行Y方向上的区域选定,限定区域后的图像如图所示: 扫描方法:中间往两边扫
纵向扫描后的图像与原图像的对照,如图8所示:
6、对腐蚀膨胀后的图像进行X方向上的区域选定,限定区域后的图像如图9所示: 扫描方法:两边往中间扫
纵向扫描后的图像与原图像的对照,如图所示:
7. 调用i8=(iiXY~=1),使背景为黑色(0),字符为白色(1),便于后期处理。 背景交换后的图像如图11所示:
8. 调用自定义函数(字符获取函数)i9=getchar(i8),得到图像如图所示:
9、调用自定义的字符获取函数对图像进行字符切割,并把切割的字符装入一维阵列,切割 过程如图12所示:
10.调用以下代码,可将阵列word中的字符显示出来,如图13所示:
for j=1:cnum %cnum为统计的字符个数
subplot(5,8,j),imshow(word{j}),title(int2str(j)); %显示字符
end
可以看到,字符宽度不一致
11. 调用以下代码,将字符规格化,便于识别: for j=1:cnum word{j}=imresize(word{j},[40 40]); %字符规格化成40×40的 end 得到规格化之后的字符如图14所示:
12. 调用以下代码创建字符集:
code=char(‘由于作者水平有限书中难免存在缺点和疏漏之处恳请读批评指正,。’);
将创建的字符集保存在一个文件夹里面,以供匹配时候调用,如图15所示:
13. 字符匹配采用模板匹配算法:将现有字符逐个与模板字符相减,认为相减误差最小的现 有字符与该模板字符匹配。
也就是说,字符A与模板字符T1更相似,我们可以认为字符集中的字符T2就是字符A。 经模板匹配,可得字符信息如下: 由于读者书评有限书中难免存在缺点和纰漏之处,恳请读者批评指正。 效果如图16所示:
14、调用以下代码,将字符放入newtxt.txt文本:
new=[‘newtxt’,‘.txt’]; c=fopen(new,‘a+’); fprintf(c,‘%s ’,Code(1:cnum)); fclose(c); newtxt.txt文本内容如图17所示:
总结
1、算法具有局限性。对于左右结构的字符(如:川)容易造成误识别,“川”字将会被识别成三部分。当图片中文字有一定倾斜角度时,这将造成识别困难。
2、模板匹配效率低。对于处理大小为m×m的字符,假设有n个模板字符,则识别一个字符至
少需要m×m×n×2次运算,由于汉字有近万个,这将使得运算量十分巨大!此次字符识 别一共花了2.838秒。
3、伸缩范围比较小。对于受污染的图片,转换成二值图像将使字符与污染源混合在一起。
对于具体的图片,需反复选择合适的thresh进行二值化处理,甚至在处理之前必须进行各种滤波。
评论
查看更多