65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的计算机视觉应用程序 - 第 III 部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (25投票s)

2009 年 5 月 9 日

CPOL

9分钟阅读

viewsIcon

124240

downloadIcon

9028

Meanshift 跟踪实现

引言

承接 第二部分,本文介绍了一种跟踪算法。第二部分中提出的质心跟踪器实际上并不是一种跟踪算法,而是一个巧妙的技巧。所有“跟踪器”所做的就是找到反向投影图像的质心,并在其周围放置一个边界框——这并不是跟踪的定义。因此,本文介绍了一种在计算机视觉社区中非常著名的跟踪算法,称为均值漂移跟踪。本文基于 Comaniciu 等人的一系列研究论文 [1]、[2]、[3]。

继续讲,视觉跟踪可以描述为在视频帧中识别一个对象,然后在后续帧中跟踪该对象。它不包括对象的检测。跟踪假定对象是手动或自动选择的。在本文中,我们将使用手动对象选择。一旦选择了对象,就会基于某些属性创建某种模型,然后使用该模型在后续帧中跟踪对象。如上述研究论文所述,均值漂移使用颜色作为属性,并使用直方图对该属性进行建模。我们已经在 第一部分 中介绍了这些先决条件。

均值漂移跟踪 - 高层概览

给定一个对象,我们创建一个颜色直方图——称之为目标直方图。当我们获取下一帧时,我们在上一帧对象附近查找颜色直方图相似的对象。一旦找到该对象,我们就停止查找它,等待获取另一帧。这个过程一遍又一遍地重复,从而实现跟踪。此时,必须提出两个问题:

  1. 我们怎么知道我们找到了我们的对象?
  2. 我们怎么搜索对象附近的区域?

第一个问题的答案是,我们使用某种直方图匹配,例如巴氏系数(参见第一部分)。因此,我们创建了我们可能对象的直方图,并将其与我们的目标直方图进行匹配。如果足够接近,我们就假设它是同一个对象;如果不是,我们就移动到附近区域,创建一个直方图,然后再次进行匹配,直到找到足够接近的对象。

在附近区域进行搜索的方式是算法得名的技术:均值漂移。均值漂移是模式搜索算法。换句话说,给定一个概率分布(也称为归一化直方图),均值漂移算法会寻找该直方图的峰值。

基础均值漂移跟踪

我们首先选择对象的属性来对对象进行建模。我们将颜色作为属性,将归一化直方图作为我们的模型。因此,在视频帧中,我们通过在目标对象周围放置一个边界框(也称为 ROI,兴趣区域)来选择目标对象。假设边界框中的所有内容(包括背景)都属于目标,我们创建归一化颜色直方图。

现在我们获取下一帧,并将边界框放置在与上一帧相同的位置,然后创建候选归一化颜色直方图。

接下来是均值漂移部分。均值漂移算法的迭代包括以下步骤 3 到 5:

  1. 在 ROI 中创建一个目标模型 ,形式为基于其特征(最常见的是颜色)的直方图。对目标直方图进行归一化。
  2. 在下一帧图像中,在上一帧图像中目标位置“x”处创建一个候选模型 直方图。对候选直方图进行归一化。
  3. “x”附近的 ROI 中的每个像素“I”都提供一个加权样本。假设其颜色在直方图的 bin u 中,则像素提供的权重为:
  4. 更新均值漂移向量:
  5. 更新当前位置并迭代:

上述步骤的效果是跟踪视频帧序列中的对象。权重很重要,因为否则样本只是位于像素位置,因此均匀分布。均值漂移算法之所以有效,是因为加权比(上面用红色标记)偏向于一个模式,因为颜色更有可能在正确的方向上匹配。因此,平均而言,权重在更靠近真实位置时会更大。不要被数学吓倒——这是怎么回事:

下表显示了均值漂移的计算。X 和 Y 是坐标,RGB 是像素颜色值,Bin 是对应于 RGB 颜色值的直方图索引, 是目标直方图 bin 的值, 是候选直方图 bin 的值。

新质心找到如下。我们不断移动质心,直到找到可能的目标,即使用巴氏系数匹配直方图。

Comaniciu 等人提出了一种对基本均值漂移跟踪的改进:一旦找到新质心,我们就创建一个 ROI 下图像的直方图,并找到巴氏系数(称之为 BC1)。我们以小增量移动质心并创建直方图。然后,只要移动质心的巴氏系数小于 BC1,我们就继续将质心朝向目标移动。此外,我们还跟踪质心与前一位置的移动距离以及均值漂移迭代次数。通过使用前一质心与当前质心之间的欧氏距离来找到质心移动。如果质心移动和均值漂移迭代次数小于某个阈值,我们就继续运行均值漂移算法。出于实际考虑,使用阈值很重要,因为如果跟踪器丢失了,我们不希望陷入无限循环!

