强大的blob跟踪

时间:2014-01-19 13:42:47

标签: python opencv computer-vision feature-extraction

我有图像特征提取问题。输入图像是二进制(黑色和白色),并且可以包含近似已知区域和纵横比的斑点。这些需要使用一些最佳拟合算法与椭圆拟合。

示例输入:

期望的输出:

可能有多个blob(零个或多个),这个数字是事先不知道的。所有斑点的近似面积和纵横比是已知的(并且是相同的)。图像中有多少,它们的位置,方向和实际尺寸都是我想要找到的。根据实际找到的大小和纵横比,输出应该是每个blob的最佳拟合椭圆。

造成这种困难的是噪音和可能的重叠。

噪音示例:

重叠和噪音的例子:

嘈杂的图像可能在斑点中有洞,而且周围散布着其他小斑点。小的其他斑点不计算在内,因为它们太小而且不能覆盖任何密集的区域以至于被认为是真正的匹配。

重叠图像应计为两个斑点,因为该区域太大,无法让单个斑点覆盖它。

评估潜在拟合的可能指标是:

所有椭圆的总和(K1 *与预期尺寸的偏差百分比+ K2 *与预期纵横比的偏差百分比+ K3 *椭圆的百分比,其中非黑色+ K4 *百分比与任何其他椭圆重叠)+ K5 *百分比剩下的图像是黑色的

对于一些适当选择的参数K1..K5。完美的比赛得分为0.

我可以看到如何使用强力来解决这个问题,例如尝试足够的不同可能的拟合来很好地对搜索空间进行采样。我无法想象一种比蛮力更快的方法。

我更喜欢python和/或opencv中的示例。我将尝试在python中实现并发布任何建议的解决方案。谢谢!

P.S。不能假设blob已连接。可能有足够的噪音将其分解成不连续的部分。

P.P.S。二进制侵蚀无法消除少量噪声。在我的一些图像中,有足够的内部孔,如果图像被腐蚀到足以使噪声位消失,则侵蚀使整个(真实)斑点消失。

P.P.P.S。我认为使用任何基于轮廓的方法来解决这个问题是非常困难的。我在实践中看到的数据有太多的边缘噪声,可能(通常是)一些噪声连接单独的blob,或者将单个blob分成几个(明显的)连接组件。我想基于区域的方法,因为区域覆盖似乎比边缘形状小得多。

P.P.P.P.S。根据要求,这是一个由于噪音导致切割的示例:

和一个有很多噪音的样本,但仍然是一个明显的斑点:

编辑虽然Bharat建议部分解决方案对非重叠blob有效,但没有一个答案能够解决问题。请更多:)我将奖励任何实际的解决方案。

5 个答案:

答案 0 :(得分:3)

我会尝试拟合高斯混合模型,然后使用均值和协方差矩阵在数据上拟合椭圆。即使重叠和小噪声斑点,这样的模型也可以工作。您拥有的数据将是黑色像素的坐标,您可以在数据上使用GMM。这种方法的一个问题是你需要事先了解需要跟踪的blob的数量,如果你能想出一个启发式算法,GMM应该非常有效地解决这个问题。

答案 1 :(得分:2)

填充洞[1],检测轮廓[2],并在每个轮廓矩形上使用矩来查找方向,偏心等[3]

PS。:断开的轮廓(噪音)可以按尺寸过滤掉。

答案 2 :(得分:1)

您可以先过滤掉contours by area

关于分离重叠blob,这可能是一个棘手的(我可能会说,不可能任意重叠)与这个二进制图像,也许你应该用原始图像或至少前面的一些步骤 - 处理。

OpenCV的fittEllipse也会有所帮助。

答案 3 :(得分:0)

这不是一些基本的编程问题,这涉及先进的图像处理技术。据我所知,“图像处理,形态学”是您的目标点。你可以在“图像形态学”中学习一些基本结构,如“膨胀,侵蚀”等等......那么你就有了解决这个问题的基础知识。

答案 4 :(得分:0)

由于你有大小和方向,你可以绘制每个椭圆,并使用模板匹配。

请参阅tutorial here.

相关问题