手写数字识别系统之数字提取

引言

所谓数字分割就是指将通过二值化后的图像中的单个数字区域进行提取的过程。数字分割在数字识别中是一个必不可少的关键步骤,只有可以将数字进行准确的提取,才能将其一一识别。git

数字分割的方法

数字分割的方法至关多,主要有如下几种:算法

基于直方图的分割

此类方法就是对每行和每列黑色像素数进行统计,生成行直方图和列直方图,并采用某种阈值选取法分别对图像进行行列分割。

这种方法简单快速,对于按矩阵分布的规则数字的分割效果至关好,可是没法对不规则分布的数字进行分割,所以具备必定的局限性。

基于聚类的分割

聚类就是一个将数据集划分为若干组或类的过程,经过聚类使得同一组内的数据对象具备较高的类似度,而不一样组中的数据对象则是不类似的,因为数字图像的特征正好符合这类状况,于是可使用聚类来达到分割数字的效果。

其方法主要包括基于距离矩阵的聚类分割、k-均值聚类分割、模糊C-均值聚类分割

此类分割方法对数字的位置和大小没有限制,很是适合对位置和大小不规则的数字进行,但这种方法也有明显的不足,其中基于距离矩阵的聚类分割的计算量太大,尤为是对较大的图像,并且矩阵的占用空间至关多,所以在实际中没法使用。

而k-均值聚类分割、模糊C-均值聚类分割这些动态聚类虽然解决了这些问题,可是他们对于初始中心的选取极为敏感,虽然已经有各类对于中心选取得优化算法,可是其分类个数必须人为指定之一限制,最终使此类算法没法应用到实际的数字分割中。

基于二值图像连通区域标记的分割

二值图像连通区域标记是指将图像中符合某种连通规则的目标像素点用相同的标号表示出来。

所以这种方法很是适用于数字分割,由于每一个数字自己就是一个连通区域,并且这种方法不受分类数的限制,也适用于不规则分布的数字图像,实现简单快速,是一种至关好的分割方法。

而本文采用这种方法进行图像数字区域的分割,并对其进行了适当的改进。数组

到目前为止,二值图像连通区域标记方法主要有如下几类:优化

  • 两次扫描法
第一次扫描时, 将临时标号存储在一个与图像大小同样的二维数组中并造成等价对。

扫描结束时,经过某种搜索方法合并等价标号; 第二次扫描时, 用等价标号中最小的标号值赋予全部等价标号对应的像素点。
  • 双向反复扫描法:
第一次扫描时, 将每一个目标像素点标记为一个惟一的标号。

而后, 经过正向和反向反复扫描标号图像, 并在每一个像素的邻域内传播最小标号, 直到没有标号变化时为止。
  • 区域增加法
依次扫描二值图像的每个像素点。当找到某个未标记的目标像素点时, 将其压入堆栈并从该点开始反复标记其邻域, 直到堆栈为空。

考虑到数字分割仅仅是数字识别的一小步,若是在此处耗费太多的时间是至关可以不值得的,所以我采用速度相对较快的两次扫描法进行分割。code

而在两次扫描法中,合并等价标号是至关关键的一步,所以如何提升其合并速度是至关重要的,所以我主要采用以下改进的区域标记方法:对象

1. 构造一散列表,以标号做为关键字进行散列,说白了就是一数组。每一个元素指向一个双向链表,在链表中存储同一类别的像素点坐标。
2. 构造一个与图像一样大小的标记矩阵,用于存储每一个像素的分类标号
3. 初始化标记矩阵,并对图像第一行和第一列中的黑色像素进行标记,标记依次递增,并将相应的像素点位置保存到对应标记的散列表中。
4. 依次遍历其它各行各列,若当前像素点为黑色,则将其左前、左上角、正上、右上角这四个邻点中为黑色的像素的最小标记赋给当前点,并将这四点中为黑色的像素点归并到最小标记中,具体归并方法为:将四点中为黑色的像素点的原标记在散列表中所指向的像素链表与最小标记所在链表进行合并,并更新标记值。若其四个邻点中没有黑色像素点,那么当前点属于新类,建立一个新的标记值及相应的链表。
5. 若当前像素点为白色,则标为无效标记,继续第(4)步。

过滤无效区域

因为图像或多或少会存在些许噪声、无效块,一般在分割前须要作一些去噪、过滤非数字区域等工做,才能达到良好的分割效果。排序

考虑到数字自己具备细长等特色,所以不太适合中值滤波这些去椒盐噪声的算法。get

在这我采用最简单的离散去噪,仅仅取出一些离散噪声点,对于其它大块的无效区域,我经过统计分类样本的平均高度和宽度,设定合适的阈值进行过滤,并对明显高宽比不符合数字特征的区域也一一进行过滤。it

从实验结果中能够看到,这样的效果仍是至关好的。图像处理

实验结果

extract_digital_1 extract_digital_2

可是能够看到,因为是按行进行标记,所以标记好的顺序对样本区域的高度至关敏感,高低稍有不一样,分割后就会打乱其原始的顺序(尤为是针对那些本来排列较为规则的图像),若要按顺序分割,必须在处理后期,进行额外的排序操做才行,其具体步骤为:

  1. 将原先按标记散列的分类图像,转化为按区域图像中心的矩阵散列,此时生成的矩阵为稀疏矩阵,只有位于区域中心的点指向所对应的数字图像
  2. 按必定的阈值把矩阵按行切分,因为矩阵中的点角为稀疏,所以阈值较为好取,分割效果也较好,不须要过多的进行优化,就能达到很好的效果。
  3. 对每行的区域图像按中心位置的横坐标值进行排序,便可恢复原先的数字分布。其效果以下:

extract_digital_3

并且,区域标记的一大优势就是对数字分布极为不规则的图像的处理效果也是至关好的,能够很好的解决数字缠绕在一块儿,难以分割的问题,其效果以下:

extract_digital_4

总结

虽然使用区域标记法进行分割的效果已经至关使人满意,可是仍是存在一些不足的地方,好比说只能对具备良好连通性的数字进行分割,而对于那些具备断层的数字就没法实现较好的分割,为此,在分割前须要进行额外的断层修复,而断层修复的过程较为复杂,且修复效果有限。

所以,要实现具备高度通用性的数字分割算法,还有待进一步研究。

参考文献

若是想要了解更多数字图像处理相关的内容,能够去个人书柜看看,冈萨雷斯写的那本书数字图像处理仍是很是经典的。。


相关文章
相关标签/搜索