2009-02-22 72 views
1

我设法将每个字符存储在位图中,并且正在寻找一种方法来快速确定它是哪个字符。OCR:如何比较图像,排序不匹配并快速执行此操作?

因此,我将把每个可能的字符存储到1和0的数组中,并将它们与我刚抓住的位图数组进行比较。

我可以做简单的检查,比较我得到了多少黑色像素,比较尺寸等,但所有这些检查都很慢(只是猜测..)。

所以我在寻找的是一种方法,它从底部到顶部或者随机地将每个像素进行谷底处理,将数组与一组数组进行比较,并将其排列成不匹配,直到只剩下一个数组。但我怎么能实现呢?

感谢您的帮助。

斯文

+0

您是否正在尝试仅使用计算机生成的带别名文本的OCR位图? 如果你是,只需将每个位图散列为一个blob并使用一个blob字典。 否则,你试图做的没有任何意义,因为扫描引入了许多文物...... – 2009-02-22 13:46:05

+0

它是计算机生成的别名文本。背景不同,但文字总是具有相同的颜色。 – Sven 2009-02-22 14:01:08

回答

2

在OCR世界这是非常难得,你碰上targetresource和你原来的比较资源之间的“绝配”。

其实它是科学的一个巨大的领域,但在这里,对这个问题的一个很好的论文应该给你一些基本知识: http://www.discover.uottawa.ca/~qchen/my_papers/master_thesis.pdf

注意,像这样的算法是非常数学沉重,在现在这样的优化标准x86 CPU。

如果你正在寻找一个完美的匹配(我的意思是,真正完美,逐字节),并且你想实现这个快速和容易,我建议做一个“快速跳过明显的不匹配” -kinda算法 - 是这样的:

1)比较数组的大小,如果不同,它不是你找什么

2)比较每个位图

3的散列值)比较每个位/字节一个接一个,只要你看到一个区别,这不是你要找的

4)赢了,你找到了一场比赛:)

这是非常缓慢的,取决于你想达到什么,但容易实现,它会工作。所以适用于类似原型的应用程序。正如我所说,OCR(和所有其他形式的数字信号处理)是研究一个巨大的领域,所以它不是你能指望别人来教你快速forumpost,可悲的是:(

好运

[编辑]看看你的OQ中的评论,我会说散列表/字典数据结构是最快的,或者是二叉搜索树。两者都非常依赖你的散列键生成器:)

[编辑2(xD)]“它是由计算机生成的别名文本。背景不同,但文本总是具有相同的颜色。”非常重要的信息:P文本/位图的大小是否总是相同?我建议要么在你丢弃预设背景颜色的地方实现你自己的散列算法,以便散列值只取决于文本的颜色(以及它的形状)或者简单地重写你的目标中的所有背景像素与原始图像颜色相同(或者只是将原始背景设置为目标图像的背景?请再次确定您在这里与哪些数据进行对比 - 需要更多信息:))。