繁体   English   中英

计算机视觉-从“ A”图像识别“ A”

[英]Computer Vision - Recognize 'A' from an image of 'A'

从File_01中提取的“ A”

从File_02中提取的“ A”

嗨,我是一个新手程序员,在处理简单的图像时遇到了麻烦。

我在这里的目标是使程序识别出两个A是...嗯,两个A都是。 如果您足够仔细地看,您会发现它有点不同。(以像素为单位。)尽管任何有识字的人都可以将其读为“ A”,但是我敢肯定,逐像素比较的程序不会之所以起作用,是因为两个A实际上不同。 更糟的是,这两个尺寸不同-一个是48 * 60,另一个是48 * 61。

我想知道程序是否有办法将它们都读为A。 我听说这就是所谓的计算机视觉(不太确定)……我真的更希望该方法很简单-并不是要识别任意字符; 只有“ A”。 但是,如果不是那样,那么欢迎任何使计算机将它们都视为A的解释。

提前致谢 :)

第一:字符识别不仅不是一个简单的问题,也不是一个完全解决的问题。

是否有许多OCR实现? 是。 这些实现好吗? 这取决于应用程序。 您认为OCR应该越概括,现有的实现就越糟糕。

长话短说,有专门针对这个主题的书,要花任何篇幅来提供有意义水平的细节答案。

有许多OCR(光学字符识别)技术。 已经针对(a)机器打印字符与(b)手写字符开发了不同的技术。 读取机器打印的字符通常比较容易,但不一定很容易。 读取手写字符可能非常困难,并且仍然是一个未完全解决的问题。 请记住,还有其他“脚本”(书写字符系统),并且拉丁字符的识别技术可能与传统汉字的识别技术不同。 [如果您可以编写一个移动OCR应用程序以快速,准确地读取手写汉字,那么您可以赚很多钱。]

https://en.wikipedia.org/wiki/Optical_character_recognition

有许多种OCR方法,如果您对实际编写代码来执行OCR感兴趣,那么您自然应该首先考虑至少实现一种较简单的技术。 从您的评论看来,您已经在研究这一点,但简要地说:不要先看神经网络。 是的,您可能最终会到那里,但是在充分利用神经网络技术之前,还有很多关于成像,照明和基本图像处理的知识要学习。

但是在深入探讨之前,请花一些时间尝试自己解决问题:

  1. 自己编写代码(不要使用别人的代码)将图像从文件加载到内存中。
  2. 将图像表示为内存中的2D数组。
  3. 想一想您可能仅将几个字符或形状彼此区分开的方法。 首先,假设这些字符已完美复制。 例如,如果一张图像包含字符“ 1”和“ 2”的多个完全相同的副本,那么您想象中的区分这些字符的最简单方法是什么?
  4. 考虑相同的问题,但字符略有不同。 例如,为每个字符添加一些“噪点”像素。

稍作修改后,请阅读一些基本的图像处理技术。 一本好书是Gonzalez和Woods撰写的Digital Image Processing。

(归一化相关是一种可以在网上和书籍中阅读的简单算法。它对某些简单类型的OCR很有用。您可以将归一化相关视为将参考“ A”字符的“模具”与样本的ACR比较的一种方法。其他可能不是'A'的字符-模板与样本的距离越近,样本对A的置信度越高。

是的,请尝试使用OpenCV的模板匹配。 首先尝试使用OpenCV功能,并了解模板匹配何时起作用以及何时失败,然后更仔细地查看代码。)

最新的OCR技术调查可以在本书中找到:Cheriet的字符识别系统 这是研究各种算法的良好起点。 其中一些技术将非常令人惊讶且违反直觉。

要了解有关人类如何识别角色的更多信息(其细节通常令人惊讶且违反直觉),请阅读 Dehaene撰写的《大脑中阅读》 这本书可读性强,不需要特殊的数学或编程技能。

最后,对于任何OCR算法,记住以下几点很重要:

  1. 图像质量很重要。 尽最大可能控制图像获取和照明。 对光,阴影等对OCR结果的影响产生良好的直觉。
  2. 为读取率准确性设定目标。 为了避免沮丧,首先要设定一个低目标-也许只有50%。 有多种技术可以计算“准确”的含义,但从一开始,您可以简单地计算出正确识别的字符百分比或正确识别的单词百分比。 要达到98%的读取率并不容易,对于某些应用程序,即使读取率也不是特别有用。
  3. 识别单词会增加另一层复杂性。
  4. 任何深度学习OCR都需要很长时间。 慢慢来。
  5. 始终重新考虑关于“应该”如何编写OCR算法的假设。 即使在第2、3、4和5步中实现比较聪明,第1步的笨拙选择也会使整个实现步履蹒跚。

祝好运!

您的问题看起来像是光学字符识别。 为此,一种非常常见的方法是使用神经网络。 神经网络将分析图像并为您提供每个字母的概率。 但是您必须首先对其进行培训,并且神经网络是活跃研究的主题,所以我知道没有简单的“嵌入式”解决方案。

好的,确实没有针对此问题的简单“插入”。 我将尝试以一种简单的方式来说明神经网络方法,以为您解决一些问题。 首先,您需要以更简单的方式表示图像! 这意味着,现在您的图像是48 * 60矩阵,并且是灰度级。 考虑采取以下措施:

  • 把它们变成二进制照片。
  • 将它们全部调整为50 * 50。
  • 使用形态学操作将字母细化到一个像素宽度(搜索!)。

现在,我们将对结果使用拳击方法。 将您的50 * 50图像分成例如8 * 8的网格部分。 计算每个部分中有多少像素,并将结果放入8 * 8矩阵名称C中。 现在您有一个8×8的矩阵C,它是原始图像的简单表示。 收集一些训练数据和测试数据,只需使用Matlab的神经网络模式识别应用程序(您确实需要了解ANN的工作方式才能使用此应用程序)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM