sdsdd

导航

建模

分析与求解:

 

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

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

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

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

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

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

 

效果其实算不上太好,但基本实现了目标。帧差法相关的代码,以及后面还会介绍到的混合高斯模型的代码,都可以使用Github中的开源项目:

https://github.com/underdoeg/ofxBGS

 

 

对于问题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,本以为靠着之前泛泛的了解能把前几问迅速解决的,结果惨不忍睹。索性四天里两天没睡,还是做完了,期待能有好的结果。

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

posted on 2017-09-24 21:49  代码公主  阅读(397)  评论(0编辑  收藏  举报