Opencv 分割-分离触摸对象

Opencv 分割-分离触摸对象,opencv,image-processing,machine-learning,image-segmentation,Opencv,Image Processing,Machine Learning,Image Segmentation,我已经建立了一个系统来分割包含手写符号的二值图像并对它们进行分类(特别是针对音乐)。我知道有一些商业应用程序可以做到这一点,但这是我试图把它作为一个项目来做的 为了简单起见,假设我的整个图像中有两个元素: 及 我已经构建了一些东西,可以将图像分割成区域并进行分类。这在大多数情况下都很有效 然而,有时元素会相互接触,这时我的分类器就会崩溃。例如: 或 把两者分开的最好方法是什么?我做了很多研究,但我认为我缺乏领域知识可能让我失望 我发现: 模板匹配也不能很好地工作,符号是手写的 稀释/侵蚀也不起

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

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

我已经构建了一些东西,可以将图像分割成区域并进行分类。这在大多数情况下都很有效

然而,有时元素会相互接触,这时我的分类器就会崩溃。例如:

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

我发现:

  • 模板匹配也不能很好地工作,符号是手写的
  • 稀释/侵蚀也不起作用,尤其是当两个锐器(右上)重叠时,因为它们退化太多
  • 分水岭填充在两个复杂形状上实际上不起作用
可能有用的事情,我希望在我下兔子洞之前能投“赞成票”或“避免票”

  • 滑动不同大小的窗口L->R,并尝试对其进行分类。选择具有最高正向分类置信度的窗口和位置
  • 进行投影(水平和垂直)并以最小值(即各轴上最薄的位置)对图像进行“剪切”

    • 在我看来,这似乎是一个非常困难的问题,我没有一个好的通用解决方案。尤其是多个连接的
      #
      的情况将很难解决

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

      • 当一个blob对于单个符号来说太大时
        • 对于每个可能的符号
          • 在左上角、右上角、左下角和右下角取一个区域,该区域的符号大小正确
          • 对该区域进行识别
          • 如果成功,请删除已识别的符号,其余部分重复此操作
      这不是一个非常复杂的解决方案,它的工作效果很大程度上取决于您特定的字符识别


      另一个想法:

      如果大多数形状倾向于具有较薄的垂直线段,则可以通过识别这些线段,并将找到的垂直线段用作识别的起点,只要blob包含多个符号


      另一种分离形状的方法:

      在距斑点边界有给定最小距离的最大位置拆分斑点。警告:这最适用于凸面形状,可能根本不适用于
      符号


      备选方案4:

      在乐谱中,相同种类的符号往往同时出现,如#后接同一行上的音符,或以某种模式在行首出现多个#。对于这种倾向于聚集在一起的符号,可能需要一个特殊的组合识别器


      (请注意,您目前如何将符号与员工行分开?)

      回答得很好,有很多问题要考虑,谢谢。如果/当我确定哪种方法最有效时,我会尝试并记住报告。关于:stave line,我读了几篇文章,有很多好的方法,但是现在我通过在平板电脑上绘制输入,在这些行上分层,这样我就可以在处理过程中使用原始符号层来避免这个问题。我知道这意味着我也可以在客户端做一些聪明的事情,分别保存不同的笔划和区域,从而消除以后分割的需要,但计划最终会转移到其他可能有横杠线的输入方法。