【问题标题】:Character segmentation of captcha image验证码图像的字符分割
【发布时间】:2014-07-31 18:33:26
【问题描述】:

我正在尝试破解验证码图像,但找不到分割字符的方法。

我有这张图片:

我应用了一些过滤器和阈值处理,得到了这张图片:

现在我需要分割图像以用于 SVM 或 ANN 等分类器。

问题是有些字符是连在一起的,我没办法把它们分开。

更多图片示例:

有人有办法分割图像并获取字符吗?

【问题讨论】:

  • CAPTCHA 是故意构建的,使您的努力变得困难。
  • 我实际上对如何删除示例中的曲线非常感兴趣。你用过类似腐蚀的东西吗?
  • @Kent 是的,我使用了腐蚀和膨胀的组合来实现这一点。

标签: image-processing machine-learning artificial-intelligence captcha image-segmentation


【解决方案1】:

这是一个最小化问题。棘手的部分是选择正确的指标,并使其快速。

  1. (手动)收集每个字符(字母或数字)的示例:每个字符至少有几个示例,手动清理

  2. 为适当数量的示例(几百个)解决验证码(手动)。这为您提供了一个测试数据集。

  3. 给定一张图片,尝试将其与示例字符的略微变形版本相匹配。最佳匹配可以认为是 K1 * 匹配中黑色图像中的白色区域 + K2 * 匹配中白色图像中的黑色区域 + K3 * 预期平均位置之间的距离之和最小的匹配字符和方向以及匹配中字符的位置和方向+ K4 * 字符的几何失真。这是最小化的指标。 K1..K4 值是合适的权重,您可以通过优化测试数据集的准确性来找到它们。

  4. 这是一个相当大的搜索空间:但是,由于字符间距相对规则,一次可以容纳一个字符,因此对字符的位置/失真进行简单的梯度下降(对于每个可能的角色)从预期的平均位置开始会找到一个很好的匹配,您可以选择最佳匹配作为您认为存在的角色,然后继续下一个。总计:6 x(26 个字母 + 10 个数字)梯度下降(大约)2 个位置 + 1 个倾斜 + 1 个比例 + 1 个拉伸维度。本质上,这将上述最小化问题分解为一次匹配一个字符的问题,独立但顺序。然后屏蔽找到的匹配项并重复下一个(相邻的)预期位置,直到您找到所有 6 个匹配项。根据您提供的示例,这将具有非常高的置信度,即正确答案的分数会比任何其他答案(每个字符单独)。

附:这可能很有趣:https://code.google.com/p/captchacker/

【讨论】:

  • 我不太了解您的方法,在第 3 项中,您描述了匹配给定图像的测试字符的一种方法,在此算法中,我是否需要在图片以找到最佳匹配?
【解决方案2】:

在我看来,您的字符具有最大笔画宽度。每当你发现一排比这个宽度更宽的黑色像素的水平行时,这表明这里有两个字符连接在一起。

所以

  • 对于每个比单个字符宽的连接 blob
    • 对于该 blob 的每一行
      • 查找该行中所有长度超过 MAX_STROKE_WIDTH 的不间断黑色像素水平线
      • 注意这些线中心的 X 坐标
    • 对找到的 X 坐标进行聚类
    • 在超过 N 个坐标的每个簇的中心分割块。
    • (您可以简单地垂直拆分,也可以尝试通过集群中的点拟合一条线)

【讨论】:

  • 非常好的主意,我会测试你,让你知道它的行为。谢谢。
  • 虽然这会与上面的“L”等具有较长水平分量的字符中断。
【解决方案3】:

您的方法对我来说似乎太自下而上。
字符的数量是恒定的,它们似乎是等距的
因此,只需按宽度分割图像,并确保检索到的特征是旋转/比例不变的。
然后可以将其馈入 ANN。我不明白为什么你必须分割字符。

【讨论】:

    猜你喜欢
    • 2016-01-22
    • 2011-08-29
    • 2014-12-03
    • 2018-11-18
    • 2019-08-26
    • 1970-01-01
    • 2022-10-17
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多