Lucas-Kandade 算法 opencv中的cvCalcOpticalFlowLK()与cvCalcOpticalFlowPyrLK()原理及其部分代码理解。

  

本文部分出自:http://hi.baidu.com/lin65505578/item/b364c3b45f12a39c194697a5

在《learning opencv》中谈论光流计算的部分中,对两个函数的cvCalcOpticalFlowLK()与cvCalcOpticalFlowPyrLK()参数区别,觉得奇怪。

void cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr, CvSize win_size, CvArr* velx, CvArr* vely );

void cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr, CvArr* prev_pyr, CvArr* curr_pyr,
                             const CvPoint2D32f* prev_features, CvPoint2D32f* curr_features,
                             int count, CvSize win_size, int level, char* status,
                             float* track_error, CvTermCriteria criteria, int flags );
对比这两个函数,前者cvCalcOpticalFlowLK(参数中包含光流速度(稠密的光流场) CvArr* velx, CvArr* vely ,然而   

cvCalcOpticalFlowPyrLK的参数中确实两个特征点数组CvPoint2D32f* prev_features, CvPoint2D32f* curr_features。

对于cvCalcOpticalFlowLK函数的原理,《learning opencv》中介绍的比较清楚,也可以参考http://www.360doc.com/content/11/0210/17/5367933_91913320.shtml这篇博文。

 

cvCalcOpticalFlowPyrLK函数给人的感觉更像块匹配,用归一化相关求出特征点在下一帧的位移,这好像和光流机Lk算法关系不大。查阅了相关文献,思考 cvCalcOpticalFlowPyrLK的原理,确实和块匹配类似,只不过没有空归一化相关的方法,用的偏导的方法。由偏导的方法也就和LK算法及光流挂上了钩。

金字塔LK算法(cvCalcOpticalFlowPyrLK)的两个特点,一、金字塔原理;二、偏导方法求解位移。

金子塔原理:

金字塔LK算法针对较大的运动图像序列。如果用一个大的窗口来捕获大的运动,往往会违背运动连贯的假设。也就是,这个大窗口内的子图像和原先的子图像发生了较大的变化。图像金子塔可以解决这个问题,最初在较大的空间尺度上进行跟踪,在通过对图像金字塔向下直到图像像素的处理来修正初始运动速度(位移)的假设。通俗的将,就是通过下采样是的大窗口变为小窗口,以此来满足运动连贯的假设。

偏导方法求解位移:

cvCalcOpticalFlowPyrLK中把特征点的速度和方向等价位特征的位移及其方向。

E为误差大小,wx,wy为x方向和y方向的窗口大小,I(x,y)为前一帧图像,J(x,y)为当前帧图像。一般的,假设如果是刚性运动,只要用以合理的搜索路径找位移d使得E最小,是块匹配的一种方法。

在金字塔LK算法,对E(d)求d的偏导,使得偏导数为0,从而求得相应的d。

It=I(x,y)-J(x,y),J(x+dx,y+dy)在d=0出泰勒张开,则13式可以化为

 

dopt 是d的最优解,上式即为Lucas-Kandade 的光流方程,在实际求解过程中需要进行迭代求解。

 

先从最底层金字塔算起,对应图像I中的取样点,利用上述公式在图像J中以图像I中的取样点为中心查找最匹配点的移动距离,再到上一层,对应图像I中的取样点,在以刚才求得的下一层图像J中最匹配点为中心继续查找该层最匹配点移动的距离。一次类推到图像的最上层(无缩放图像),找到最匹配的点。

 

 

 


 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值