LK光流算法归纳.docx
《LK光流算法归纳.docx》由会员分享,可在线阅读,更多相关《LK光流算法归纳.docx(10页珍藏版)》请在冰豆网上搜索。
LK光流算法归纳
运动目标检测之Lucas-Kanade光流算法读书笔记
视觉是人类感知自身周围复杂环境最直接有效的手段之一,而在现实生活中大量有意义的视觉信息都包含在运动中,人眼对运动的物体和目标也更敏感,能够快速的发现运动目标。
随着计算机技术、通信技术、图像处理技术的不断发展,计算机视觉己成为目前的热点研究问题之一。
而运动目标检测是计算机视觉研究的核心课题之一,融合了图像处理、模式识别、人工智能、自动控制、计算机等众多领域的先进技术,在军事制导、视觉导航、视频监控、智能交通、医疗诊断、工业产品检测等方面有着重要的实用价值和广阔的发展前景。
一目标检测
运动目标检测运动目标检测是指从序列图像中将运动的前景目标从背景图像中提取出来。
目前,已有的运动目标检测方法按照算法的基本原理可以分为三类:
背景差分法,帧间差分法和光流法。
1背景差分法
背景差分法又称背景减除法,背景差分法的原理是将当前帧与背景图像进行差分来得到运动目标区域,但是需要构建一幅背景图像,这幅背景图像必须不含运动目标,并且应该能不断的更新来适应当前背景的变化,构建背景图像的方法有很多,比较常用的有基于单个高斯模型的背景构建,基于混合高斯模型的背景构建,基于中值滤波器的背景构造,基于卡尔曼滤波器的背景构造,基于核函数密度估计的背景模型构造。
缺点:
因为要求背景是静止的,所以背景的变化,场景中有很多干扰,比如场景中有树枝和叶子在风中晃动、水面的波动等等,还有照明的变化和天气的变化等都可能影响检测的结果
2帧间差分法
帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。
当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。
图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。
缺点:
不能提取出对象的完整区域,只能提取出边界;同时依赖于选择的帧间时间间隔。
对快速运动的物体,需要选择较小的时间间隔,如果选择不合适,当物体在前后两帧中没有重叠时,会被检测为两个分开的物体:
而对慢速运动的物体,应该选择较大的时间差,如果时间选择不适当,当物体在前后两帧中几乎完全重叠时,则检测不到物体。
3光流算法
光流,它是一种运动模式,这种运动模式指的是一个物体、表面、边缘在一个视角下由一个观察者(比如眼睛、摄像头等)和背景之间形成的明显移动。
光流技术,如运动检测和图像分割,时间碰撞,运动补偿编码,三维立体视差,都是利用了这种边缘或表面运动的技术。
光流是空间运动物体在观测成像面上的像素运动的瞬时速度,光流的研究是利用图像序列中的像素强度的时域变化和相关性来确定各自像素位置的运动,即研究图像灰度在时间上的变化与场景中物体结构及其运动的关系。
图1运动场与光流场对应关系图
光流算法评估了两幅图像的之间的变形,它的基本假设是体素和图像像素守恒。
它假设一个物体的颜色在前后两帧没有巨大而明显的变化。
基于这个思路,我们可以得到图像约束方程。
不同的光流算法解决了假定了不同附加条件的光流问题。
二Lucas–Kanade算法
在计算机视觉中,Lucas–Kanade光流算法是一种两帧差分的光流估计算法。
这个算法是最常见,最流行的。
它由BruceD.Lucas和TakeoKanade提出。
它假定在所考虑的像素的局部邻域内,本质上光流是恒定的,由此利用最小二乘法原则对邻域内所有像素求解基本光流方程。
Lucas–Kanade光流法是一种基于梯度的局部参数化光流估计方法,该算法假定在一个空间尺寸的邻域E中光流矢量是恒定的,然后使用加权最小二乘法(weightedleastsquares)估计光流。
它计算两帧在时间t到t+δt之间每个像素点位置的移动。
由于它是基于图像信号的泰勒级数,这种方法称为差分,这就是对于空间和时间坐标使用偏导数。
LK算法基于以下三个假设:
1)亮度恒定。
2)时间连续或者是运动是“小运动”。
3)空间一致,临近点有相似运动,保持相邻。
假设1亮度恒定的假设即为了保证其等号成立不受亮度的影响,假设2是为了保证KLT能够找到点,假设3则为以下原因假设,即对于同一个窗口中,所有的点的偏移量都相等。
图像约束方程可以写为:
I(x,y,t)=I(x+δx,y+δy,t+δt)
(1)
其中,(x,y,t)为在(x,y)位置的像素。
我们假设移动足够的小,那么对图像约束方程使用泰勒公式,我们可以得到:
(2)
因为移动足够小所以忽略二阶和更高阶的项。
从这个方程中我们可以得到:
(3)
对t求导,令
分别表示水平方向、垂直方向的光流速度,表示某方向的梯度,用一阶差分代替一阶微分,于是光流基本计算公式有一般形式:
(4)
u,v分别是I(x,y,t)的光流向量中x,y的组成。
和
则是图像在(x,y,t)这一点相应方向的差分。
方程④有两个未知量,尚不能被解决,这也就是所谓光流算法的光圈问题。
那么要找到光流向量则需要另一套解决的方案。
而Lucas-Kanade算法是一个非迭代的算法。
将上式写为矩阵相乘形式:
(5)
LK光流:
假设像素流在一个大小为m*m(m>1)的小窗中是一致的,那么从像素1...n,n=m^2中可以得到下列一组方程:
(6)
图2LK光流算法示意图
将⑥写成矩阵的形式,则有:
(7)
式⑦两个个未知数但是有多于两个的方程,这个方程组自然是个超定方程,也就是说方程组内有冗余
为了解决这个超定问题,我们采用最小二乘法解
的向量u:
(8)
得到:
(9)
考虑矩阵的可逆性:
(10)
其中的求和是从1到n。
于是得:
(11)
加权窗口:
述普通的最小二乘解对窗口内n个像素qi一视同仁。
事实上,通常对于靠近中心像素p的像素更多的权重会更好。
介于此,人们使用最小二乘方程的加权版本:
(12)
(13)
计算的:
(14)
权重w通常被设置为qi和p之间距离的高斯函数。
三LK光流法改进算法
1LK方法的金字塔改进
LK方法有一个缺陷,小速度,亮度不变以及区域一致性都是较强的假设,并不很容易得到满足。
如当物体运动速度较快时,假设不成立,那么后续的假设就会有较大的偏差,使得最终求出的光流值有较大的误差。
我们设邻域窗口半径为w,则光流d定义为最小化残差方程ϵ的速度:
(15)
考虑物体的运动速度较大时,算法会出现较大的误差。
那么就希望能减少图像中物体的运动速度。
一个直观的方法就是,缩小图像的尺寸。
假设当图像为400×400时,物体速度为[1616],那么图像缩小为200×200时,速度变为[8,8]。
缩小为100*100时,速度减少到[4,4]。
所以在源图像缩放了很多以后,原算法又变得适用了。
所以光流可以通过生成
原图像的金字塔图像,逐层求解,不断精确来求得。
假设图像的宽高每次缩放为原来的一般,共缩放了Lm层,则第0层为原图像。
设已知原图的速度向量为d,则每一层的速度为
(16)
基于金字塔的光流法的大概步骤如下:
现在最深层Lm中求解光流。
这次计算的结果反馈给上一次Lm-1,作为该层初始时的光流值得估计g。
就这样一层一层的向上反馈,直到
最高层,即原图。
对于每一层L,上方程变为:
(17)
每一层的计算结果通过如下方程反馈给上一层作为初始的光流估计:
(18)
由于金字塔的缩放减小了光流值,最底层的光流估计值可以设为0,即
(19)
图3金字塔光流示意图
2前后光流估计算法
统的光流计算方法主要是基于灰度守恒和光流场的平滑性假设,但这些假设在阴影、边界和遮挡性的地方不再成立,为此,对其进行改进。
前向-后向光流方程:
(20)
光流约束方程为:
(21)
尽管Lucas-Kanade光流法计算简单,光流估计精度较高,但它有一个致命缺点,假
定邻域Ω内各像素点光流保持恒定,而且光流计算依赖于窗口权重函数,这意味着如果在邻域Ω内存在严重违反光流约束方程的点或邻域Ω运动不连续,将使得估计的光流可靠性严重降低。
为此,引入Hessian矩阵判断领域Ω内每点对于基本约束方程的“良态性”。
方程⑰分别对x和y求偏导数,可得:
(22)
写成矩阵形式,即:
(23)
定义Hessian矩阵:
(24)
Hessian矩阵的条件数:
(25)
其中
、
分别为Hessian矩阵H的最大特征值和最小特征值,可以通过Hessian矩阵的条件数大小来判断方程(23)解的稳定性,如果Hessian矩阵的条件数很大则方程(23)为病态方程,对应的Hessian矩阵秩很小,其解不稳定,计算的光流不可靠;如果Hessian矩阵的条件数接近1,对应的Hessian矩阵秩很大,方程(23)为良态,其解鲁棒性较好。
由此可以通过计算Hessian矩阵的条件数来剔除邻域Ω内不可靠点。
Hessian矩阵的条件数很好地刻画了线性方程(11)解的稳定性,而且条件数越大,对应的Hessian矩阵的秩越小,为此可以先利用Hessian矩阵剔除邻域Ω内不可靠点,并把各点
对应条件数的倒数作为该点权重,其算法如下:
(1)计算图像中每点的一阶和二阶梯度;
(2)分别计算每点对应Hessian矩阵的秩det(H)和条件数Cond(H),设定阈值τ,并对每个邻域Ω内的)(XW进行归一化处理,则:
(3)采用加权最小二乘法求解式(21)光流场(u,v)。
四总结
如上所述,光流法基本思想是像素守恒,其思想简单,易于理解。
LK算法是对光流法的改进,在光流法上假设了小窗口光流一致原则和小运动以及亮度守恒,使得光流的求解变得非常的简单,并且能够进行大量实际应用。
但是,正是由于LK算法假设性太强,使得其应用受到极大限制。
所以出现了好多改进算法。
金字塔光流算法正是针对其小运动假设而做的改进,其用缩小图像尺寸的方法来较小运动矢量。
而前后光流算法可以剔除光流不一致或跳动较大的点,放松光流一致的假设的条件。
后续的改进算法还有很多,可以加上全局变量来处理遮挡的问题等等,目前只是学习的这里。
以上就是此次的读书笔记。