【问题标题】:Image Segmentation for Color Analysis in OpenCVOpenCV中颜色分析的图像分割
【发布时间】:2013-03-04 16:16:22
【问题描述】:

我正在做一个需要我做的项目:

查看包含相对明确的对象的图像,例如

并在某个空间(无论是 RGB、HSV 等)中挑选出 n-most(它是通用的,可能是 1、2、3 等)突出对象的颜色并将其返回。

我正在寻找将这样的图像分割成独立对象的方法。完成后,我的印象是找到段的轮廓并分析它们的平均或质心颜色等不会特别困难......

我简要研究了分水岭算法,它似乎可以工作,但我不确定如何为不确定数量的 blob 生成标记图像。

分割此类图像的最佳方法是什么,如果使用分水岭,生成相应的整数标记图像的最佳方法是什么?

【问题讨论】:

    标签: opencv image-segmentation watershed


    【解决方案1】:

    看看这个可能的方法:
    Efficient Graph-Based Image Segmentation Pedro F. Felzenszwalb and Daniel P. Huttenlocher

    您的图片如下所示:

    【讨论】:

      【解决方案2】:

      我不是专家,但我真的不明白分水岭算法如何对您的分割问题非常有用。

      根据我对此类问题的有限经验/接触,我认为要尝试使用滑动窗口方法进行分割。基本上,这需要使用设定大小的窗口遍历图像,并尝试确定窗口是否包含背景与对象。您将需要尝试不同的窗口大小和步骤。

      这样做应该允许您检测图像中的对象,假设图像包含相对明确定义的对象。您还可以尝试在将图像转换为具有一定阈值的黑白图像后执行分割,从而很好地分离背景与对象。

      一旦您通过滑动窗口识别了对象,您就可以尝试使用您提到的方法之一来确定最突出的颜色。

      更新

      根据您的评论,这是另一种可能对您有用的方法:

      如果您认为对象的颜色基本一致,您可以尝试将图像处理为:

      1. 去除噪音;
      2. 将原始图像映射到减少的色彩空间(即 256 或事件 16 色)
      3. 根据像素颜色检测连通分量并确定哪些足够大

      您还可能受益于将图像重新采样到较低分辨率(即,如果图像为 1024 x 768,您可能会将其减小到 256 x 192)以帮助加快算法速度。

      剩下要做的就是确定哪个组件是背景。这也是尝试通过转换为具有特定阈值的黑/白来去除背景的地方。

      【讨论】:

      • 我的预期方法集中在以某种方式按颜色分割对象,然后分割它们以确保删除任何重叠,即确保没有触及“斑点”。最后,对图像进行阈值化以将所有对象与背景分离,找到轮廓,然后在原始轮廓上循环以找到某个空间中的平均颜色。那可能不是最好的方法。即使在我写它的时候,它似乎也非常冗长!
      • 减少色彩空间并搜索区域
      • 你会推荐什么减少的色彩空间?我认为这种方法有其优点,但似乎降低到灰度可能会导致信息丢失过多,即多种颜色在 0-255 范围内都变得过于相似。有没有关于减少色彩空间和搜索区域的方法的好教程?
      • 我建议的是黑白(2 位)- 不是灰度(通常是 8 或 12 位)。不同之处在于 2 位本质上是图像的布尔开/关表示,它将较亮和较暗的区域分开。它可以非常有效地检测某些图像中的感兴趣区域。另外——就信息的明显损失而言,降维也非常有效。对您来说似乎丢失信息实际上可能对您检测对象/颜色的实际目标非常有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2017-07-24
      • 2018-11-29
      • 2017-09-04
      • 2020-03-23
      • 1970-01-01
      相关资源
      最近更新 更多