论文:Dense trajectories and motion boundary descriptors for action recognition
2013年发表在IJCV上的一篇文章,被引1871次,介绍了DT(密集轨迹)算法。
论文:Action Recognition with Improved Trajectories
iDT_code : http://lear.inrialpes.fr/people/wang/improved_trajectories
2013年发布在ICCV上的一篇文章,被引3542次,介绍了改进的iDT(改进密集轨迹)算法。
这两篇都是H. Wang的文章,前者要更早一些,介绍了DT(Dense Trajectories)算法。后者则在前者的基础上进行了改进(improved),主要是引入了对背景光流的消除方法,使得特征更集中于对人的运动的描述。
1 密集轨迹算法(DT算法)
1.1算法基本框架
如图所示即为算法的基本框架,包括密集采样特征点,特征点轨迹跟踪和基于轨迹的特征提取几个部分。后续的特征编码和分类过程则没有在图中画出。下面分别介绍一下这几个部分:
- 密集采样特征点:
DT方法通过网格划分的方式在图片的多个尺度上分别密集采样特征点。在多个空间尺度上采样能保证采样的特征点覆盖了所有空间位置和尺度,通常8个空间尺度已经非常足够了,若图像很大,可以适当增加。后续的特征提取也是在各个尺度上分别进行的。特征点采样的间隔(即网格的大小)W根据经验通常取W=5(其实W=5是可以通用的一个比较好的值)。
由于下一步的目标是在时间序列上跟踪这些特征点,但在没有任何结构的均匀区域(比如一块白色墙壁中间的点,或者一件黑色大衣中的点)中跟踪特征点是无法实现的。因此在进行特征点跟踪前要先去除一些这样的特征点。
此处的方法是计算每个像素点自相关矩阵的特征值,并设置阈值去除低于阈值的特征点。阈值由下式决定,式中0.001是经验值,(λ1i,λ2i)是图像I中像素点
i 的特征值:
应用上式,下图即为密集采样的一个示例效果图片,可以看出,同质区域的大部分采样点已被删除。
- 特征点轨迹跟踪:
得到了密集采样后的特征点,现在我们要对这些点进行跟踪得到轨迹,对轨迹的追踪是通过光流。设上一步中密集采样到的某个特征点的坐标为Pt=(xt,yt),则我们用下式来计算该特征点在下一帧图像中的位置,这样该点在后续连续帧的位置连起来就形成了一个轨迹。
式中ωt=(ut,vt)为密集光流场,是由It和It+1计算得到的,u和v分别代表光流的水平和垂直分量。而M则代表中值滤波器,尺寸为3*3。也就是说该式是通过计算特征点邻域内的光流中值来得到特征点的运动方向的。
另外作者提到,由于特征点的跟踪得到的轨迹随着时间会存在漂移现象,也就是从初始位置移动到很远的地方,故长时间的跟踪是不可靠的,所以每L帧要重新密集采样一次特征点,重新进行跟踪。在DT/iDT算法中,选取L=15。这个漂移现象我觉得解释应该是说,跟踪本身就不是绝对的,因为要计算光流场,也取决于中值滤波器的平滑操作,越跟踪,跟踪得到的轨迹可能与原始绝对轨迹之间存在更大误差,进而导致作者所说的长时间的跟踪是不可靠的,需要L帧重新采样一次再跟踪。
对于每个帧,如果在W×W邻域中找不到跟踪点,则会采样一个新点并将其添加到跟踪过程中,以确保轨迹的密集覆盖。至于为什么要在没有跟踪点的W * W邻域添加新点然后跟踪它?我认为就是要保证每一帧的W * W邻域都要有跟踪点,这样来实现密集轨迹,后续在得到众多轨迹后,会删除静态的轨迹和突出增大位移的轨迹,保留正常轨迹。
- 轨迹描述子
(1)轨迹形状描述子:
轨迹本身也可以构成轨迹形状特征描述子。对于一个长度为L的轨迹,其形状可以用
来描述,其中位移矢量ΔPt=(Pt+1−Pt)=
。在进行正则化后就可以得到轨迹特征描述子了。正则化方式为:
最终得到的轨迹特征为15*2=30维向量。
除了轨迹形状信息,我们还设计了描述子来嵌入外观 ( appearence ) 和运动 ( Motion ) 信息。
(2)