对象(简单形状)图像中的检测

时间:2016-07-23 07:53:07

标签: python opencv image-processing

我有以下图片。

enter image description here

Other Samples

我想检测六个方形的绿色部分和它们上面的一个圆形部分。我基本上想要一个二进制图像,这些部分标记为1(白色),其他所有部分标记为0(黑色)。

到目前为止我做了什么?

我找到了一系列H,S和V,其中这些颜色落在单个图像上工作正常,但我有多个这样的图像,有些在不同的照明(亮度)条件下,并且范围不起作用在那些情况下。我该怎么做才能使阈值处理尽可能保持亮度不变?我应该采取不同的方法进行阈值处理吗?

1 个答案:

答案 0 :(得分:1)

您所做的是手动分析特定图像阈值处理所需的值,然后应用它。你看到的是,在一张图像上进行的分析并不一定适合其他图像。

解决方案是自动为每个图像进行分析。这可以通过为每个频道创建直方图来实现,如果你在HSV中工作,我猜测在这种情况下H频道几乎没用。

无论如何,一旦你有直方图,你应该用Lloyd-Max这样的东西来分析阈值,这基本上是K-Means类型的强度聚类。这应该给出质心的白色背景和其他颜色的强度。然后根据群集标准差选择阈值。

例如,在上面给出的图像中,S通道的直方图如下所示:

Histogram of S channel

您可以看到0附近的大斑点是饱和度最低的白色背景。