4

我是图像处理的新手,这就是我面临的问题 - 假设我有一个申请表的图像,如下所示:在此处输入图像描述

现在我想检测要输入数据的所有位置的位置。在这种情况下,将矩形划分为多个框,如下所示(并非所有字段都标记):

在此处输入图像描述

我可以忍受照片框也被检测到。我已经尝试在 OpenCV 源代码中运行 squares.cpp 示例,但这并不能完全满足我的需求。我还在这里尝试了修改后的版本- 结果更糟(我的用例肯定与那个问题中的 OP 非常不同)。

此外,在有/没有模糊阈值的情况下,霍夫变换并不能真正起作用,因为扫描图像中的噪声会导致多余的线条,而且阈值处理会带走部分梳子(小方块),因此线路检测不达标。

请注意,此表单不是打印表单的扫描副本,但真正的输入很可能是打印表单的嘈杂扫描图像。

虽然我确信这是可能的(至少允许一些容忍度)并且我正在尝试解决问题,但如果我从其他可能尝试过这样的事情的人那里获得见解和想法,那将非常有帮助/enjoy 破解 CV 问题。此外,如果答案能解释为什么要完成特定操作(例如,扩张以尝试填补阈值留下的任何漏洞等),那就太好了

4

1 回答 1

1

表格是否一致?所有表格上的“这样的盒子”的大小是否相同?如果您可以依靠一致的大小,例如上面表格中的字符框,则可以使用模板匹配。

否则,问题似乎是:找到图像上的任何/所有矩形(通过后处理步骤过滤掉任何具有大量标记的矩形,或合并相邻的矩形)。

您越能利用表格之间的一致性,问题就越容易。使用您可以获得的任何上下文。

编辑

使用梯度(通过在 x 和 y 方向上使用 Sobel 核计算)可以消除大量噪声。

使用两者,您可以找到渐变的方向(可以在此处找到方程式:en.wikipedia.org/wiki/Sobel_operator)。假设我们将框的判别特征定义为垂直或水平梯度。如果像素的渐变具有水平或垂直方向,请保留它,将其他所有设置为白色。

为了使其对噪声更加稳健,您可以使用滑动窗口 (3x3) 来计算中值方向。如果窗口的中值(或平均)方向是垂直或水平的,则保留当前(窗口的中间)像素,否则将其设置为白色。

您可以使用 OpenCV 进行梯度计算,也可能使用方向/相位计算,但您可能需要编写代码来执行实际的滑动窗口代码。我对 OpenCV 不是很熟悉

于 2012-11-12T15:07:05.023 回答