机器视觉 增强现实分享 http://blog.sciencenet.cn/u/wanglin193

博文

Lucas-Kanade 算法

已有 24388 次阅读 2010-9-28 21:10 |个人分类:增强现实|系统分类:科研笔记| 算法, flow, Lucas-Kanade, 光流

 

2006年的时候,做人脸跟踪AAM项目,参考了一篇叫做“L-K算法20年”的文章[1],看得不知所云。现在再看,觉得他们有故弄玄虚的意思。比如说,既然大家都在Tamplate上计算梯度下降,那为什么还要讲那么多正向warp,反向warp的。反正当时是看得恶心了。我还是按自己的理解写写吧,也许写得不对,请大家指正。

 

L-K算法(或称光流法)本质上是一种基于梯度下降的优化方法。对于梯度下降法我的理解是这样:


对于一个标量函数y=f(x),可以看作是一个曲线,在一个很小的范围内可以认为是直线(局部线性),求函数最小值的下降方向为梯度的负方向Δx=-Δy/tan(th)。对于一维函数梯度tan(th)=dy/dx,它的倒数很容易得到。而对于x是向量的情况,对应的梯度的"倒数"就变成求逆矩阵了。比如图像每个点的梯度(dI/dx,dI/dy)就是一个矢量,一个点求逆矩阵显然不可以,但是一个图像块内的N的点构成2*N矩阵,就可以求伪逆了(最小二乘法)。对于变量x是更高维的情况,比如函数y是和很多变量相关的,每个点的梯度dy/dx由变量x的每个分量有关,变成了高维矢量(dy/dxi),尽管这时y和x的变化关系可能无法线性表达,但总是可以通过中间变量利用链式法则求dy/dx,或者利用数值法求解,比如给xi一个小的增量,y也相应产生一个增量,二者比值可以近似梯度矢量dy/dxi,这样仍然可以得到上边所说的Δx伪逆解。

 

实际上图像中的物体都可以表达为局部图像块的集合,比如利用三角剖分或者稀疏的特征点,对这些区域单独使用L-K算法,然后用全局的模型参数进行拟合(去除坏的匹配块),这样就有可能实现复杂的目标比如人脸图像的跟踪。著名的AAM人脸建模方法基本上就是这个思路。

 

具体算法的推导可参考我总结的文档 L-K算法文档 。



 关于文档最后的那个方程组 Δp=dp*E 的说明:

1 图像和模板的差是图像匹配的原动力,它分别和dP矩阵中的的6个N维矢量做内积得到参数p的更新值p=p+Δp,从而驱动模板动起来。这个求解过程是个迭代过程,无法保证收敛到全局最优解。用多分辨率法求解是个好的选择,可参见OpenCV里的光流法文档。

 

2用来跟踪的光流法是用前一帧的图像块作为模板,用当前帧图像进行匹配的,这个过程要实时计算二阶逆矩阵(p的位数是2)。而在有些应用中,dP的步骤可以只在模板T上离线进行,可称作训练。模板也可以扩展为一个包含更多参数的模型,比如著名的Active Appearance Model。有时warp过程无法显式表达,计算dP可以用给p加扰动(perturbation)的方法。CMU的文章把Cootes的那套AAM用L-K光流的框架来描述,据他们自称,电影Avatar就是用他们的方法做人脸特征跟踪的。

 

3 参考文章1中把H=JTJ叫作Hessian矩阵,它是对J求伪逆过程的一个副产品,和表达二阶偏导的Hessian阵不同。不过H的作用很重要,它能反映图像数据的统计特性。如果不幸H是奇异的,也就是说无法求逆矩阵,那么说明这个图像模板包含的各个梯度方向的信息不足以进行跟踪应用。对于光流应用(p的维数是2,只有平移运动),H的对应的特征值(eigenvalue)都要远大于0,才是“好的特征”(角点),这个特性又被用来做corner detection。有著名的文章Good features to track专门讨论此事。

 

参考文献:

[1] Simon Baker and Iain Matthews. Lucas-Kanade 20 years on: A unifying framework.

[2] Jianbo Shi and Carlo Tomasi. Good features to track.





https://blog.sciencenet.cn/blog-465130-367906.html

上一篇:摄像机标定(Camera calibration)笔记
下一篇:如何跟踪一本书?
收藏 IP: 58.247.12.*| 热度|

0

发表评论 评论 (2 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-25 08:16

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部