6


我试图从黑白图像中提取(不识别!)字符,
所以如果图像是 123,我得到一个包含 3 个图像的数组,

这是一个重复的问题,我知道,但我找不到我想要的,我也尝试过查看 codeproject 但找不到工作示例

http://www.codeproject.com/Articles/143059/Neural-Network-for-Recognition-of-Handwritten-Digi
源代码未完成


您的帮助非常感谢:)

4

5 回答 5

5

正如 Kenny 已经提到的,“连接组件标记”描述了一系列识别连接像素的算法。连接的组件也称为“连接区域”或“斑点”,也称为“轮廓”的相关概念。任何这样的算法不仅应该能够找到连接的前景像素的形状,而且还应该能够找到由背景颜色像素组成的形状内部是否存在“洞”。

http://en.wikipedia.org/wiki/Connected-component_labeling

该算法用于依赖图像处理的多个工程领域,包括计算机视觉、机器视觉和医学成像。如果您打算在图像处理上花费任何时间,您应该对这种算法感到非常熟悉,并且至少自己实现一次。

OpenCV 库有一个 findContours() 函数,可用于查找轮廓、轮廓内的轮廓等。
http://opencv.willowgarage.com/wiki/

如果您想看到一个区域标记算法在起作用,请使用 ImageJ 应用程序查找对“细胞计数”的引用。计数生物细胞是医学成像区域标记的重要且经常被引用的应用。

http://rsbweb.nih.gov/ij/

考虑获取有关该主题的教科书,而不是在线学习零碎。研究连接的组件(又名 blob)不可避免地会导致考虑二值化(又名阈值),它采用灰度或彩色图像并从中生成黑白图像。如果您正在处理来自相机的图像,那么照明就变得至关重要,这需要时间和修修补补来学习。

清理图像可能需要许多其他预处理步骤。预处理的需要取决于您的应用程序。

这是一本经常被推荐的教科书,它很好地涵盖了标准图像处理技术:

Gonzalez 和 Woods 的 数字图像处理,第 3 版http://www.imageprocessingplace.com/

去 addall.com 找到便宜的副本。国际版更便宜。

如果图像中的字符(或其他形状)具有一致的大小和形状——例如,“A”总是 40 像素高和 25 像素并且机器打印为相同的字体——那么您可以使用“标准化互相关”或模板匹配技术来识别一个或多个匹配形状的存在。这种技术可以作为一种非常粗糙的 OCR 工作,但有严重的局限性。

http://en.wikipedia.org/wiki/Template_matching

于 2012-02-18T16:07:55.723 回答
3

如果您的图像代表白色背景上的黑色字符(反之亦然),并且图像质量合理且文本行是水平的并且如果每个字符与其相邻字符分开,则查找所有字符是一个相对简单的操作白色海洋中的黑色像素小岛。

随着这些 if 的每一个被放松,问题变得更加困难,但在概念上保持不变:找到一个黑色像素,然后找到它所连接的所有其他黑色像素,然后你就找到了一个字符。或者,记住关于 OCR 和您的要求的评论,您发现了一块黑色像素(您断言)代表一个字符。

于 2012-02-18T15:19:19.150 回答
1

我已经把代码放在代码项目上,它完全符合你的要求。
连接组件标记和矢量化

它使用Fu Chang、Chun-Jen Chen 和 Chi-Jen Lu的论文A Linear-Time Component-Labeling Algorithm Using Contour Tracing Technique进行单程轮廓提取。

于 2012-07-15T14:07:38.563 回答
0

在我看来,迄今为止最好的答案是 Rethunk,因为他指出您应该使用分段和连接组件标签。HighPerformanceMark 基本上描述了连通分量标注算法(这是一个非常简单的算法),但我认为提到算法的名称对于这种答案很重要。

但是请注意,分割和连接组件标签只是解决问题的起点。例如,一些字母,如小写“i”将由两个组件组成,您应该考虑到您可能有连字(即两个相互连接的字母)。这就是我喜欢 M. Babcock 评论的原因:如果不识别字符,很难有一个好的解决方案来解决您的问题。

对于您的问题,我相信您可以通过使用OCR 库来解决您的问题。

于 2012-02-18T18:29:56.947 回答
0

您可能会发现了解机器视觉中的 Blob 或连接分析很有用。大多数图书馆,包括免费图书馆,都有这样的东西。此外,如果您知道方向,文本是黑白的并且文本间距很好,您应该能够在 X 和 Y 或任何角度的图像的一维投影中找到字符边缘,如果您有时间的话。

于 2012-02-18T15:31:48.627 回答