首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在OCR处理之前删除背景色或纹理

在OCR处理之前删除背景色或纹理
EN

Stack Overflow用户
提问于 2013-01-09 06:18:06
回答 1查看 3K关注 0票数 1

当一个典型的手机用户为一个卡片大小的物体拍照时,图像中通常会包含一些背景纹理-请参阅附件中的示例。在某些情况下,这种背景可能会影响OCR的准确性。

我想知道是否有解决方案来去除背景(我肯定有),或者检测背景区域,以便可以在OCR之前将其裁剪掉。在附加图像的情况下,木桌和台面演示将被删除。我想对比颜色可能是一种解决方案,但不是很确定。

EN

回答 1

Stack Overflow用户

发布于 2013-01-09 09:48:26

在某些情况下,作为人类,你很难区分背景和前景,所以肯定没有方法来正确地做你想要做的事情。既然您提到了OCR,我假设您实际上想要消除除文本以外的所有内容。实际上,这并不会让问题变得更简单,所以我实际上假设的是,您希望保留与其他对象(例如前景和背景,或者白色背景上的黑色文本)具有高度对比度的对象。同样,没有完美的方法可以做到这一点。

所以,这个答案要做的就是提供一个简单的方法,它可能会对你的任务有所帮助。该方法是现成的形态学工具和用于二值化的Otsu方法的组合,因为它在统计上是最优的。结果是潜在值得关注的区域。请注意,您肯定需要将这些结果与许多其他不同的分析相结合,一个好的OCR系统远远超出了这些直接方法。

该方法: 1)将图像转换为灰度(对颜色不感兴趣,但另一种方法肯定可以使用它们);2)使用h-dome变换去除不相关的最大值;3)计算形态梯度;4)用otsu二值化;5)通过面积开放删除小对象。删除不相关的maxima对你的任务很重要,因为你可能会有相当可怕的区域,这些区域是由糟糕的相机和糟糕的相机闪光灯以及一个缺乏经验的摄影师共同造成的。H-dome变换是基于形态重构的,所以如果你的库有后者而没有前者,那么实现它就很简单(否则你可以学习如何高效地实现后者)。离散图像的形态梯度是一种非常简单的方法,即使在光照较差的情况下也能很好地工作,因为它是一种局部方法。Otsu对其结果的阈值保留了最强的边缘(可能包括噪声和其他次要特征)。在此之前,您可以使用高斯平滑,这可能是用于噪声抑制的初始工具。这些小的特征很容易通过区域开放来移除。在Matlab中,可以按如下所示完成此操作:

代码语言:javascript
运行
复制
f = rgb2gray(imread(yourimage));
se = strel('square', 3);
g = imhmax(f, 50);                    % h-dome with h = 50
g = imdilate(g, se) - imerode(g, se); % morphological gradient
h = im2bw(g, graythresh(g));          % graythresh applies Otsu's method
w = bwareaopen(h, 50);

假设小于50像素的对象是不相关的(小文本可能并不总是这样)。

以下是示例的w镜像:

这些输出指示您应该在何处查找文本,即连接组件的内部。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14224995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档