目标跟踪基础:目标表示方法与特征提取

大家好,我是你们的老朋友。今天咱们聊聊目标跟踪里最基础、也最核心的东西——怎么把目标“描述”给计算机听。

你想想看,计算机就是个“脸盲”。它看到的是一堆像素点,根本不知道哪个是车、哪个是人。所以,我们得教它:“看好了,这就是你要跟的那个目标”。怎么教?这就是目标表示和特征提取要干的事。

核心思想:目标跟踪的本质,就是在连续帧里找到“长得最像”的那个区域。而“长得像不像”,全靠特征和相似度度量说了算。

1. 目标表示方法:点、框、轮廓

我个人习惯把目标表示分成三个层次。从简单到复杂,各有各的适用场景。

1.1 点表示法

最简单粗暴的方式。用目标的中心点或质心来表示。比如跟踪一个乒乓球,一个点就够了。

优点:计算量极小,适合实时性要求高的场景。
缺点:信息量太少,一旦目标被遮挡或形变,基本就丢了。

我在项目中遇到过用点表示跟踪无人机的情况。嗯,飞得稳的时候还行,一遇到树枝遮挡,点就飘到天上去了。后来我加了点预测机制才稳住。

1.2 框表示法

这是工业界最常用的方法。用矩形框(Bounding Box)把目标框起来。通常用 (x, y, w, h) 四个参数表示——左上角坐标、宽、高。

说白了,框表示法就是告诉计算机:“目标就在这个矩形里,你盯着它别跑。”

优点:简单直观,配合深度学习效果很好。
缺点:框里会包含背景信息,影响跟踪精度。而且目标旋转时,矩形框会框进大量无关区域。

我的小技巧:如果目标经常旋转,可以试试旋转矩形框(带角度参数),或者直接用最小外接矩形。我在做车辆跟踪时吃过这个亏——车转弯时,普通矩形框里一半都是马路。

1.3 轮廓表示法

最精细的方式。用目标的边缘轮廓来描述。比如用一系列点连成的多边形,或者用分割掩码(Mask)。

轮廓表示法的好处是:完全排除了背景干扰。但代价是计算量大,而且需要精确的分割算法。

我曾经在医学影像跟踪里用过轮廓表示——跟踪细胞边缘。效果确实好,但每帧都要跑分割模型,速度感人。

表示方法 精度 速度 抗遮挡 适用场景
点 低 极快 差 小目标、高速运动
框 中 快 中 通用场景、深度学习
轮廓 高 慢 强 精细跟踪、医学影像

2. 特征提取:让计算机“看懂”目标

有了表示方法,还得有特征。特征就是目标的“身份证”。我挑三个最经典的来讲。

2.1 颜色直方图

最简单、最直观的特征。统计目标区域内各颜色出现的频率。比如红色占30%,蓝色占20%……

为什么好用?因为颜色对旋转、缩放不敏感。你想想看,一个红苹果不管怎么转,它还是红的。

但要注意:颜色直方图对光照变化非常敏感。同一个苹果,在阳光下和阴影里,颜色直方图可能完全不同。

避坑指南:我曾经在室外做行人跟踪,只用颜色直方图。结果人从树荫下走到阳光下,跟踪器直接跟丢了。后来我改用HSV颜色空间,把亮度和颜色分开处理,情况好多了。

2.2 HOG(方向梯度直方图)

HOG 是行人检测的“神兵利器”。它统计图像局部区域的梯度方向分布。

说白了,HOG 描述的是目标的形状和纹理。比如人的轮廓、车的边缘,在梯度方向上都有明显特征。

HOG 的流程大致是:

  1. 计算每个像素的梯度大小和方向
  2. 将图像分成小细胞单元(如8×8像素)
  3. 在每个细胞单元内统计梯度方向的直方图
  4. 将相邻细胞单元组合成块,进行归一化
  5. 把所有块的直方图串联起来,就是HOG特征

我个人觉得HOG最牛的地方是它对光照变化不敏感。因为梯度是局部变化,光照均匀变化时梯度基本不变。

2.3 LBP(局部二值模式)

LBP 是一种纹理特征。它的思路很巧妙:比较中心像素和周围像素的大小关系。

具体做法:

  • 取一个3×3的窗口
  • 中心像素与周围8个像素比较
  • 大于中心像素的记为1,小于的记为0
  • 得到一个8位的二进制数,就是该点的LBP值

LBP 的好处是计算极快,而且对单调灰度变化不敏感。我在做工业质检时用过LBP——检测布匹表面的纹理缺陷,效果出奇的好。

3. 相似度度量:怎么才算“像”?

特征提取完了,接下来要比较两个目标“像不像”。这就用到相似度度量了。

3.1 巴氏距离(Bhattacharyya Distance)

巴氏距离常用于比较两个概率分布(比如颜色直方图)的相似度。

公式长这样:

d(H1, H2) = sqrt(1 - sum(sqrt(H1(i) * H2(i))))

值越小,说明两个分布越相似。巴氏距离对直方图的“形状”比较敏感,适合颜色直方图的匹配。

我记得第一次用巴氏距离做跟踪时,发现它对背景干扰有一定的鲁棒性。因为它是整体分布的度量,局部噪声影响不大。

3.2 欧氏距离(Euclidean Distance)

最直观的距离度量。就是两点之间的直线距离。

d(x, y) = sqrt(sum((xi - yi)^2))

欧氏距离简单粗暴,但有个问题:它对特征的尺度很敏感。比如一个特征取值范围是0-1,另一个是0-1000,欧氏距离会被大尺度特征主导。

我的建议:用欧氏距离前,一定要做特征归一化。否则你算出来的距离,说白了就是大尺度特征的“一言堂”。

3.3 余弦相似度(Cosine Similarity)

余弦相似度衡量的是两个向量的方向差异,而不是大小差异。

cos(theta) = (A · B) / (||A|| * ||B||)

值越接近1,说明方向越一致。余弦相似度的好处是:不受向量长度的影响。比如两个特征向量,一个长度是另一个的10倍,但只要方向一致,余弦相似度就是1。

我在做人脸验证时特别喜欢用余弦相似度。因为同一个人在不同光照下,特征向量的长度可能变化很大,但方向基本不变。

度量方法 适用特征 对尺度敏感 计算速度
巴氏距离 直方图、概率分布 不敏感 中
欧氏距离 数值特征向量 敏感 快
余弦相似度 高维稀疏特征 不敏感 快

知识体系总览

下面这张图,是我自己总结的本章知识结构。你可以把它当作一张“地图”,随时回来查阅。

目标跟踪基础 目标表示方法 点表示 框表示 轮廓表示 特征提取 颜色直方图 HOG LBP 相似度度量 巴氏距离 欧氏距离 余弦相似度 目标跟踪 = 目标表示 + 特征提取 + 相似度度量

好了,这一章的内容就到这里。目标表示、特征提取、相似度度量,这三者是目标跟踪的“三驾马车”。理解透了,后面的算法学起来就轻松多了。

可可精品资料库