阅读:1167回复:0
基于Linear Predictor的Tracking
接触这一类的跟踪方法,是2015年初通过一篇论文:Efficient Learning of Linear Predictors for Template Tracking . 其实在这篇论文前好几年就有非常多这一类论文了。当时由于看到论文作者放到youtube的视频,效果很好,所以就学习了一下。 不过最终我也只是实现了Offline的LP tracker。作者本人对LP的训练复杂度做了很大优化,其中主要是通过对训练计算的一个算法进行了修改,让训练部分的效率提高到可以在手机上实时。由于数学基础薄弱,这个地方在最后一直卡住了。希望看到这篇文章的人如果有这方面经验的给予指导。 一般来说对于图像的跟踪,有几种思路。有针对全图进行跟踪的,也有针对图像中的特征点进行局部跟踪的。LP这种方法主要是针对全图进行跟踪,但是它的思路比较特别。针对全图进行跟踪自然是利用图像的像素颜色,例如使用SSD或者NCC等对两幅图进行匹配,一般都是先选定一个区域,用像素点的灰度值进行差异比较,最终选取差异最小的区域作为最佳匹配。而LP采取的思路很奇特,作为一个很少接触深入算法的码农,最初接触这种非常「数学」的思路时还是比较震撼的。
![]() 上面一幅图其实就已经把整个思路说明白了,如上的这幅图像,看到一定密度的白色取点为H,而红色的线框的四个顶点表示为Y。 再细化的来说,H也就是在一幅图像中按照一定的密度均匀的取得颜色值,代表着某图像颜色(灰度)的分布情况。对于图像来说可以说这就是图像的一种具备唯一性的特征。 而Y就是一幅图像四个顶点的位置信息,也是跟踪匹配算法想要计算的结果。 从肉眼的角度,颜色值分布和图像位置是存在关系的。比如,把一个图像左移,位置自然是左移了,而(原位置)颜色值分布也产生了左移的差异。 LP算法的模型 Y = A H 意义在于,通过计算一个矩阵A,在颜色分布H 和 顶点位置信息 Y之间建立一种关系。 这样对于当前摄像头取到的一幅图像,只需要通过获取颜色得到H,然后通过A矩阵和H矩阵相乘就可以直接得到图像当前的位置。如下图,输入不同的图像可以直接得到位移。 ![]() 注意实际中Y 和 H 都是取相对于原图像的差值。 Linear Predictor分析和测试 如果接触过光流法(KLT OpticalFlow)或者ESM算法或者其他类似的算法,会清楚,在一个小的位移变化、旋转变化或者尺度变化时,同一位置图像的颜色变化和位置是有一定规律的。比如位移为0的时候,同一位置图像颜色不发生变化,位移非常小的时候,这个变化也会很小。但是如何根据变化直接获取位置呢,这里LP使用的是基于大量的训练。 训练 首先把一幅图像置为标准状态。这个状态就是跟踪的起点,以此为基础需要计算下一帧图像的状态所对应的位置。所以需要预先把下一帧全部可能的姿态变化都计算出来(位移、旋转、缩放都在一个小范围内进行随机组合,这里一般会到几千种姿态)。这几千种姿态计算出来以后,每一个姿态所对应的Y,以及H自然也就计算出来了,通过大量数据最终计算出一个A矩阵。作为上文提到的最终姿态计算矩阵。 具体计算A的过程如图,具体推导过程就不写了,感兴趣的看原文。值得一说的是,作者基于这个公式后面进行了大幅度优化,极大缩短了这个训练的时间。此部分个人理解的不到位,没有实现优化后的手机端实时训练,所以我的实现都是基于下面这个基础公式,训练时间较长(针对320x240的图,台式机都要几秒十几秒)。 ![]() ![]() ![]() |
|
最新喜欢:![]() |