分割 - 分离触摸对象

时间:2014-05-27 17:37:35

标签: opencv image-processing machine-learning image-segmentation

我已经构建了一个系统来分割包含手写符号的二进制图像并对它们进行分类(特别是对于音乐)。我知道有商业应用可以做到这一点,但这是我试图将其作为一个项目。

为了简单起见,我们假设我的整个图像中都有两个元素:

NoteSharp

我已经构建了一些可以将图像分割到区域并对其进行分类的内容。这在大多数时候都很好。

然而,有时元素会触及,此时我的分类器会崩溃。例如:

TouchingAnother Touching

将两者分开的最佳方法是什么?我做了很多研究,但我认为我缺乏领域知识可能会让我失望!

我发现的事情:

  • 模板匹配效果不好,符号是手写的
  • 细化/侵蚀也不起作用,特别是当它的两个锐利(右上方)重叠,因为它们会降低太多。
  • 分水岭填充并不适用于两种复杂的形状

可能有用的东西,我很感激"去寻找它"或者"避免"在我走下兔子洞之前投票。

  • 滑动不同大小的窗口L-> R并尝试对其进行分类。选择具有最高正分类置信度的窗口和位置。
  • 采取投影(水平和垂直)和"切割"图像处于最小值(这将是相应轴上最薄的位置

1 个答案:

答案 0 :(得分:2)

在我看来这是一个非常难的问题,而且我没有一个很好的通用解决方案。特别是多个连接#的情况将难以解决。

在您的特定情况下,我会尝试以下方法,假设通常不会有超过两个或三个符号聚集在一起:

  • 当blob对于单个符号而言太大时
    • 表示每个可能的符号
      • 在左上角,右上角,左下角,右下角使用符号正确大小的区域
      • 对该地区进行表彰
      • 如果成功,则删除已识别的符号,重复其余

这不是一个非常复杂的解决方案,它的效果如何强烈取决于您的特定字符识别


另一个想法:

如果您的大多数形状都倾向于具有细长的垂直线段,您可以通过probabilistic Hough transform识别这些线段,并使用找到的垂直线段作为识别的起点,只要blob包含超过一个符号。


另一种分离形状的想法:

将blob拆分为距离blob边界的给定最小距离的最大convexity defect。警告:这最适合凸形,而且可能根本不适用于#标志


备选方案4:

在乐谱中,相同类型的符号倾向于一起出现,例如#后跟同一行的音符,或者某个模式中行的开头的多个#。为这些符号聚集在一起的特殊组合识别器可能是值得的。

(就此而言,您目前如何将这些符号与职员线分开?)