计算机视觉
图像处理

opencv学习:运动目标(前景)检测

1.帧差法

原理:视频序列相邻两帧或三帧间采用基于像素的时间差分,通过闭值化来提取出图像中的运动区域。

优点:算法简单、计算量小,无需训练背景,对缓慢变换的光照不是很敏感。

缺点:容易受天气、阴影及杂乱背景干扰,阈值T的选择相当关键,稳定性差。

2.背景差分法

    原理:用背景的参数模型来近似背景图像,将当前帧与背景图像进行差分比较实现对运动区域的检测

    优点:计算量小,较高的实时性,利用已有帧信息进行背景动态更新

    缺点:如何建立对于不同场景的动态变化均具有自适应性的背景模型,减少动态场景变化对运动分割的影响。

3.GMM混合高斯模型

    原理:使用K(基本为3到5个)个 高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型,为图像的每个像素点指定一个初始的均值、标准差以及权重,收集N帧图像利用 在线EM算法得到每个像素点的均值、标准差以及权重。从N+1帧开始检测每个点是否属于背景点。

    优点:适应光线的变化,对缓慢移动的物体效果也较好。

    缺点:计算量大,难于实现实时性。

4.光流法

    原理:光流法的主要任务就是计算光流场,即在适当的平滑性约束条件下,根据图像序列的时空梯度估算运动场,通过分析运动场的变化对运动目标和场景进行检测与分割。

      通常有基于全局光流场和特征点光流场两种方法

    优点:在比较理想的情况下,它能够检测独立运动的对象,不需要预先知道场景的任何信息,可以很精确地计算出运动物体的速度,并且可用于摄像机运动的情况

    缺点:全局光流场计算方法计算量大,噪声、多光源、阴影和遮挡等因素会对光流场分布的计算结果造成严重影响;而且光流法计算复杂,很难实现实时处理

5.Vibe算法

    原理:利用单帧视频序列初始化背景模型,对于一个像素点,结合相邻像素点拥有相近像素值的空间分布特性,随机的选择它的邻域点的像素值作为它的模型样本值。背景模型为每个背景点存储一个样本集,然后每个新的像素值和样本集比较判断是否属于背景。

    优点:计算量小,易于实时性,抗噪性及目标分割的完整性较好,

    缺点:由于可能采用了运动物体的像素初始化样本集,容易引入拖影(Ghost)区域,并且鬼影消除慢。

还有基于Codebook码本模型的算法和基于稀疏表示的算法

实现了三帧差法、背景差分法、GMM、vibe、及改进的vibe(主要是快速消除ghost区域)。

说明:

三帧差法、背景差分法、GMM用的是Mat,vibe、及改进的vibe用的是IplImage和cvMat

支持单帧抓图和保存所有结果(图片的形式)

mfc下读写连续视频帧,用了定时器

vibe算法耗时计算的不准。

代码稳定性有待验证,测试了很多数据,检测结果还是和数据本身有很大关系。视频中出现快速移动、来回移动、风吹、遮挡、下雪等时,检测结果较差。整体而言,vibe算法要好些,但其他方法在特定情况下检测结果也较好。我主要用来检测运动的车辆,检测结果还是可以接受的。改进的vibe(主要是快速消除ghost区域,然后做其他事情)就不贴出来了。

下面可下载的代码,我把改进的vibe算法删除了。

代码下载链接:

!!温馨提示: 此处需要评论本文后才能查看.

 

以下是改进vibe检测效果。

三帧差法:


背景差分:

GMM:(GMM也需要设置好参数)


Vibe:

转载注明来源:CV视觉网 » opencv学习:运动目标(前景)检测

分享到:更多 ()
扫描二维码,给作者 打赏
pay_weixinpay_weixin

请选择你看完该文章的感受:

3不错 6超赞 0无聊 0扯淡 0不解 0路过

评论 5

评论前必须登录!

 

  1. #5

    厉害了大佬

    8945353583周前 (03-30)
  2. #4

    谢谢大佬~~~

    dybala_217个月前 (09-25)
  3. #3

    我对这个文章很感兴趣,麻烦让我下载!!!!恳请!!!

    yongbixi1年前 (2018-03-12)
  4. #2

    我对这个文章很感兴趣,麻烦让我下载!!!!恳请!!!

    wj20192年前 (2017-05-14)
  5. #1

    受益匪浅

    jiwy3年前 (2016-09-17)