光流是什么:
我认为光流就是特征点移动的方向或者流动的方向。为什么是光,因为我们假设是同样的物体,他身上的亮度是不变的。
什么是约束方程:
其实就是根据上面的假设(相同特征点的亮度不变),这个约束方程的的目的就是用来求特征点的运动方向的,怎么求?这就是创新的地方了。
不同的应用,不同的求法,不同的环境,不同的求法。这是就是可以发文章的地方了。约束方程的规范写法网上很多,这里我就不举出来了。
目的:
光流是图像中各像素点运动的速度分布,它是一种顺时速度场,即向量场。每一个向量表示了景物中一个点在图像中位置的瞬时变化。光流法是利用运动目标在图像序列间,即随着时间变化的特性,通过计算帧间像素的位移来提取人的运动。其优点是光流不仅携带了运动目标的运动信息,而已还携带了有关景物三维结构的丰富信息,能够检测独立运动的对象,而不需要预先知道场景的任何信息。既实用于静止的运动的背景,也适用于摄像机运动的情况,有很好的适应性。但是其缺点也是明显的,这种方法采用迭代的求解计算,所需计算时间长,无法满足实时的要求,并且该方法受噪声影响比较大,因而它多适用于图像噪声比较小,目标运动速度不大的情况。
这段话我是在一个博客上抄过来的。
光流用来寻找运动区域,那么找到了怎么办?用特征去匹配吗?从而实现跟踪?那么光流其实就是可以放到检测的范畴了。
但光流是用来计算行对应像素点的运动趋势的,本身已经包含了跟踪的成分。
因此我认为,光流跟踪是这样的过程:
输入相邻帧,计算光流场,这时候我们应该会得到很多的光流点,之后我们可以使用kmeans等做简单的聚类运算,找到光流的聚集点,我们判断为运动区域,之后进行迭代运算,在下一帧中找对应的特征点,作为特征点运动到的新的坐标,如此继续下去,从而实现目标跟踪。当然,光流的缺点是,不确定性,特征点很容易飘,所以我们同样可以使用光流去检测运动区域,之后用匹配去实现跟踪,这也是为了提高跟踪的准确性的改进。
上面是我自己的理解,不对的地方希望大家给出指点。
下面给出Lucas Kanade 光流的matlab代码。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Name: Musawir Ali Shah
%%% Assignment #3
%%% Project Title: Lucas Kanade Motion Estimation Using Pyramids (Level 4)
%%% Note: The project specification says use density of 10 in plotting
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Usage: Lucas_Kanade('1.bmp','2.bmp',10)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Lucas_Kanade(f