CSharp Archive

粘粘字符“花式分割”___loop principle

目前,我们已经知道当前验证码图片中是否包含loop,包含loop的验证码图片中的loop的坐标,验证码中字符笔画的宽度,验证码中有效字符的区域等关键因素,现在我们可以根据这些已知条件根据loop principle来初步定位分割点并进行初步的分割。

粘粘字符“花式分割”___Color Filling

Color Filling 的基本原理是以给定点为起点,将与该点连通的区域均变为指定的颜色。与“扫雷游戏”中翻开空白区域的原理一致,EMGU的cvFloodFill可以实现该功能,但因还不习惯使用cvInvoke函数,故用函数迭代来实现该功能。

粘粘字符“花式分割”___fix broken characters

在我们的研究对象中,有的字符在某些笔画上颜色相对较浅,这样导致二值化的图像会有缺口。这样的缺口最直接的影响就是让某些loop不完整,在后续的算法中不完整的loop会被涂为背景色,于是我们就会失去一个宝贵的loop分割依据,给整个分割大计造成重大损失。因此我们必须想办法将这些缺口修补起来,我将这项工作成为修补字符。

粘粘字符”花式分割”___原理概述

粘连字符分割仍然是本系列文章讨论的主题,而研究的对象仍然是不含干扰弧线的粘连字符组成的验证码,这些验证码由数字和大小写英文字母组成,不过这次的算法与上一系列文章有本质的差异。这一系列文章的分割算法原理基于字符特征,将特征明显的字符优先提取或分割出来,逐一攻破,直到验证码中的字符全部为单一字符。本文先概要介绍本次分割算法的主要原理和初步的效果图。​

用DrawLine与cvLine在位图中绘制直线

Graphics.DrawLine与CvInvoke.cvLine可以在位图中的指定位置绘制指定颜色的直线(C#) ,近期我刚学会使用,记录一下学习过程中遇到的“挫折”便于今后查阅。

《一种改进的并行细化算法》的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算法的原理公式基本相符,在此分享我的学习心得与公式推导过程,欢迎讨论。
Fork me on GitHub