视频监控中运动物体检测与跟踪----相邻帧差法和三帧差法 - 牧野的博客 - CSDN博客

标签: | 发表时间:2019-05-14 09:54 | 作者:
出处:https://blog.csdn.net

帧间差分法是通过对视频中相邻两帧图像做差分运算来标记运动物体的方法。


帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰度变化为非0,这样就能大致计算出移动物体的位置、轮廓和移动路径等。


帧间差分法的优点是算法实现简单,程序设计复杂度低;对光线等场景变化不太敏感,能够适应各种动态环境,稳定性较好。缺点是不能提取出对象的完整区域,对象内部有“空洞”,只能提取出边界,边界轮廓比较粗,往往比实际物体要大。对快速运动的物体,容易出现鬼影的现象,甚至会被检测为两个不同的运动物体,对慢速运动的物体,当物体在前后两帧中几乎完全重叠时,则检测不到物体。


相邻帧间差分法

相邻帧间差分法直接对相邻的两帧图像做差分运算,并取差分运算的绝对值构成移动物体,优点是运算快速,实时性高,缺点是无法应对光照的突变,物体间一般具有空洞。


C++、Opencv实现:

      #include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"

using namespace cv;

int main(int argc,char *argv[])
{
	VideoCapture videoCap(argv[1]);
	if(!videoCap.isOpened())
	{
		return -1;
	}
	double videoFPS=videoCap.get(CV_CAP_PROP_FPS);  //获取帧率
	double videoPause=1000/videoFPS;

	Mat framePre; //上一帧
	Mat frameNow; //当前帧
	Mat frameDet; //运动物体
	videoCap>>framePre;
	cvtColor(framePre,framePre,CV_RGB2GRAY);	
	while(true)
	{
		videoCap>>frameNow;
		if(frameNow.empty()||waitKey(2500)==27)
		{
			break;
		}
		cvtColor(frameNow,frameNow,CV_RGB2GRAY);
		absdiff(frameNow,framePre,frameDet);
		framePre=frameNow;		
		imshow("Video",frameNow);
		imshow("Detection",frameDet);		
	}
	return 0;
}


调用了Opencv自带的视频文件“768x576.avi”,视频文件位置:“opencv\sources\samples\gpu”,下图是视频第100帧时图像:



下图是相邻两帧差法检测到的物体,检测效果没有经过膨胀或腐蚀等处理:



可以看到物体的轮廓是“双边”的,并且物体的移动速度越快,双边轮廓现象越粗越明显(这是不是给监控中速度检测提供了一个思路~~),另一个就是物体具有较大的空洞。


三帧差法


三帧差法是在相邻帧差法基础上改进的算法,在一定程度上优化了运动物体双边,粗轮廓的现象,相比之下,三帧差法比相邻帧差法更适用于物体移动速度较快的情况,比如道路上车辆的智能监控。


三帧差法基本实现步骤:

1. 前两帧图像做灰度差

2. 当前帧图像与前一帧图像做灰度差

3. 1和2的结果图像按位做“与”操作


C++、Opencv实现:

      #include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"

using namespace cv;

int main(int argc,char *argv[])
{
	VideoCapture videoCap(argv[1]);
	if(!videoCap.isOpened())
	{
		return -1;
	}
	double videoFPS=videoCap.get(CV_CAP_PROP_FPS);  //获取帧率
	double videoPause=1000/videoFPS;
	Mat framePrePre; //上上一帧
	Mat framePre; //上一帧
	Mat frameNow; //当前帧
	Mat frameDet; //运动物体
	videoCap>>framePrePre;
	videoCap>>framePre;
	cvtColor(framePrePre,framePrePre,CV_RGB2GRAY);	
	cvtColor(framePre,framePre,CV_RGB2GRAY);	
	int save=0;
	while(true)
	{
		videoCap>>frameNow;
		if(frameNow.empty()||waitKey(videoPause)==27)
		{
			break;
		}
		cvtColor(frameNow,frameNow,CV_RGB2GRAY);	
		Mat Det1;
		Mat Det2;
		absdiff(framePrePre,framePre,Det1);  //帧差1
		absdiff(framePre,frameNow,Det2);     //帧差2
		threshold(Det1,Det1,0,255,CV_THRESH_OTSU);  //自适应阈值化
		threshold(Det2,Det2,0,255,CV_THRESH_OTSU);
		Mat element=getStructuringElement(0,Size(3,3));  //膨胀核
		dilate(Det1,Det1,element);    //膨胀
		dilate(Det2,Det2,element);
		bitwise_and(Det1,Det2,frameDet);		
		framePrePre=framePre;		
		framePre=frameNow;		
		imshow("Video",frameNow);
		imshow("Detection",frameDet);
	}
	return 0;
}

同样是“768x576.avi”视频文件,并且也保存了第100帧的原始图像和运动物体检测图像:


未经形态学处理的原始的三帧差法检测到的运动物体:



未经任何形态学处理的原始的三帧差法检测到的物体的双边轮廓现象有所改善,但同时也有丢失轮廓的现象。


下图是在两个帧差图像按位与操作之前做了一下膨胀处理的效果:



