【数图大作业】基于模板匹配的文字识别(一)(思路+实现要点+预处理分析)

数图大作业我们组选了基于模板匹配的文字识别这个题目。老师提供了多行文字行列分割参考程序(CVI 5.0),我参照了例程的思路,在CVI2012环境下完成了预处理、行列分割以及模板匹配算法设计和代码编程。

题目要求

  1. 首先建立一个常用的汉字标准样本图像库:
    (1)利用“画图”程序建立200-300个字的汉字图库,将单个汉字的图像保存为 .bmp 文件;
    (2)将所有的样本图像均缩放为标准尺寸图像,例如 48 * 64 (width * height)。
    (3)将所有的样本图像变为二值图像,构成标准汉字模板库。
  2. 利用“画图”程序制作包含多个汉字的测试图像。
  3. 编写字符识别程序,采用基于模板匹配的方法完成对汉字的识别:
    (1)对测试图像进行二值化;
    (2)完成行、列分割;
    (3)将单个汉字图像与模板库中的字符图像逐一匹配,完成识别;
  4. 对多幅类似图像进行验证试验;
  5. 界面友好,操作方便,能单步演示识别过程,也可以“一键运行”,识别速度较快。
    :本次大作业在 CVI2012 环境下完成,利用 IMAQ6.0 库完成图像处理,如果采用其他图像处理库比如 opencv、halcon 等等,可以参考处理思路。

思路

思路

最终效果展示

演示视频

实现要点和预处理分析

1.模板图像和测试图像均由“画图”程序裁剪而成,注意模板图像和测试图像需要缩放至同一尺寸,方便进行匹配,这部分可以用 imaqResample 函数来完成。例如:
将 splitImage 图片缩放成 60 * 60 的大小,并保存至 dstImage 。
为了防止切割到汉字,可以先进行列分割和行分割,再进行缩放。

imaqResample (dstImage, splitImage, 60, 60, IMAQ_ZERO_ORDER, IMAQ_NO_RECT); 

2.为了方便后面的行列分割,图像预处理部分需要完成输入的测试图像的二值化和反色,经过二值化后的图像灰度值仅有 0 和 255 ,经过反色处理后白色像素点变成黑色像素点,即灰度值从 255 变成 0。二值化可以用 imaqThreshold 函数完成,反色可以用 imaqNor 函数完成。
二值化和反色处理代码如下:

imaqThreshold(binImage, srcImage, 100, 255, TRUE, 255); 
// 二值化:灰度值如果超过100,则替换为255,否则为0
imaqNor(binImage, binImage, binImage);  
// 反色:或非运算,第一个参数是输出图像,后面两个是参与运算的输入图像 

除了测试图像需要进行二值化处理,模板图像也要进行二值化处理。

3.行列分割均可以根据像素值来分割,对于白底黑字的图片来说,逐行逐列扫描,检测到黑色像素即可确定存在汉字或标点符号。
但要注意列分割必须对每一行进行,不能进行全局列分割。意思是,先逐行分析,然后行扫描,最后列扫描,而不能直接进行行扫描和列扫描,因为每列文字有可能对不齐。

4.模板匹配除了要完成文字识别,还要完成标点符号以及空格的识别。

5.一键运行功能的实现可以通过在 .uir 文件创建一个按钮,在按钮的回调函数中,调用行列分割以及模板匹配的函数。

GUI界面

UIR
功能键包括:

  • 打开一幅图像
  • 行分割
  • 列分割
  • 保存分割图像
  • 匹配输出
  • 一键运行(行分割+列分割+匹配输出)
  • 退出

资源下载

下载地址

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不雨_亦潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值