我看了看。有人知道如何跟踪Aforge的斑点吗?我知道他们没有实施它,但是由于我使用的其余代码,我确实需要使用Aforge。我看到了一些对卡尔曼过滤的引用,但我需要一些实施,而不是理论。

tnx,v。

有帮助吗?

解决方案

Aforge.net Blobcounter将提供斑点发现,尽管它很简单,并且不支持“破碎”斑点。如果您想实现一些简单的斑点跟踪,您可能会考虑一些事情:

  1. 如果您的斑点偶尔会分散,则可能需要执行一些聚类(查找大众位置的中心组以组合小片段),以衡量该位置。在分析多个帧时,这增加了遇到边界条件(例如破裂的边界条件)的机会,因此必须考虑这一点。或者,如果您对条件(例如照明)有良好的控制,那么这可能就足够了。在斑点发现之前,可以通过重复的扩张/侵蚀操作来解决次要(只有几个像素)断裂,尽管这也可以扩大噪声并降低位置精度。

  2. 对于实际跟踪,您有一些方法。 Kalman过滤可以为您提供非常良好的精度(子像素),因为它可以整合来自多个帧的信息。如果您不需要这种准确性,则可以考虑一种非常简单的算法,例如总是选择最接近最近位置的足够大的斑点。如果对象的移动不太快,并且在跟踪您的对象附近没有其他斑点,则可以使用。如果您需要更好的分析性能,则可能还可以估算最后两个帧的速度,并使用它来限制搜索斑点时必须考虑的区域。

  3. 如果您需要跟踪高速对象,那将变得更具挑战性。在这里,您可能会尝试将Blob-Finding与模板匹配结合起来。您可以基于斑点键入创建模板,并将模板与后续斑点匹配,以根据其模式而不仅仅是它们的大小/位置对其进行评分。这要求斑点随着时间的流逝而显得相当一致,这意味着模型的物理形状和照明条件必须保持固定。


回答您的问题:

今天早上只有几分钟,所以没有实际的代码,但是基本想法是:

  1. 仅考虑大于可配置的大小的斑点(您可能必须从经验上确定这一点。)

  2. 保留有关发现的最后两个斑点位置以及采样时间的信息。让我们在R2,P1和P0中称这些向量有时T1和T0。

  3. 如果您假设速度变化缓慢,则在新位置的时间T2 p2 = p1 +(t2-t1)*(p1-p0)/(t1-t0)处的时间t2进行初步估计。这可能是一个很好的假设,因此您需要通过在所需的动作范围内捕获对象来验证此问题。

  4. 您可以选择使用此估算将BLOB搜索区域限制为以估计位置为中心的子图像。执行斑点发现后,将最接近估计位置的斑点作为新位置测量。

上述效果的一个副作用是,您可以使用估计值,如果出于某种原因,斑点发现在一帧中失败。允许这种外推太久是很危险的,但是它可以使您对轻微的噪音尖峰有一些容忍度。

您可能会看到如何进一步进一步进行以包括最近帧加速度的估计,或集成从多个帧的速度/加速度,以更好地推断下一个样本的可能位置。您还可以开始相信,比实际测量比实际测量更精确(也许是准确的)估计值(来自当前和以前的帧的累积数据)。最终,您会使用Kalman过滤器之类的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top