背景建模和前景提取 (2017研究生数模竞赛D题)

连着四天半挑灯夜战,终于做完了数模…虽然是个鸡肋比赛,四天时间挑战一下自己还是挺有意思的,也不得不说,研究生数模比本科确实难多了。


下面主要整理一下这次参加“2017中国研究生数学建模”的收获:

我们选择的是D题,一道计算机视觉(CV)的题目。


题目描述:

问题概括为一句话其实就是:在不同的背景条件下的监控视频中提取前景目标。主要分成一下几种情况:

问题1:内容为静态背景、摄像头稳定的监控视频。

问题2:内容为动态背景、摄像头稳定的监控视频。

问题3:内容为摄像头发生晃动或偏移时导致抖动的视频。

问题4:针对拍摄角度不同、同时拍摄、拍摄内容为近似同一地点的多个监控视频,考虑到多角度视频的相关性综合提取前景目标。

问题5:利用所获取前景目标信息,考虑包括前景目标奔跑的线性变化形态特征、前景规律性变化的周期性特征等特征信息,自动判断监控视频中有无人群短时聚集、人群惊慌逃散、群体规律性变化(如跳舞、列队排练等)、物体爆炸、建筑物倒塌等异常事件。


分析与求解:

对于问题1:题目要求在不包含动态背景、摄像头稳定拍摄的监控视频中提取前景信息。

首先需要对前景和背景进行明确的定义:前景是指画面中能够表现出一定的空间关系或者人物关系的目标;背景是指陪体,往往是整个环境的组成部分。由于题目中已知背景信息几乎稳定不变,而帧差法恰恰适用于运动目标和背景的灰度相差较多,并且背景变化很小的视频图像处理。因此,可以采用帧差法对监控视频进行简单却有效的处理,以相邻帧之间像素点灰度值的差值作为判断依据,进行前景目标的提取。I(t)示第t帧的某个像素点的灰度值,则该像素点的计算如下:

|I(t)-I(t-1)|<T           背景

|I(t)-I(t-1)|>=T          前景

当然,在实现上会有一些优化方法,比如三帧差法等。

此外,这样计算出的前景主要集中在目标的边缘,还需要使用MATLAB中自带的膨胀、腐蚀、填充和滤波等函数进行图像的形态学处理。可以给一个我做的效果图:

效果其实算不上太好,但基本实现了目标。帧差法相关的代码,以及后面还会介绍到的混合高斯模型的代码,都可以使用Github中的开源项目,这里我放上了一个集成了BGS库的可视化工具,可以直接测试效果:

http://download.csdn.net/download/bertdai/10010495


对于问题2:动态背景、摄像头稳定的视频。

主要须要解决的是消除动态背景在前景提取时的影响,这里可以使用混合高斯模型,同样使用的是上面链接给出的代码。

混合高斯模型的核心思想是:背景中的每个像素点在各个帧中的灰度值服从一定的统计分布规律,而任意形状的概率分布均可以使用多个高斯分布去近似拟合。所以,我们可以对任一像素点进行建模:

                                                                     

X表示该像素点灰度值,η为高斯概率密度函数,w属于不同函数的权重,μ和Σ分别是t时刻第n个高斯模型的均值向量和协方差矩阵。

在获得概率分布函数后,可以对新来的像素点进行判断,如果与现有模型的某个分布相匹配,则认为该像素点是背景;否则提取为前景。通过这种方式,可以尽可能消除背景抖动的影响,当然,最后也需要卡尔曼滤波和形态学处理等操作。展示一个结果:

                                                                  

其实可以发现,因为腿后面草的颜色跟裤子太像,还是很难提取完全的。


对于问题3:在摄像头晃动的情况下提取前景目标。

这个问题其实麻烦很多了,摄像头的晃动会导致背景变化剧烈,使用高斯混合模型基本上已经很难做到前景目标有效提取。网上经常说的一个思路是使用光流法,获得每一帧的运动场,通过运动场判断出物体的运动变化,进而提取前景。但我经过实现测试后发现,效果其实跟混合高斯差距真的不大,当然,这有可能是因为官方给的视频实在太抖了。

最后呢,我是想了个比较取巧的办法:一方面仍然使用混合高斯模型进行前景提取;另一方面使用Faster RCNN进行目标框定。框就作为一个噪声消除的依据,然后有效提取出前景目标。

关于Faster RCNN的描述网上已经非常多了,我就不废话了,有兴趣的可以直接看别人的博客,铺天盖地的不怕找不到。我用的代码是Shaoqing Ren在Github上的开源项目:https://github.com/ShaoqingRen/faster_rcnn

最后稍微展示一下我做的效果吧:

                                                               


对于问题4:多角度视频的前景提取。

这一部分其实最理想的做法是用POM算法,但是一方面是时间问题,一方面代码确实比较复杂,我并没有实现出来,只采用了一个很简化的方法,这里就不献丑了。给出POM的链接,有兴趣的可以研究一下指点指点我:

http://cvlab.epfl.ch/cms/site/cvlab2/lang/en/software/pom/index.php

http://cvlab.epfl.ch/cms/site/cvlab2/lang/en/research/surv/multi-people-tracking

 

对于问题5:异常事件预测。

这个题我没有在网上找到比较靠谱的算法,就自己简单的设计了一个,代码我写的太丑了,只给大家说下思路好了:基本思想还是使用Faster RCNN,以框的坐标代表人的位置,以帧间框的移动预测人的运动情况,再使用向量相关的一些计算和聚类的算法,预测出群体性事件。这里的关键之处是聚类的方式,还有向量运算后对事件的判断规则。

 

 


基本上就这么个思路做下来了这次数模,之前并没有接触过CV,本以为靠着之前泛泛的了解能把前几问迅速解决的,结果惨不忍睹。索性四天里两天没睡,还是做完了,期待能有好的结果。

总结一下经验呢,第一是慎重选题,还是要充分查阅资料再做决定;第二个呢,平时还是多动手实现代码,光看别人的博客看出花也没用。


  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 63
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值