了解 OCR 的 Freeman 链码

2024-02-16

请注意,我确实在寻找问题的答案。我是not寻找一些源代码或一些学术论文的链接:我已经使用了源代码,并且我已经阅读了论文,但仍然没有弄清楚这个问题的最后部分......

我正在研究一些快速屏幕字体 OCRing,并且取得了很好的进展。

我已经找到基线,分离字符,将每个字符转换为黑白,然后绘制每个字符的轮廓,以便对其应用弗里曼链码。

基本上它是一个 8 连接的链码,如下所示:

  3  2  1
   \ | /
  4-- --0
   / | \
  5  6  7

因此,如果我有一个“a”,经过所有转换(包括转换为黑白),我最终会得到如下结果:

11110
00001
01111
10001
10001
01110

那么它的外部计数可能看起来像这样(我may在这里犯了一个错误,这是 ASCII 艺术轮廓,我的“算法”可能会得到错误的轮廓,但这不是我问题的重点):

 XXXX
X1111X
 XXXX1X
X01111X
X10001X
X10001X
 X111X
  XXX

在 X 后面,我得到链码,它是:

0011222334445656677

请注意,这是标准化的链码,但您始终可以像这样标准化链码:只需保留最小的整数。

(顺便说一句,有一个超级高效的实现来查找链码,您只需获取“X”的 8 个相邻像素,然后在 256 查找表中查找是否有 0,1,2,3,4, 5,6 或 7)

然而,我现在的问题是:从 0011222334445656677 链码中,我如何找到我有一个“a”?

因为,例如,如果我的“a”看起来像这样:

11110
00001
01111
10001
10001
01111  <-- This pixel is now full

那么我的链码现在是:0002222334445656677

但这也是一个“a”。

我知道这些链码的全部意义在于能够适应如此微小的变化,但我无法弄清楚我应该如何找到哪个字符对应于一个链码。

我已经走了那么远,现在我被困住了......

(顺便说一句,我不需要 100% 的效率,区分“0”与“O”或“o”之类的事情并不是真正的问题)


你需要的是一个函数d测量链码之间的距离。然后找到给定链码的字母就很简单了:

Input:

  • 标准化链码S可能的字母集(通常是 A-Z、a-z、0-9 等的 cain 代码)
  • 链码x需要检测且可能稍微变形的字母(链码与集合中的任何链码都不匹配)S)

该算法将迭代可能的链码集并计算距离d(x,si)对于每个元素。距离最小的字母将是算法的输出(识别出的字母)。

我建议遵循距离函数: 对于两个链码,将每个方向的长度差相加:d(x,si) = |x0-si0| + |x1-si1| + .. + |x7-si7|. x0是链码中0的数量x, si0是链码中0的数量si, etc.

一个例子可以更好地解释我的想法。下图中有字母8、B、D,第四个字母是一个稍微变形的8,需要识别。这些字母使用 Arial 书写,字体大小为 8。图像中的第二行放大了 10 倍,以便更好地看到像素。

我手动计算(希望正确)标准化链码是:

8:  0011223123344556756677
B:  0000011222223344444666666666
D:  00001112223334444666666666
8': 000011222223344556756666 (deformed 8)

长度差异(绝对)为:


direction | length         | difference to 8'
          | 8 | B | D |  8'|   8 |  B |  D |
----------+---+---+---+----+-----+----+-----
        0 | 2 | 5 | 4 |  4 |   2 |  1 |  0 |
        1 | 3 | 2 | 3 |  2 |   1 |  0 |  1 |
        2 | 3 | 5 | 3 |  5 |   2 |  0 |  2 |
        3 | 3 | 2 | 3 |  2 |   1 |  0 |  1 |
        4 | 2 | 5 | 4 |  2 |   0 |  3 |  2 |
        5 | 3 | 0 | 0 |  3 |   0 |  3 |  3 |
        6 | 3 | 9 | 9 |  5 |   2 |  4 |  4 |
        7 | 3 | 0 | 0 |  1 |   2 |  1 |  1 |
----------+---+---+---+----+-----+----+-----
                        sum   10 | 12 | 14 |

8'到链码的最小距离为8,因此算法将识别字母8。到字母的距离B并没有大多少,但这是因为变形后的8看起来几乎就像B.

该方法不是缩放不变的。我认为有两种选择可以克服这个问题:

  • 对于不同的字体大小,具有不同的归一化链码集
  • 一组大尺寸(例如 35x46 像素)的标准化链码,并将输入字母(需要识别)缩放到更大的尺寸。

