【问题标题】:Eliminate white outline around text from image从图像中消除文本周围的白色轮廓
【发布时间】:2016-02-21 05:29:10
【问题描述】:

我正在尝试为移动设备开发 OCR 应用程序。

因此,在将其传递给 OCR 引擎之前,我会应用一些过滤器并对图像进行二值化以获得更好的结果。

我正在使用自适应高斯阈值,这给了我很好的结果,但文本周围还有一些点和噪声(如下图所示),这会导致 OCR 输出错误。

现在这只是较大图像的一小部分。

我理解的原因是因为文本周围的白色轮廓只有在我显着放大图像时才能观察到:

我尝试通过在对其进行二值化之前应用高斯模糊来最小化它。但我仍然相信,如果我能理解并消除文本周围白色轮廓的原因,我可以获得更好的结果。

我还添加了images 我已经以他们的名义解释了图像的细节。

我得到了很好的结果,但只是想获得更多的见解,并尝试探索是否有任何其他或更好的方法来实现同样的目标。

任何指导或方向都会有很大帮助。 我希望我的问题很清楚。请随时询问任何详细信息。

谢谢。

【问题讨论】:

  • 白色轮廓用于增强文本的视觉外观(例如,如果背景是图像)...找到平均背景颜色(角)并将所有像素设置为比应该删除的颜色更亮的像素白色和保留字符不变
  • 那么,移动端是否在内部增强了图像的可读性?好吧,我能够使用高斯模糊在很大程度上消除,然后应用具有更大内核大小(准确地说是 15)的自适应高斯阈值,我能够获得良好的结果。

标签: opencv image-processing ocr


【解决方案1】:

既然要实现移动端,那么直接转成二值图怎么样(用Matlab展示)。

img = imread('OGGjn.png');
imgb = im2bw(img);
imshow(imgb);

输出:

【讨论】:

  • 您好,感谢您的回复。说到我的观点,这只是整个图像的放大样本。它实际上是一份病理报告,而这个缺席只是其中的一部分。由于页面不同部分的照明水平不同,因此无法将相同的方法应用于整个页面。因此,应用自适应高斯阈值有时会产生斑点和破碎的字母,这有时会成为一个问题。
  • 我只是回答给定的问题。请提供整个页面和您对通用解决方案的必要要求。
  • 大多数 OCR 在黑白级别上的效果更好更快,因此二值化是一个非常典型的预处理步骤。事实上,我在所有应用程序和 OCR 应用程序中都这样做。也许您可以使用不同的“自适应”二值化技术,或者甚至更好地使用专门为此任务设计的库。
  • @IIya Evdokimov,实际上我首先应用了“自适应模糊”来消除由字母周围的白衬造成的噪音,然后我应用“自适应高斯阈值”,你可以检查一下在上面的链接中(最近更新)。和特定的图书馆......你能给我一些链接或任何方向。感谢您的帮助。
【解决方案2】:

您尝试过morphological 操作吗?如果您选择最佳过滤器尺寸和形状(圆盘算子),这将减少白色阴影。

如果您可以提及您在图像上执行的操作顺序以查看您在哪个阶段获得白色阴影,这将更加有用。

我认为扩张在这里会有所帮助。 MATLAB 接受灰度图像进行膨胀并且做得很好。用 OpenCV 试试。我之前做过。

您使用的是什么类型的二进制阈值技术?

【讨论】:

  • 感谢您的回复。我尝试过形态学操作。但似乎没有多大帮助。我的意思是有些字母确实得到了增强,但对某些字母来说却是负面的。所以最后没有那么积极的结果。我试过打开操作(MATLAB的imopen),虽然图像更清晰,但有些数字混淆了,使oCR更难处理。
  • 您使用的是什么类型的二进制阈值技术?我使用了自适应阈值技术(转换为二进制)。我已经让它工作了。你说的对。如果角色是联合的,那就很难了。我认为您仍然需要研究这些形态学操作的过滤器大小并开发一个简单的阈值算法。您可以将图像分成几个窗口,并为每个窗口设置不同的阈值。
  • 我正在使用opencv的自适应高斯阈值。
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多