相比相邻两帧差法,原始的三帧差法对物体的双边粗轮廓和“鬼影”现象有所改善,比较适合对运动速度较快物体的检测,但是仍然会有空洞出现,并且物体移动速度较慢时容易丢失轮廓。


当然三帧差法做了两次的差分运算,给了三帧差法更多可操作和优化的空间,为更优秀的检测效果提供了可能。


相关 [视频 监控 运动] 推荐:

视频监控中运动物体检测与跟踪----相邻帧差法和三帧差法 - 牧野的博客 - CSDN博客

- -
帧间差分法是通过对视频中相邻两帧图像做差分运算来标记运动物体的方法. 帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰度变化为非0,这样就能大致计算出移动物体的位置、轮廓和移动路径等.

ZoneMinder 1.25 发布,视频监控系统

- 迎客松 - LinuxEden开源社区-Linux伊甸园
ZoneMinder的作者是因為家中的車庫被竊,因而產生設計監控保全的念頭. ZoneMinder使用了Linux Server,PHP,MySQL加上幾支攝影機,就可以使用web介面監控重要場所. 當異常事件發生時,你就可以收到e-mail或簡訊通知. 阅读全文 | 邮件推荐 | 评论回复.

视频监控P2P解决方案

- -
本文分析了日益增长的民用级别家庭和个人网络视频监控市场的需求特点,并给出了一种经济可行易于大规模部署的P2P解决方案. 由于篇幅有限,本文只给出了方案的思路,未对更深入的技术细节做详细的论述,有兴趣的朋友可以继续深入研究. 网络视频监控市场持续火爆升温,除了公共安全市场持续高速增长之外,民用市场中家庭和个人视频监控的需求近年也在逐渐增多.

用 Google+ Hangouts 山寨一个家庭视频监控系统

- Alimoe - 谷奥——探寻谷歌的奥秘
Delerium又发现了Google+ Hangouts视频群聊功能的一个用途:山寨型家庭视频监控系统. 其实用iOS设备的Facetime也可以实现,不过Google+ Hangouts更简单. 你只需要注册两个Google+帐户,二者同时加到一个私密的Hangouts群组里,就可以互相监控了,可以一台电脑在办公室,另外一台在家里,随时监控那边的情况.

基于android的远程视频监控系统——实现,

- - 博客园_首页
本帖仅献给和我一样热爱 Android开发,并渴望学习的朋友们. 现在我将分享我的学习过程,希望大家通过学习也能够独立完成这个简单的系统. (PS.这个系统是我在学习java和android一个月的时间内鼓捣出来的,所以没有基础的朋友也不要担心. 如标题所述,今天我们将学习如何打开摄像头,并在屏幕上预览图像.

视频监控公司 Dropcam 获3000万美元投资

- - TECH2IPO创见
Dropcam 日前宣布获得3000万美元 C 轮投资,Institutional Venture Partners 领投,凯鹏华盈、Menlo Ventures 和 Accel Partners 跟投. Dropcam 提供的移动摄像头产品 Dropcam HD 可借助 WI-FI 网络录制实时视频,并通过移动端应用即时了解被监控的地方正在发生的事情.

远程视频监控之驱动篇(LED)

- - CSDN博客推荐文章
转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515205        .        之前一直在考虑该不该写这篇,因为我之前在博客里有写过LED的驱动,但是没有详细的讲解. 后来本着叫大家都能看懂驱动的想法,我还是决定要写一下.

无码&流畅的视频直播监控体系

- - 运维派
影响视频质量的因素是多样和复杂的. 从主播端到看播端整条路径上,任何一环出问题,比如码率降低,分辨率降低,帧率降低,光源使用不当,滤镜使用不当,传输层丢包,播放端网络质量差,播放端解码能力弱等等,都可能导致视频质量下降. 检测视频质量一直以来有两种方式,分别是客观评价和主观评价. 所谓客观评价就是将评价目标和一个标准的原始源进行对比,计算峰值信噪比(PSNR)以及衍生的一系列评价指标.

视频监控业务上云方案解析-云栖社区-阿里云

- -
由于视频监控能最大的记录和还原当被监控的场景,近年来,视频监控逐步从专业领域的应用普及到了各个民用、家用领域,各个摄像相机厂家也纷纷推出各种型号的摄像机和解决方案. 由于视频监控数据量大,也会遇到各种问题:. 视频监控业务极度消耗存储资源,一个成规模的互联网视频监控服务往往需要PB级甚至更多存储资源,普通IDC或小云服务提供商有限的基础设施很容易成为云视频监控业务爆发增长的瓶颈,一旦出现存储瓶颈,扩容难度大,迁移成本高.

视频监控公司Dropcam升级iPad应用,从此你将可以一览无余

- - TECH2IPO创见
设想一下这个场景:当你因公频繁出差,然后逐渐疏离了朋友和家人. 那么,如何才能够一边执行公务一边又将注意力保持在那些你爱的人的身上呢. 移动视频监控公司Dropcam愿意即时行善,帮助你时刻远程关注任何你想要关心的人. Dropcam允许用户利用便捷的WIFI网络使用视频监控摄像机,帮助那些背井离乡的商人了解他们所爱之人发生之事.