我不太确定距离函数对于所有字母数字字母的集合是否足够好,但我希望如此。为了最大限度地减少识别字母时的错误,您可以包括其他特性(不仅是链码)进入分类步骤。同样,您需要距离测量——这次是针对特征向量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 OCR 的 Freeman 链码 的相关文章

  • 用于计算有向图上非循环路径数量的快速算法

    简而言之 我需要一个fast计算简单有向图中有多少条非循环路径的算法 By simple我的意思是没有自环或多重边的图 Apath可以从任何节点开始 并且必须在没有传出边的节点上结束 一条路径是acyclic如果没有边出现两次 我的图 经验
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • 基于 2 个输入的伪随机数生成器 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要根据 2 个输入值 X 和 Y 生成一个伪随机数 给定相同的 X 和 Y 值 我需要得到相同的结果 结果应介于 0 和 1 之间 含
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 测量数组的“无序”程度

    给定一个值数组 我想找到总 分数 其中每个元素的分数是数组中出现在其之前的具有较小值的元素的数量 e g values 4 1 3 2 5 scores 0 0 1 1 4 total score 6 O n 2 算法很简单 但我怀疑可以通
  • 将数字的各个数字部分相加/求和的最快方法

    不久前 我在数学论坛上看到一个问题 其中一个人正在讨论一遍又一遍地将数字中的数字相加 直到达到个位数 即 362 将变成 3 6 2 这将变成 11 然后 11 将变成 1 1 将变成 2 因此 362 将返回2 我写了一些很好的代码来得到
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 逐字遍历句子

    如何逐字遍历任何给定的句子 java中有内置函数吗 我不知道如何开始 像这样的事情 String sentence Your sentence here String words sentence split s splits by whi
  • 训练 tesseract 与 iPhone 一起使用

    我正在尝试在我的 iPhone 应用程序中使用 tesseract 2 04 只想检测数字 我在这里所做的首先是使用这篇文章交叉编译 tesseract 以生成 lib 文件http robertcarlsen net 2009 07 15
  • 如何使用networkx删除有向图中的所有相关节点?

    我不确定我的问题的正确术语是什么 所以我只会解释我想做的事情 我有一个有向图 删除节点后我希望所有独立相关的节点也被删除 这是一个例子 假设我删除节点 11 我希望节点 2 也被删除 在我自己的示例中 它们将是 2 以下的节点 现在也必须删
  • 如何确定字符串的最小公约数?

    我在面试时被问到以下问题 并被它难住了 我遇到的部分问题是要下定决心要解决什么问题 起初我并不认为这个问题在内部是一致的 但后来我意识到它要求你解决两个不同的问题 第一个任务是弄清楚一个字符串是否包含另一个字符串的倍数 但第二个任务是在两个
  • 如何计算一组字符串的最短唯一前缀?

    这是一个非常常见的算法命令行解析 给定一组预定义的长选项名称 计算唯一标识这些选项之一的最短前缀 例如 对于以下选项 help hostname portnumber name polymorphic 这将是输出 he ho por n p
  • 查找两个大小为 n 的数组中第 n 大数的算法

    我有这个问题 给定两个大小为 n 的排序列表 存储在数组中 找到 O log n 计算并集中第 n 大元素的算法 两个列表 我可以看到这里可能有一个技巧 因为它需要第 n 个最大的元素 并且数组的大小也是 n 但我不知道它是什么 我在想我可
  • 查找数组中 2 个缺失数字的最快方法

    这个问题的存在只是出于纯粹的好奇心 不是作业 找到在数组 1 n 中找到两个缺失数字的最快方法 因此 在相关帖子中 查找数字数组中缺失数字的最快方法 https stackoverflow com questions 2113795 qui
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • Haar级联正例图像大小调整

    我正在迈出第一步 为自定义对象识别创建 haar 级联 我花了时间获取大量数据并编写了一些预处理脚本以将视频转换为帧 我的下一步是裁剪感兴趣的对象 以创建一些积极的训练示例 我有几个问题 我确实在网上寻找答案 我有点困惑 我读到我应该致力于
  • std::__gcd 和 std::gcd 有什么区别?

    Many https www geeksforgeeks org stdgcd c inbuilt function finding gcd websites https codeforces com submissions Madiyar
  • 单词预测算法

    我确信有一篇关于此问题的帖子 但我找不到提出这个确切问题的帖子 考虑以下 我们有字典可供使用 我们收到了许多单词段落 我希望能够根据此输入预测句子中的下一个单词 假设我们有几个句子 例如 你好 我的名字是汤姆 他的名字是杰瑞 他去了没有水的
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 正则表达式等价

    有没有办法找出两个任意正则表达式是否等价 对我来说看起来很复杂的问题 但可能有一些 DFA 简化机制之类的 要测试等价性 您可以计算的表达式并进行比较

