Python 斑点的鲁棒跟踪

Python 斑点的鲁棒跟踪,python,opencv,computer-vision,feature-extraction,Python,Opencv,Computer Vision,Feature Extraction,我有一个图像特征提取问题。输入图像为二值图像(黑白),可能包含面积和纵横比近似已知的斑点。这些需要使用一些最佳拟合算法来拟合椭圆 输入示例: 期望输出: 可能有多个BLOB(零个或多个),其数量事先未知。所有水滴的近似面积和纵横比是已知的(并且是相同的)。图中有多少,它们的位置、方向和实际大小是我想要找到的。根据实际找到的大小和纵横比,输出应该是每个blob的最佳拟合椭圆 造成这种困难的是噪音和可能的重叠 噪音示例: 重叠和噪声的示例: 噪声图像中的斑点可能有洞,也可能有散布在周围的其他

我有一个图像特征提取问题。输入图像为二值图像(黑白),可能包含面积和纵横比近似已知的斑点。这些需要使用一些最佳拟合算法来拟合椭圆

输入示例:

期望输出:

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

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

噪音示例:

重叠和噪声的示例:

噪声图像中的斑点可能有洞,也可能有散布在周围的其他小斑点。其他小斑点不被计算在内,因为它们太小,并且没有覆盖足够密集的任何区域,不能被认为是真正的匹配

重叠的图像应计为两个斑点,因为面积太大,单个斑点无法很好地覆盖

评估潜在配合的一个可能指标是:

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

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

我可以看到如何使用蛮力来解决这个问题,例如,尝试足够多的不同可能的匹配来很好地采样搜索空间。我想不出比暴力更快的方法了

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

另外,不能假设一个blob已连接。可能有足够的噪音将其分解为不连续的部分

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

p.p.p.S.我认为用任何基于轮廓的方法都很难解决这个问题。我在实践中看到的数据有太多的边缘噪声,可能(通常是)噪声位连接单独的blob,或者将单个blob分离为几个(明显的)连接组件。我想要一种基于区域的方法,因为区域覆盖似乎比边缘形状更不爱管闲事

p.p.p.p.S。根据要求,以下是一个因噪声而导致的贯穿切割示例:

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


编辑尽管Bharat提出了一个局部解决方案,该方案对不重叠的斑点效果良好,但没有一个答案能够真正解决问题。请提供更多:)我将对任何实际解决方案给予额外奖励。

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

你填充孔,检测轮廓,并使用每个轮廓矩形上的矩来找到方向、偏心度等


注:断开连接的轮廓(噪声)可以按大小过滤掉。

您可以从过滤掉开始

关于分离重叠斑点,对于这个二值图像来说,这可能是一个棘手的问题(我敢说,对于任意重叠来说是不可能的),也许你应该对原始图像进行分离,或者至少对预处理进行一些后退


OpenCV也会有帮助。

这不是一些基本的编程问题,这涉及到先进的图像处理技术。据我所知,“图像处理,形态学”是你的目标。你可以参加一些“图像形态学”课程,了解诸如“膨胀、侵蚀”等基本结构。。。那么你就有了解决这个问题的基本原理

因为您有大小和方向,所以可以绘制每个椭圆,并使用模板匹配


请参见

谢谢,我使用
sklearn.mixed.GMM
尝试了这一点。它在无噪声的输入上表现良好,在噪声方面表现稍差,并且会被重叠的斑点弄糊涂,因为它试图找到两个非重叠的高斯点,图像可能是两个重叠斑点的总和,通常一个高斯点覆盖了两个重叠斑点的大部分,另一个小得多的高斯点覆盖了剩余的部分。我想要的不是高斯数之和,但可能是“最大高斯数”:)也没有办法暗示预期的斑点大小。如果你在跟踪一段时间,那么有一些更好的方法可以做到这一点,对于单个图像,您甚至可以查看均值漂移/核密度估计,因为您了解对象的大小。巴拉特:我正在跟踪一段时间,但我认为如果每个单独的识别都是100%准确的,那么随时间变化的部分将非常容易:)您能解释一下“均值漂移/核密度估计”吗?是的,物体的大小是已知的+/-20%,只要它不是部分地看不见或被遮挡。也就是说,你能建议更好的方法来做到这一点,依靠使用一系列的图像随着时间的推移?这是报纸。这是一个关于它的教程,如果您有每个blob的大致大小和位置(来自上一个跟踪步骤或init),可能需要一些时间来阅读