OpenCV中颜色分析的图像分割

时间:2013-03-04 16:16:23

标签: opencv image-segmentation watershed

我正在开展一个项目,要求我:

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

enter image description here

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

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

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

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

2 个答案:

答案 0 :(得分:8)

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

以下是您的图片的样子:
enter image description here

答案 1 :(得分:1)

我不是专家,但我真的看不到分水岭算法对你的分割问题非常有用。

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

执行此操作应该允许您检测图像中的对象,假设图像包含相对明确定义的对象。您可能还会尝试在将图像转换为具有特定阈值的黑白图像后执行分割,从而实现背景与对象的良好分离。

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

<强>更新

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

如果您认为对象的颜色大致均匀,您可能会尝试将图像处理为:

  1. 去除噪音;
  2. 将原始图像映射到缩小的颜色空间(即256或事件16颜色)
  3. 根据像素颜色检测连接的组件并确定哪些组件足够大
  4. 您可能还会受益于重新采样图像以降低分辨率(例如,如果图像为1024 x 768,您可能会将其降低到256 x 192),以帮助加快算法速度。

    唯一要做的就是确定哪个组件是背景。通过转换为具有特定阈值的黑/白来尝试去除背景可能是有意义的。