第2章 目标跟踪基础
目标表示方法 · 特征提取(颜色直方图、HOG、深度特征)
目标跟踪的第一步是如何描述目标。从经典的矩形框到灵活的轮廓,从手工设计的颜色直方图、HOG 到数据驱动的深度特征,每一种表示与特征都深刻影响着跟踪的鲁棒性与速度。本章系统梳理这些基础概念,并辅以直观的 SVG 图解。
2.1 目标表示方法
目标表示定义了跟踪器“看到”什么以及如何建模。主流表示包括矩形框、点、轮廓/分割掩码。
| 表示方法 | 描述 | 典型应用 |
|---|---|---|
| 矩形框 (BBox) | 使用 (x, y, w, h) 或 (x1,y1,x2,y2) 定义目标区域 | KCF, DSST, SORT |
| 点 (Point) | 目标中心点或稀疏关键点集合 | 光流法、点跟踪 |
| 轮廓 / 掩码 | 像素级分割区域,可描述不规则形状 | SiamMask, 视频分割 |
2.2 特征提取
特征是将原始像素转换为判别性表示的关键。以下三种特征在跟踪领域具有里程碑意义。
🔹 颜色直方图
在 HSV 或 RGB 空间统计像素分布,对旋转和部分遮挡鲁棒,但丢失空间信息。
🔹 HOG (方向梯度直方图)
通过局部梯度方向分布描述形状与边缘,对光照变化有一定不变性。广泛用于行人检测与跟踪。
🔹 深度特征 (CNN / 预训练)
利用大规模数据训练的卷积网络(如 AlexNet, ResNet, Siamese)提取语义特征,显著提升跟踪精度。深度特征通常来自高层语义层或相关响应图。
特征对比一览
| 特征类型 | 维度 | 鲁棒性 | 计算速度 | 典型跟踪器 |
|---|---|---|---|---|
| 颜色直方图 | 低 (32~128) | 光照、旋转 | 极快 | 均值漂移、Staple |
| HOG | 中 (~4000) | 边缘、形状 | 快 | KCF, DSST |
| 深度特征 | 高 (512~4096) | 语义、形变 | 需GPU | SiamRPN, ATOM, TransT |
2.3 代码示例:提取颜色直方图与 HOG
以下 Python 代码展示如何从图像区域提取颜色直方图和 HOG 特征(使用 OpenCV 和 skimage)。
import cv2
import numpy as np
from skimage.feature import hog
# 读取图像并选择目标区域 (x, y, w, h)
img = cv2.imread('target.jpg')
x, y, w, h = 120, 80, 64, 128
roi = img[y:y+h, x:x+w]
# ----- 颜色直方图 (HSV) -----
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv_roi], [0, 1], None, [50, 60], [0, 180, 0, 256])
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
# ----- HOG 特征 -----
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
hog_feat, hog_img = hog(gray_roi, orientations=9, pixels_per_cell=(8,8),
cells_per_block=(2,2), visualize=True)
print(f'HOG 特征维度: {hog_feat.shape}')