您的位置:首页 > 其它

一种基于边缘的运动目标检测与跟踪算法

2014-09-19 21:09 633 查看
转载地址/article/1329045.html

本文根据Masayuki Yokoyama等人的论文A contour-based moving object detection and tracking结合自己的理解而成。

作者提出了一种基于梯度光流法以及边缘算子的线条聚类的运动目标检测算法。与传统的基于灰度、颜色等特征的方法相比,该方法具有更鲁棒的性能。算法通过结合光流法检测的运动信息以及边缘算法检测到的边缘信息来进行场景中的线条的重建,将重建的线条信息与背景模型的线条信息相比,得到运动目标的线条信息。接着,采用Snake来对这些线条进行聚类,从而得到运动目标的轮廓信息,并对轮廓进行跟踪,实现跟踪的目的。

下面对论文的内容安排逐一进行介绍。

首先要提取背景的边缘图像,保持背景的边缘图像经过一段时间之后会更新。(方法?)

1) 光流法

对于2D图像,一般采用以下形式来对图像的运动信息进行近似(光流法假设相邻帧间的灰度差异很小,几乎不变):



其中I(x,t)表示t时刻图像Ix处的灰度值。将上式进行泰勒展开,则可以得到:



其中,△I是梯度,It是时域差分,v表示速度矢量。

而对于运动信息的检测,则是根据光流法得到的速度矢量v,计算其分量的模的和,与某一阈值进行比较,从而得到图像的运动像素信息,公式表示如下:



其中u,v分别是表示通过光流法计算得到的速度的水平分量和垂直分量。

2)边缘检测

文章中对于边缘检测,采用了Canny算子,因为Canny算子从理论上来说是一种最优的算子,而且具有单像素的特性。对于通过Canny算子检测得到的图像edge(x)(其中edge(x)=1表示边缘,否则是背景),如果对应的edge(x)=1,即是边缘像素,那么进一步来判断其|u|+|v|的大小,如果其中大于既定的阈值,则将其标注为运动信息,即前景边缘像素点;同时,将将边缘图像中的该像素置0。如此遍历完所有的像素点,那么就可以得到一个前景掩膜fgMask(|u|+|v|>T的点都为前景掩膜中的点),以及一个边缘图像中未标注为前景的边缘图像,记为unMaskEdge,该图像将在后面用到。

3)轮廓提取

文章中轮廓提取主要分为4个步骤,分别是线条复原、基于线条的背景减除、聚类和主动轮廓。下面将对着四个步骤进一步行进行分析。

(1)线条复原

通过上面的方法提取的运动目标信息会出现很多的漏检,这主要是因为:① 在平滑的区域,通过光流法提取的运动矢量v比较小,导致运动目标的信息没有被提取出来;② 场景中存在边缘信息,当运动目标的边缘信息与边缘信息重合时,将会导致运动信息的漏提。因此需要根据fgMask和unMaskEdge对线条进行复原。具体操作:遍历unMaskEdge中的像素,如果在fgMask的邻域中存在前景像素(且该像素不是交叉像素,crossing-point),那么该像素就被判为前景像素,如此遍历完unMaskEdge中的所有像素。

(2)基于线条的背景减除

根据前面检测的前景,检测得到其的运动线条信息{P1, P2,...,Pn},背景的线条用Sbg表示,如果线条满足下式,则认为是背景线条:



(3)聚类

本文的聚类采用的是距离和运动矢量的最近邻法则来实现的。假设有两条线条S1={p1,p2,...,pn}, S2={q1,q2,...,qn},如果他们满足下式,则认为他们是同一线条。



其中(Up,Vp)表示P处的运动矢量。(同一线条的连接方法?)

(4)主动轮廓(Active Contours)

文中采用Snake来对提取的线条进行目标的轮廓。轮廓{P1,P2,...Pn}的离散能量函数表示为:



对于Snake的计算,文中通过计算每个聚类的凸包作为Snake的初始轮廓。

这里对于运动目标的跟踪部分不继续讨论,用兴趣的读者可以根据前面介绍的链接下载来仔细了解。另外,博主也对算法进行过实验,与文章中介绍的有少许不同,主要是取视频序列的前几帧得到的线条作为背景模型(另外每隔固定间隔对背景进行重建或更新),还有就是对最后的主动轮廓Snake没有进行处理,其他的都相同。博主实现的算法中,对光照有一定的鲁棒性,但光照还是对该算法有影响,处理速度还行,大概在16帧左右。

最后上几幅论文中的实验图。



说明:(b)图为前景掩模图fgmask;(c)被标记为前景的边缘点mask_edge;(d)线条重建后的图;(e)背景减除及运动边缘聚类后的图;

(f)凸包;(g)有效轮廓
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: