运动目标检测之Lucas-Kanade光流算法读书笔记
视觉是人类感知自身周围复杂环境最直接有效的手段之一, 而在现实生活中 大量有意义的视觉信息都包含在运动中,人眼对运动的物体和目标也更敏感,能够快速的发现运动目标。随着计算机技术、 通信技术、图像处理技术的不断发展,计算机视觉己成为目前的热点研究问题之一。 而运动目标检测是计算机视觉研究的核心课题之一, 融合了图像处理、 模式识别、人工智能、自动控制、计算机等众多领域的先进技术,在军事制导、 视觉导航、视频监控、智能交通、医疗诊断、工业产品检测等方面有着重要的实 用价值和广阔的发展前景。
一目标检测
运动目标检测 运动目标检测是指从序列图像中将运动的前景目标从背景图像中提取出来。目前,已有的运动目标检测方法按照算法的基本原理可以分为三类:背景差分法,帧间差分法和光流法。
1背景差分法
背景差分法又称背景减除法,背景差分法的原理是将当前帧与背景图像进行差分来得到运动目标区域,但是需要构建一幅背景图像,这幅背景图像必须不含运动目标,并且应该能不断的更新来适应当前背景的变化,构建背景图像的方法有很多,比较常用的有基于单个高斯模型的背景构建,基于混合高斯模型的背景构建,基于中值滤波器的背景构造,基于卡尔曼滤波器的背景构造,基于核函数密度估计的背景模型构造。
缺点:因为要求背景是静止的,所以背景的变化,场景中有很多干扰,比如场景中有树枝和叶子在风中晃动、水面的波动等等,还有照明的变化和天气的变化等都可能影响检测的结果
2帧间差分法
帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,
1
判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。
缺点:不能提取出对象的完整区域,只能提取出边界;同时依赖于选择的帧间时间间隔。对快速运动的物体,需要选择较小的时间间隔,如果选择不合适,当物体在前后两帧中没有重叠时,会被检测为两个分开的物体:而对慢速运动的物体,应该选择较大的时间差,如果时间选择不适当,当物体在前后两帧中几乎完全重叠时,则检测不到物体。
3光流算法
光流,它是一种运动模式,这种运动模式指的是一个物体、表面、边缘在一个视角下由一个观察者(比如眼睛、摄像头等)和背景之间形成的明显移动。光流技术,如运动检测和图像分割,时间碰撞,运动补偿编码,三维立体视差,都是利用了这种边缘或表面运动的技术。光流是空间运动物体在观测成像面上的像素运动的瞬时速度,光流的研究是利用图像序列中的像素强度的时域变化和相关性来确定各自像素位置的运动,即研究图像灰度在时间上的变化与场景中物体结构及其运动的关系。
图1 运动场与光流场对应关系图
光流算法评估了两幅图像的之间的变形,它的基本假设是体素和图像像素守恒。它假设一个物体的颜色在前后两帧没有巨大而明显的变化。基于这个思路,我们可以得到图像约束方程。不同的光流算法解决了假定了不同附加条件的光流问题。
二Lucas–Kanade算法
在计算机视觉中,Lucas–Kanade光流算法是一种两帧差分的光流估计算法。这个算法是最常见,最流行的。它由Bruce D. Lucas 和 Takeo Kanade提出。它假定在所考虑的
2
像素的局部邻域内,本质上光流是恒定的,由此利用最小二乘法原则对邻域内所有像素求解基本光流方程。
Lucas–Kanade光流法是一种基于梯度的局部参数化光流估计方法,该算法假定在一个空间尺寸的邻域E中光流矢量是恒定的,然后使用加权最小二乘法(weighted least squares)估计光流。它计算两帧在时间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)位置的像素。
我们假设移动足够的小,那么对图像约束方程使用泰勒公式,我们可以得到:
I(x?dx,y?dy,t?dt)?I(x,y,t)??I?I?Idx?dy?dt?x?y?t (2) 因为移动足够小所以忽略二阶和更高阶的项。从这个方程中我们可以得到: (3)
u?对t求导,令dxdy,v?dtdt分别表示水平方向、垂直方向的光流速度,表示某方向的梯度,用一阶差分代替一阶微分,于是光流基本计算公式有一般形式: IXu?Iyv??It3
(4) u, v分别是I(x,y,t)的光流向量中x,y的组成。和则是图像在(x ,y ,t )这一点相应方向的差分 。
方程④有两个未知量,尚不能被解决,这也就是所谓光流算法的光圈问题。那么要找到光流向量则需要另一套解决的方案。而Lucas-Kanade算法是一个非迭代的算法。
将上式写为矩阵相乘形式:
??Ix?u?Iy???v???It?? (5)
LK光流:假设像素流在一个大小为m*m(m>1)的小窗中是一致的,那么从像素1...n , n = m^2 中可以得到下列一组方程:
(6)
图2 LK光流算法示意图
将⑥写成矩阵的形式,则有:
(7)
式⑦两个个未知数但是有多于两个的方程,这个方程组自然是个超定方程,也就是说方程组内有冗余
为了解决这个超定问题,我们采用最小二乘法解
Au?b的向量u:
(8)
得到:
u?(ATA)?1ATb考虑矩阵的可逆性:
(9)
4
AA?[其中的求和是从1到n。 于是得:
T?I2I?xxIy?II?Ixy2y] (10)
(11)
加权窗口:述普通的最小二乘解对窗口内n个像素qi一视同仁。事实上,通常对于靠近中心像素p的像素更多的权重会更好。
介于此,人们使用最小二乘方程的加权版本:
(12)
(13)
计算的:
(14)
权重w通常被设置为qi和p之间距离的高斯函数。
三LK光流法改进算法
1 LK方法的金字塔改进
LK方法有一个缺陷,小速度,亮度不变以及区域一致性都是较强的假设,并不很容易得到满足。如当物体运动速度较快时,假设不成立,那么后续的假设就会有较大的偏差,使得最终求出的光流值有较大的误差。
我们设邻域窗口半径为w,则光流d定义为最小化残差方程?的速度:
(15)
5