基于核的均值漂移跟踪

在基于核的均值漂移中,将核轮廓覆盖在 ROI 上,并基于核来创建模型。Comaniciu 等人 [3] 提出的跟踪器使用下面的 Epanichnikov 核。由于该核的形状,ROI 中心的像素值将大于边缘像素值,这使得跟踪器能够拒绝干扰背景。

基于核的均值漂移与基本均值漂移之间有一个关键区别。当在基于核的均值漂移跟踪器中创建目标或候选模型时,会在 ROI 中使用合适的核,并使用与颜色像素值对应的核值来创建直方图,而不是实际的颜色值。在基于核的均值漂移跟踪器中创建模型(即直方图)的过程与平常相同,除了不是将相应 bin 增加 1,而是将核在该位置的值添加到 bin 中。例如,如果一个像素颜色值落在 bin 3 中,并且该像素处的核值为 0.843,那么我们将 0.843 添加到 bin 3,而不是增加 bin 的值。使用 Epanichnikov 核,bin 值“k”看起来会像这样(方程 2b 和 2c 来自 Epanichnikov 轮廓)。

使用 Epanichnikov 核处理 5x5 像素的 ROI 可能如下图所示。我们可以看到中心附近的像素值比边缘的像素值大。

背景加权均值漂移跟踪

背景始终是视觉跟踪中的一个顾虑。当目标和背景颜色相同时,跟踪器很可能会丢失。Comaniciu 等人 [3] 提出了一种均值漂移算法的变体,其中计算 ROI 周围背景区域的直方图,并将其与 ROI 的直方图融合以创建更可靠的模型。为 ROI 窗口周围的区域创建直方图。可以通过实验选择合适的区域。对于每个 bin,然后根据以下方法导出权重:取 1 和该 bin 中最小的非零数之间的最小值。如果 是归一化直方图, 是最小的非零条目,那么权重将根据以下公式得出:

权重用于降低在背景中突出的特征(即 值小)的重要性——这在下面给出:

  1. 从背景直方图中获取最小的非零值
  2. 对于目标直方图中的每个 bin
    1. 查找
    2. 将权重应用于目标模型:

Using the Code

步骤 1:选择直方图大小 - 默认值为 4x4x4。

步骤 2:选择跟踪器类型。

步骤 3:单击“加载序列”按钮并选择包含 JPG 或 BMP 文件的文件夹。

步骤 4:使用鼠标在图像中选择一个区域 - 右键单击鼠标并拖动。这将创建所选区域的颜色直方图。目标直方图显示为红色,在跟踪期间不会改变。红色 ROI 用于目标,黄色用于背景。

步骤 5:单击“开始跟踪”按钮以查看跟踪效果。

对于均值漂移,候选直方图显示为蓝色,并在跟踪期间改变,因为它是在跟踪器“认为”是目标区域的直方图。质心和巴氏系数显示在屏幕上。对于质心,仅显示质心信息。

展望未来

我没有实现论文中描述的比例适应。比例适应意味着当对象远离和靠近相机时,ROI 应分别收缩和扩展。该论文建议评估比当前 ROI 小和大的比例下的巴氏系数,然后将 ROI 大小设置为给出最大系数的大小。此外,我鼓励读者实现 CAMShift 跟踪器 [4]。到目前为止的一系列文章都包含了实现 CAMShift 跟踪器所需的所有信息,而且该论文易于理解——祝你好运!

致谢

对于使用的任何第三方代码或材料,请参考 第一部分 中的“兴趣点”。

历史

  • 版本 1.0

参考文献

  • [1] D. Comaniciu 和 P. Meer,“Mean Shift Analysis and Applications”,Proc. Seventh International Conference Computer Vision,pp 1197 – 1203,1999 年 9 月。
  • [2] D. Comaniciu、V. Ramesh 和 P. Meer,“Real-Time Tracking of Non-Rigid Objects Using Mean Shift”,Proc. 2000 IEEE Conference Computer Vision and Pattern Recognition,vol. II,pp. 142 – 149,2000 年 6 月。
  • [3] D. Comaniciu、V. Ramesh 和 P. Meer,“Kernel-Based Object Tracking”,IEEE Transactions on Pattern Analysis and Machine Intelligence,Volume 25,No. 5,2003 年 5 月。
  • [4] Gary Bradski,“Computer Vision Face Tracking For Use in a Perceptual User Interface”,Proc. IEEE Workshop Applications of Computer Vision,pp. 214 – 219,1998 年 10 月。
© . All rights reserved.