强大的blob跟踪

Ale*_*x I 9 python opencv feature-extraction computer-vision

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

输入示例:

期望的输出:

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

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

噪音示例:

重叠和噪音的示例:

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

具有重叠的图像应该被计为两个斑点,因为该区域太大而单个斑点无法很好地覆盖它.

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

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

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

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

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

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

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

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

PPPPS根据要求,这是一个由于噪音导致切入的示例:

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

编辑没有一个答案实际上解决了这个问题,尽管巴拉特提出了一个部分解决方案,它可以很好地解决非重叠的blob问题.请更多:)我将奖励任何实际解决方案的额外奖励.

Bha*_*rat 3

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