详细解释LK光流法(Lucas-Kanade)跟踪特征点附matlab不调库函数实现

LK光流法是什么

在很多场景我们都需要对特征点进行跟踪,比如人脸,无人机目标跟踪,SLAM中特征点跟踪来计算相机的姿态等等。最粗暴的方式是每次都重新计算一次特征点,然后找到前后两张图片的相同特征点,那么就可以实现跟踪。这种方法的特点是准确,因此在很多场合都有应用,如果你感兴趣可以看看这篇文章视觉SLAM中ORB特征点算法(关键点+描述子)。但是这种方法计算复杂度太高,因为每次都得遍历整个图找关键点,找完关键点后还得根据描述子找相同的特征点。事实上,如果我们不每次都找特征点,只是在第一帧找特征点。然后后面就只跟踪这个特征点像素那么就极大的减少计算量。LK光流法就是这个思想。那么怎么跟踪这个像素呢?答:“利用光流法默认的一个假设,即两个相同特征点的灰度值是一样。”因此,我们只需要建立特征点相对图片移动距离与像素的灰度值之间的关系,然后解方程求得特征点相对图片移动的距离记得实现特征点跟踪。

LK光流法怎么做

注意:你看到任何光流法都是有一个默认的前提假设那就是“某个特征点在各个帧中的灰度值是不变的,变化的只是位置关系”。你或许会问那不是很容易不成立吗?其实很多算法都是有很多前提假设的,能算出来总比算不出来好。任何算法都是在一定前提假设情况下成立的。

注意:下面提到的图片均是指的是一个视频中的某一帧图片,比如时刻t的图片指的是视频中时刻t那一帧的图片
假设我要跟踪当前时刻t位于(x,y)处的那个像素。那么我的目标就是计算出它下一个时刻t+dt的位置(x+dx,y+dy)。其中dx和dy分别是那个像素在x方向和y方向移动的距离。在前面提到了任何光流法都是默认同一个特征点像素的灰度值是不会发生变化的。也就是说原先t时刻的图片中的(x,y)处的像素灰度值与t+dt时刻图片的(x+dx,y+dy)处的灰度值是一样的。
假设第t个时刻图片的位置为(x,y)的像素灰度值为 I ( x , y , t ) I(x,y,t) I(x,y,t),同理第t+dt时刻的图(x+dx,y+dy)处的灰度值为 I ( x + d x , y + d y , t + d t ) I(x+dx,y+dy,t+dt) I(x+dx,y+dy,t+dt)
前面我们提到了“任何光流法都是默认同一个特征点像素的灰度值是不会发生变化的”。也就是说 I ( x , y , t ) = I ( x + d x , y + d y , t + d t ) I(x,y,t)=I(x+dx,y+dy,t+dt) I(x,y,t)=I(x+dx,y+dy,t+dt)。注意:我们的目标是为了解出 d x , d y dx,dy dx,dy到底是多少。所以我们还得找个方程式,而且包含 I ( x , y , t ) 和 I ( x + d x , y + d y , t + d t ) I(x,y,t)和I(x+dx,y+dy,t+dt) I(x,y,t)I(x+dx,y+dy,t+dt)。事实上我们可以对 I ( x + d x , y + d y , t + d t ) I(x+dx,y+dy,t+dt) I(x+dx,y+dy,t+dt)进行一阶泰勒展开这样得到 I ( x + d x , y + d y , t + d t ) = I ( x , y , t ) + d I d x d x + d I d y d y + d I d t d t I(x+dx,y+dy,t+dt)=I(x,y,t)+\frac {dI}{dx}dx+\frac {dI}{dy}dy+\frac {dI}{dt}dt I(x+dx,y+dy,t+dt)=I(x,y,t)+

  • 19
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值