ImageProcess Archive

《一种改进的并行细化算法》的CSharp代码详解

《一种改进的并行细化算法》在上一篇文章中给出了其C#实现代码以及相关的实验结果,本文将详细讲述程序实现方法。虽然最终我所实现的《一种改进的并行细化算法》的实验结果的识别度不如zhang-suen算法,但这篇文献中提及的将消除规则制表然后查表的方法让我有如醍醐灌顶,这种查表法大大提高了并行细化算法的速度,而且它非常适合用在含模板处理的图像处理算法中。该算法实现后,再回头看我之前的写的滴水算法,分割算法等等代码里用的方法是多么的低端,小气,无档次。这,就是学习的过程吧。

《一种改进的并行细化算法》的CSharp实现

《一种改进的并行细化算法》是​中科院自动化所文字识别工程中心的一篇文献​,它对细化算法有如下描述: 虽然没有文献对细化需求做出明确的定义,但是一个好的细化算法应该保存下面的基本属性: 1)骨架应该是连通的且为一像素宽,接近图像的理想中轴线并保存原图像的形状。 2) 好的细化算法应该对噪声不敏感,尽可能的少产生假肢现象。 3) 好的细化算法应该具有较快的速度,较快的速度可以满足实时性的要求。

C#实现验证码中粘连字符分割(八)

在《C#实现验证码中粘连字符分割(七)》中提及,粘连字符分割的代码进行了更新。 不论如何,粘连字符分割的关键是有正确的谷点。本次代码更新时,更新了谷点的标准,同时获取上谷点与下谷点,然后再进行过滤。个人认为比较严谨的谷点过滤方案应该是上下谷点协同过滤,例如(1)上下谷点在宽度方向上的像素差在3个或5个以内优先作为谷点,(2)满足条件(1)后,在上谷点与下谷点中取较深的谷点作为最终的谷点。“较深”指的是谷点与领域在高度方向上的差距较大的点。

C#实现验证码中粘连字符分割(七)

5月份发布了《C#实现验证码中粘连字符分割》的一系列文章,初步构建了粘连字符分割的软件框架。近期经过进一步的学习,修正了之前发布的代码中的BUG,也稍稍提升了字符分割的准确度,我选取了9组原图与分割图的组合。

Sauvola算法公式推导

近日微博上有一位网友针对《Sauvola 实现图像二值化》一文问我有没有看懂Sauvola算法。 实话实说,我确实是不懂Sauvola算法的原理,在此之前,我也从来有没有尝试过想去看懂它。看到这位网友的评论后,我找到并学习了一些关于Sauvola算法的资料,目前仍然没有完全理解Sauvola算法的精髓,但我找到了《Sauvola 实现图像二值化》一文中所发布的源代码公式的来源,并验证了该源代码与Sauvola算法的原理公式基本相符,在此分享我的学习心得与公式推导过程,欢迎讨论。

C#实现验证码中粘连字符分割(六)

《C#实现验证码中粘连字符分割》发布了一系列文章,上一篇我们讲到了谷点的过滤。谷点过滤完成后,我们就可以根据最终确定的谷点来执行滴水算法,从而得到最终的分割路径。含四个字符的验证码图片可通过滴水算法得到3条分割路径,为方便程序统一处理,左侧与右侧边界会作为两条分割路径存储在路径集中。这样对于四个字符的图片而言,就有五条分割路径,每两条路径之间得到一个字符。

C#实现验证码中粘连字符分割(五)

在《C#实现验证码中粘连字符分割(四)》一文中我们说到了找含粘连字符验证码图片中谷点的方法,一般情况下,找到的谷点均大于我们需要分割的字符数。以我所收集的10张验证码图片为样本,用上一篇文章提到的寻找谷点的方法均找到的谷点的数量均大于待分割字符的数量,因此我们必须过滤掉一部分无效谷点。

C#实现验证码中粘连字符分割(四)

谷点的准确性直接决定着分割算法的成败,本文分享目前分割算法中暂用的谷点找寻方案。该谷点查找方案仅适用于二值化的骨架图像,首先我们将字符或图像的笔画方向发生变化的点定义为谷点,例如笔画原本趋势为下降,从某个点开始其趋势为水平或者上升,那么该点将被记录为谷点。

C#实现验证码中粘连字符分割(三)

以验证码图片为例,一般情况下我们关注的字符部分可能只占有原始图片的1/2甚至更少。而粘连字符分割算法中,有多个步骤需要遍历字符像素点,因此在开始执行分割算法之前,需要先统计字符部分的范围,后续遍历动作将在此范围内执行。

C#实现验证码中粘连字符分割(二)

在C#实现验证码中粘连字符分割(一)中,我分享了粘连字符分割算法的框架与完整的代码。其中滴水算法是整个分割算法的核心,而寻找正确的滴落起始点则是重中之重。本文和大家分享我曾经尝试过的寻找滴落起始点的方法与相关文献。
Fork me on GitHub