随机推荐

  • JavaScript for in 循环,但相反?

    采用具有 4 个属性的 JavaScript 对象 function Object this prop1 this prop2 this prop3 this prop4 var obj new Object 我使用 for in 循环来检
  • 播放 Json:将 Reads[T] 转换为 Reads[Seq[T]] 而不使用隐式

    我有一个Reads T 我想解析一个 Json 对象 它应该是一个数组T的 有没有简单的方法获得Reads Seq T without定义我的Reads T 隐含的 本质上 我正在寻找一个需要的函数Reads T 并返回Reads Seq
  • 理解 ngRepeat 'track by' 表达式

    我很难理解如何track byAngularJS 中 ng repeat 的表达有效 文档非常稀缺 http docs angularjs org api ng directive ngRepeat http docs angularjs
  • C# - 如何在没有 IDE/Visual Studio 的情况下编写程序? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在 Notepad 和 MonoDevelop 中仅使用 cs 文件而不是解决方案来制作 C 控制台应用程序 我从 CMD 编译代码 我
  • 为什么 DataFrame 中缺少分区键列

    我有一项工作 加载 DataFrame 对象 然后使用 DataFrame 将数据保存为镶木地板格式partitionBy方法 然后我发布创建的路径 以便后续作业可以使用输出 输出中的路径如下所示 ptest SUCCESS ptest i
  • 使用更少的代码进行脑筋急转弯

    这是我尝试编写的 R 问题的一个小脑筋急转弯 假设桌子上有 15 支蜡烛 在三个不同的回合中 您将根据蜡烛是否已经点燃来点燃或熄灭给定的蜡烛 因此 如果给定的蜡烛已经点燃 那么您的行动就是将其熄灭 另一方面 如果蜡烛没有点燃 那么你的行动就
  • CreateDC() 导致 glutInit() 失败?

    我编写了一段代码来创建一个窗口并在其中绘制一个形状 include
  • Jquery - 克隆表行时禁用 select2 下拉列表

    我有一个带有四个 select2 下拉列表的表 当我克隆该行以复制它时 新行的下拉列表被禁用 我无法单击它们 我必须在代码中添加什么才能激活它们 HTML 表格 table width 100 tbody tr th class tab h
  • 如何匹配不包含单词的行[重复]

    这个问题在这里已经有答案了 我想知道如何使用Python风格的正则表达式来匹配不包含特定单词的行 只需使用正则表达式 不涉及Python函数 Example PART ONE OVERVIEW 1 Chapter 1 Introductio
  • Postman中如何自动获取token

    我使用 Postman 桌面应用程序进行 Web API 测试 我有很多控制器 每个控制器都需要一个令牌 首先我得到Bearer token然后将其复制到其他请求中 该令牌有时间限制 我可以自动获取令牌 然后自动将其设置为所有其他请求吗 好
  • 生成的 JsonResult 中的属性名称大小写不一致

    我已经为此摸不着头脑有一段时间了 并决定让 SO 社区来尝试一下 我有一些响应客户端 POST 的操作 这些操作执行简单的任务并返回JsonResult从具有简单布尔 Success 属性的匿名类构建 如果成功 或者返回PartialVie
  • 错误:sonar.sources 的值无效

    尝试运行 sonartest 但失败了 我的詹金斯控制台输出 Started by user Badal Singh Building on master in workspace C Program Files x86 Jenkins w
  • 从设备获取屏幕截图时出现意外错误:EOF

    当我尝试在 Android Studio 中从我的某些项目中截取屏幕截图 通过按相机图标 时 我收到以下消息 Unexpected error while obtaining screenshot from device EOF 如果我在打
  • 如何比较java中的多个类?

    现在 我已经编写了对整数和字符串数组进行排序的比较器 从代码中可以看出 如果两个类不相同 则 String 类将采用大于值 但是 这仅允许两个类 如果我想向数组添加另一个基本类型 例如 Float 怎么办 我必须向 if else 语句添加
  • x64 上类方法崩溃的地址

    The AddressOf运算符仅适用于标准 bas 模块内的方法 我使用以下代码来检索类方法的地址 Option Explicit If VBA7 Then Private Declare PtrSafe Function DispCal
  • 如何在 Delphi 中格式化 Unix 时间戳?

    I have var timestamp Longint timestamp Round Now 25569 0 Unix start date in Delphi terms 86400 我在一些 MySql 中使用它作为主键 但我也想格
  • Material UI 组件上的 CSS

    我在尝试使用 Material UI 时不断遇到麻烦 我有一个 Material UI 表 我正在尝试将文本居中对齐 Material UI 标准 CSS 有一个名为 MuiTableCell root 60 的元素 它有一个带有 text
  • 在笑话测试中将通用数据放在哪里

    我不知道如何组织笑话测试的代码 我所有的测试都在 tests 和我所有的嘲笑 mocks 现在我有一些想要在测试之间共享的数据 它们不是现有函数的模拟 它们只是我想在不同文件中使用的一些 javascript 对象 我应该创建一个 data
  • Pentaho j_spring_security_check 混合内容。 HTTPS 到 HTTP

    我已根据需要在 Tomcat 8 5 和 OpenJDK 1 8 上安装了 Pentaho 9 x 在它前面的是带有 mod proxy http 的 Apache 2 4 我的网站使用 HTTPS 提供服务 并且我有以下代理规则 Requ
  • 了解 OCR 的 Freeman 链码

    请注意 我确实在寻找问题的答案 我是not寻找一些源代码或一些学术论文的链接 我已经使用了源代码 并且我已经阅读了论文 但仍然没有弄清楚这个问题的最后部分 我正在研究一些快速屏幕字体 OCRing 并且取得了很好的进展 我已经找到基线 分离