6

如果字符连接,我如何分割?我只是尝试使用带距离变换的分水岭(http://opencv-code.com/tutorials/count-and-segment-overlapping-objects-with-watershed-and-distance-transform/)来查找组件的数量,但它似乎表现不佳。

  1. 它要求对象在一个阈值之后被分离,以便表现良好。

话虽如此,我怎样才能有效地分割字符呢?需要帮助/想法。

微连接 附件是二值图像的例子。

紧密相连一个高度连接的例子。

答:

@mmgp 这是我的 o/p

英国石油公司 o/p

4

3 回答 3

8

我相信这里有两种方法:1)重做导致您现在拥有这些图像的二值化步骤;2)根据图像大小考虑不同的可能性。让我们关注给定问题的第二种方法。

在您的最小图像中,只有两个数字连接,并且仅在考虑 8 连接时才会发生。如果您将图像处理为 4 连接,则无需执行任何操作,因为没有两个连接的组件应该分开。这如下所示。只有在考虑 8 连通性时,才可以通过找到与另一个点相连的点来简单地获得正确的图像。在这种情况下,只有两个这样的点,通过删除它们,我们断开了两个数字“1”。

在此处输入图像描述     在此处输入图像描述

在您的其他图像中,情况不再如此。而且我没有一种简单的方法可以应用于它,可以应用于较小的图像而不会使它变得更糟。但是,实际上,我们可以考虑将两个图像放大到某个共同的大小,使用最近邻插值,这样我们就不会从二进制表示中移动。通过调整两个图像的大小,使其宽度等于 200,并保持纵横比,我们可以将以下形态学方法应用于它们。首先做一个细化:

在此处输入图像描述

现在,可以看出,形态分支点是连接您的数字的点(在最左边的数字“六”处还有另一个,将被处理)。我们可以提取这些分支点并使用 2*height+1 的垂直线(高度来自您的图像)应用形态闭合,因此无论该点在哪里,它的闭合都会产生一条完整的垂直线。由于您的图像不再那么小,这条线不需要是 1 点宽,实际上我考虑了一条 6 点宽的线。由于某些分支点在水平方向上很接近,因此此关闭操作会将它们连接在同一条垂直线上。如果一个分支点不靠近另一个分支点,那么执行侵蚀将删除一条垂直线。并且,通过这样做,我们消除了与左侧数字六相关的分支点。应用这些步骤后,我们得到以下左图。从中减去原始图像,我们得到右侧的图像。

在此处输入图像描述     在此处输入图像描述

如果我们将这些相同的步骤应用于“8011”图像,我们将得到与开始时完全相同的图像。但这仍然是好的,因为应用删除仅在 8 连通性中连接的点的简单方法,我们可以像以前一样获得分离的组件。

于 2013-01-17T05:30:50.183 回答
2

为此,通常使用“涂抹算法”。也称为游程平滑算法 (RLSA)。这是一种将黑白图像分割成块的方法。您可以在此处找到一些信息或在互联网上四处寻找算法的实现。

于 2013-01-09T13:19:34.333 回答
0

不确定我是否想帮助您解决验证码,但一个想法是使用侵蚀。根据您必须使用的像素数量,它可能能够在不破坏字符的情况下充分分离字符。这可能最好用作其他一些分割算法的预处理步骤。

于 2013-01-08T17:11:52.837 回答