OCR字符识别总结(一)

          从事OCR识别工作已经一个月了。从最初的懵懂,到如今略微有些见解,很感谢这一个月来自己的努力。现在总结一下,希望能够帮助到大家。

      公司针对的OCR识别背景是文本文字,虽然背景相对自然环境简单,但用户提供的图片数据纷繁多样。无论是模糊度还是噪声,直线与分数线的的提取,倾斜校正,字符的粘连拆分,相邻bounding的合并等技术难题,都需要一点点克服。公司要求有很大的准确率,但是图像处理受光照,相机,拍照水平等因素影响,一套算法很难适应所有图片。并且汉字识别相比英文字符识别难度更大,文本中的公式提取又是一个很大的技术难题等等。实习一个月来最大的感受是学校实验室与公司间的不同。在实验室,老师要求比较松,好多时间都被视频浪费掉了。实习一个月,感觉学的内容大于研究生一年级全年,差别明显。所以建议现在仍在读书的同学们,如果有机会,找个大公司去实习吧。

      好了,言归正传,说点正事。

      首先开发环境是:vs2013 与opencv 

     我们先贴出具体流程图:

                                                  

      主要从以下几个方面讲讲:

OCR预处理
1模糊度判断
2二值化
3连通域提取
4bounding框
5判断是否为合格二值化

1 模糊度判断

   通常来讲,图像的边缘梯度越大,也就是背景与前景的对比度越大,我们看起来就越清晰,图像处理就越方便。但是实际数据中我们看到的图片真是令人发指。有时候想想就这拍照水平还把图传上来,也是醉了。 但是没办法,用户是上帝嘛,为了解决问题,我们必须硬着头皮做呀! 对于模糊的图片,根据其特点, 我们首先利用sobel滤波器提取其边缘,再利用OTSU 大律法选择阈值进行二值化,最后根据二值化中有效信息的数量占总像素的之比来判断模糊度。 具体算法过几天我会贴出来。

2 图像二值化

      提到二值化,好多人不屑的漏出了一幅嫌弃的表情:“切,不就是两个值嘛,用得着还写个博客,装啥子呢!”。嘿嘿,请原谅俺的无聊。但是当你仔细研究OCR后,二值化的结果对最后的识别结果起着很关键的作用。不要小看哦!

      通常有全局二值化与局部二值化两种方式,由于图像受光照、阴影等因素影响,全局二值化就受到了很大的限制,我们放弃。 局部二值化根据像素点周围像素间的关系进行二值化,在opencv中用自适应二值化函数 adaptivethreshold ,具体实现原理我会单独发一篇博客写。 说句实话,我的第一周就用adaptivethershold试了很多参数,看了很多图片,最后确定了一个合理的阈值。(鉴于公司内代码,不在这里公布了) 当然一个阈值是搞不定了,我写了个函数主要是通过不同的阈值,在众多二值图中选择一个合适的。   其实一个思想就是 根据不同的模糊度来使用不同的阈值。

3 连通域提取

   这部分我们简单的讲 opencv里面函数是findContours,另外我们可以根据连通域的面积剔除小面积的连通域。具体实现细节过几天我会贴出

4 bounding框   

这里用到了opencv的boundingRect  得到了基于连通域的rect  数组


5 判断是否为合格的二值化图

 对于清晰的图像,通常以上那种方法可以解决问题。但对于噪声比较多的图片,我们得到的bounding框有很多都是没有用的,首先我们可以根据bounding框的规则来判断一个二值图是否为合适的二值图。当二值图不符合要求时,我们在对原图进行一次降采样,这样就将噪声去除了很多。然后在进行一次上次运算,这样算出来基本能够得到我们想要的结果。


6 接下来我们还要解决 字符粘连与分裂的情况以及直线提取、公式提取、根号提取、箭头提取等。具体解决方案我会慢慢讲解。

7 程序与图片我会慢慢贴出来,请大家慢慢等。  一起学习哈。




       


  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值