消除图像中文本周围的白色轮廓

3
我正在尝试开发一款移动OCR应用程序。

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

我使用的是自适应高斯阈值,这给了我非常好的结果,但同时也产生了文本周围的一些点和噪音(如您可以在下面的图像中观察到的),这会导致OCR输出错误。 Binarized image

现在这只是较大图像的一个小片段。 enter image description here

我已经理解的原因是白色轮廓线围绕文本,只有在我显着缩放图像时才能观察到:

image

我试图在二值化之前应用高斯模糊来最小化这种情况。但我仍然相信,如果我能够理解并消除文本周围的那个白色轮廓线的原因,我可以获得更好的结果。

我还添加了图像 我已在它们的名称中解释了图像的细节。

我已经取得了很好的成果,但只是想获得更多的见解,并尝试探索是否有其他或更好的方法来实现相同目的。

任何指导或方向将非常有帮助。 我希望我的问题清晰明了。请随时询问任何细节。

谢谢您。


2
白色轮廓线是为了增强文本的视觉效果(例如,如果背景是图像)...找到平均背景颜色(角落),将所有比该颜色更亮的像素设置为该颜色,这样可以去除白色并保留字符不变。 - Spektre
那么移动设备在内部如何提高图像的可读性呢?我能够使用高斯模糊消除很大程度上的问题,然后应用更大的内核大小(精确到15)进行自适应高斯阈值处理,从而获得良好的结果。 - Mayank
2个回答

1

既然你要为移动设备实现,那么考虑将其转换为二进制图像(只需使用Matlab显示)。

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

输出:

enter image description here


你好,感谢您的回复。言归正传,这只是整个图像的一个放大样本。实际上,这是一份病理报告,而这个缺失只是其中的一部分。由于页面不同部分的照明水平不同,因此无法将相同的方法应用于整个页面。因此,有时应用自适应高斯阈值会产生斑点和断字母,这有时会成为问题。 - Mayank
我只是回答所给出的问题。请提供整个页面和您所需的必要条件,以便得到一个通用的解决方案。 - Huá dé ní 華得尼
1
大多数OCR在黑白级别上的工作效果更好、速度更快,因此二值化是一个非常典型的预处理步骤。事实上,在我所有的应用程序和OCR应用程序中都会这样做。也许你可以使用不同的“自适应”二值化技术,甚至更好的是专门为此任务设计的库。 - Ilya Evdokimov
@IIya Evdokimov,实际上我先应用了“自适应模糊”来消除字母周围的白色线条引起的噪声,然后再应用“自适应高斯阈值化”,你可以在上面的链接中检查(最近更新)。至于特定的库...你能给我一些链接或任何方向吗?感谢你的帮助。 - Mayank

0

你试过 形态学 运算吗?如果选择一个最佳的滤波器尺寸和形状(圆盘运算符),这将减少白色阴影。

如果您能提到在图像上执行的操作序列,以便查看您何时出现白色阴影,那么将更有用。

我认为膨胀会有所帮助。MATLAB接受灰度图像进行膨胀,并且做得很好。在OpenCV中尝试一下吧。我之前已经做过了。

你使用的是哪种二值化阈值技术?

谢谢您的回复。我已经尝试了形态学操作,但似乎没有太大帮助。我的意思是有些字母确实得到了增强,但对于一些字母来说,它的作用是负面的。因此最终结果并不是很积极。我也尝试了开运算(MATLAB中的imopen),虽然图像更清晰,但一些数字混淆在一起,使OCR更难处理。 - Mayank
1
你使用的是哪种二值化阈值技术?我曾经使用过自适应阈值技术(将其转换为二进制)。我已经让它正常工作了。你说得对,如果字符是连在一起的话会很困难。我认为你仍然需要调整那些形态学操作的滤波器大小并开发一个简单的阈值算法。你可以将图像分成几个窗口,并为每个窗口设置不同的阈值。 - Saania
我正在使用OpenCV的自适应高斯阈值处理。 - Mayank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接