我正在研究OCR,现在我正在分析每个单独的字符,而不是其他字符。例如,如果我有一幅图像,上面写着:
12345678.90我希望检测每个数字在图像中的起始位置和结束位置的x,y坐标,这样我就可以确定要处理多少个数字,然后解析出每个单独的数字/字符,并对其进行处理。
我已经设计了一个简单的算法来做它,我想要一些关于如何改进它的意见/评论。
(在这个应用程序中,我只需要处理数字,但是如果这个算法也能解析字母,那就更好了)。
在背景颜色中有一个像素左右的空白。它可能对我们来说是不可见的,但是它就在那里,它会被程序找到,像像素一样水平地读取颜色。这会告诉它字符水平结束的位置。例如,它可能检测到15,30的背景色像素。
x,y坐标。在上面的例子中,字符将从5,20到15,30,并且是10x10。这个算法可以改进吗?或者我对第六步的假设是正确的吗?
发布于 2013-09-15 21:31:38
我知道的一种常用的数字分割方法是滑动窗口。基本的想法是你滑动一个一定大小的窗口在数字图像上。
滑动窗口的每一次移动都会产生一幅图像(您只看窗口覆盖的像素)。滑动的窗户会很窄。现在可以训练分类器,这将把滑动窗口映射到1或0,其中1表示滑动窗口的中心位置是2位,0表示相反。
你需要一些训练数据来训练分类器。或者你可以尝试使用无监督的学习。
编辑:这个视频可能很有用:https://www.youtube.com/watch?v=y6ga5DeVgSY
发布于 2013-09-15 21:24:26
免责声明__:我以前从未写过任何类似OCR的软件。
在我看来,您的算法似乎有点错误,原因如下:
我将尝试使用递归算法,尽可能地跟踪前景颜色像素,而不进入背景像素。当使用大字符的大图像时,这可能会导致堆栈溢出,因此最好在几个for循环中完成此操作,而不是使用递归函数。
如果您要这样做,这个逐像素发现一个字符,您可以使用该过程创建向量信息,您的字符是什么样子。我认为这将是一个很酷的起点来识别人物。
发布于 2014-04-22 10:46:25
我没有尝试编写OCR软件,但是我们确实使用它,而且它变得非常复杂。
还不完全清楚你的图像是从哪里来的;如果是扫描图像,那么就会有几个复杂的问题。尤其是在你的计划中,即使数字之间有一个缺口,它也可能不是垂直的(扫描的页面不太可能是完全笔直的)。其他因素包括“斑点”如果你正在处理这类图像,你几乎可以肯定的是,你需要寻找图像处理技术,将许多不同的数学运算应用到整个像素阵列上,这样就可以完成像deskew (矫正图像)、despeckle (去除随机点)、边缘增强(从光到暗的变化以增强线条)等工作。
从你使用的“背景”和“前景”颜色,它可能是你试图"OCR“一个图像从屏幕?如果是这样(某种“屏幕刮擦”过程),而且你知道(或者可以用)特定的字符形状进行解释,那么滑动窗口的一个变体可能会有所帮助:你可以在图像周围以不同的偏移量滑动已知的'5‘图像:如果'5’的所有像素都匹配图像中的“前景”像素,那么你就知道你找到了一个'5‘。重复其他数字。如前所述,这是我们所说的“虚拟”窗口。
https://stackoverflow.com/questions/18817533
复制相似问题