光流法
之前对光流的认识只是保留在是一种视频动作信息的一种表示,最近有幸看到一篇大神整理的博客,写的特别详细,对光流法有了进一步的理解。
大神博客地址:https://blog.csdn.net/sgfmby1994/article/details/68489944
灰度图的图像信息是有其图像亮度表现的,在视频中,帧的图像亮度信息会发生变化,光流即是图像亮度的运动信息描述。光流计算基于两个假设:
1、运动物体的灰度在短时间的间隔内不变。即前一帧的像素p(x1,y1)在后一帧运动到了p(x2,y2),p(x1,y1)的灰度值等于p(x2,y2)的灰度值。
2、给定领域内的速度向量场变化是缓慢的。
图像上一个像素点(x,y),t时刻的亮度为I(x,y,t),t+Δt时对应点亮度值为I(x+Δx,y+Δy,t+Δt),
光流为(dx/dt,dy/dt),当Δt足够小时则为(Δx/Δt,Δy/Δt),记为(u,v)。
用泰勒公式将I(x+Δx,y+Δy,t+Δt)展开(左边),即得:
消去I(x,y,t),两边除上Δt整理后得:
这即使基本得光流约束方程,但此时还求不出u,v。
L-K光流算法
L-K光流算法是求光流方法的一种,它有一个重要的前提假设:
领域内光流一致,即在局部领域内所有的像素点运动的速度都是一样的,假设一个局部领域里有n个像素点,则可以列出下列方程组:
两个未知数,但却有n个方程,这样是求不出准确解的,但可以通过最小二乘法求出最优解,最优解尽可能的同时满足n个方程。
最小二乘法的公式就不列了。
基于金字塔分层的LK光流
LK光流法只适用于运动位移较小的情况,当运动位移较大时,用LK光流法会产生较大的误差。所以金字塔分层的做法即是通过缩小图像尺寸的方法来缩小图像中物体的运动位移。把图像的宽高各自缩小为原来的1/2,那么位移的x和y分量也就缩小到了原来的1/2,以此方法直到缩小到可以使用LK方法为止。
构造金字塔
对每一帧建立一个高斯金字塔,原图像在底层,分辨率最高的在顶层。上层金字塔的一个像素可以代表下层的两个像素。
计算光流
从顶层开始,通过最小化没个点的领域内的误差和,得到最顶层图像每个点的光流。简单来说就是用LK方法计算顶层光流。
假