精华内容
下载资源
问答
  • 帧差法空洞
    千次阅读
    2019-07-19 16:05:31

    帧差法

    帧差法,顾名思义就是将视频中前后两帧做减法,当前帧在(x,y)点处的像素值减去上一帧在(x,y)处的像素值。该方法的优点是提取效果比较稳定,速度比较快。缺点也是蛮明显的,如果你要提取的目标是静止的或者移动速度很慢,前后两帧的前景物体会有很大一部分重合,从而会导致提取出来的图像有空洞。

    当我们要提取前景时,帧差法基本上是最简单的一种方法了,变化缓慢的背景,以及运动较快的物体,在进行帧差法之后,进行阈值分割,将差值图像变成二值图像,就完成了运动目标以及背景的分离。

    本文主要讲一下最简单的帧差,三帧差法原理相差不大,对称差分就不讲了。
    公式如下:
    在这里插入图片描述

    示例

    我简单编写了一个帧差法及阈值分割的程序如下:

    #include <opencv2/opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv;
    int main(int argc, char** argv)
    {
    	VideoCapture capture("F://crop.avi");
    	//VideoCapture capture(0);//直接调用摄像头
    	if (!capture.isOpened())
    	{
    		cout << "data error" << endl;
    		return false;
    	}//测试数据是否读入
    	Mat temp, pre, current, result;
    	Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));//结构元素
    	Mat image1, image2;
    	Mat After_midfiler;
    	//Mat bsmaskMOG2;
    	int num = 0;
    	///Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
    	while (1)
    	{
    		capture >> temp;
    		imshow("show", temp);
    		//------------------------------------------
    		++num;
    		//pMOG2->apply(temp, bsmaskMOG2);
    		if (num == 1)
    		{
    			//BackgroundSubtractorMOG2::getBackgroundImage();
    			cvtColor(temp, pre, COLOR_BGR2GRAY);
    
    		}
    		if (num > 1)
    		{
    			cvtColor(temp, current, COLOR_BGR2GRAY);
    			absdiff(pre, current, result);//用帧差法求前景
    			imshow("【背景】", pre);
    			imshow("【帧差】", result);
    			threshold(result, result, 60, 255, 0);
    			imshow("【阈值分割后】", result);
    			medianBlur(result, After_midfiler, 3);     //中值滤波法
    			imshow("After_midfiler", After_midfiler);
    			morphologyEx(After_midfiler, image1, MORPH_OPEN, element);
    			morphologyEx(image1, image2, MORPH_CLOSE, element);
    			imshow("image2", image2);
    			char c = waitKey(30);
    			if (c == 27)
    				break;
    			cvtColor(temp, pre, COLOR_BGR2GRAY);
    			
    		}
    	}
    }
    
    
    

    这里只放上原视频截图以及帧差的结果
    在这里插入图片描述
    在这里插入图片描述
    由于鱼的游动十分缓慢,帧差的结果并不理想。

    优化尝试1

    当运动物体变化很慢时,前面已经说过帧差会产生空洞,再进行阈值分割,这些部分会被当做背景处理。思考了一下,每一帧的变化很慢,但是总是会有变化的,如果将这每一帧与第一帧进行差分会有什么结果?
    (注释掉代码cvtColor(temp, pre, COLOR_BGR2GRAY);即可)
    尝试的运行结果如下:
    在这里插入图片描述
    这里的结果明显清晰了许多,因为后面鱼的位置与第一帧相比有了很大的区别,然而这里的问题是,第一帧中的鱼干扰了结果,本来只有两条,帧差之后变成了四条。

    优化尝试2

    再上面的基础上进行优化,思路是想办法将第一帧中的鱼去掉,只留下鱼缸。也就是尝试进行简单的背景建模。
    我的具体做法是,将当前每一帧与第一帧进行逐个像素的对比,由于鱼的游动,每一像素点都会存在没有鱼的时刻,想办法将这些不同时刻的像素点整合到一帧里就可以。我用的代码如下:

    for (int i = 0;i < current.rows;i++)
    			{
    				uchar *p = current.ptr<uchar>(i);
    				uchar *q = pre.ptr<uchar>(i);
    				for (int j = 0;j < current.cols;j++)
    				{
    					if (q[j] < p[j])
    						q[j] = p[j];
    				}
    			}
    

    运行效果如下:
    在这里插入图片描述结果较为喜人,但是这个建模需要一定的时间,并且建模过程中会受到光照的影响。通过遍历,会把光照增加的部分添加到背景之中。

    ——————————————————————————————
    分割线,后续针对帧差法的优化措施待更新~~~~~~~~~~~~~

    更多相关内容
  • 是通过对视频中相邻两图像做分运算来标记运动物体的方法。 帧差法依据的原则是:当视频中存在移动物体的时候,相邻(或相邻三)之间在灰度上会有差别,求取两图像灰度的绝对值,则静止的物体...

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


    帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是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帧的原始图像和运动物体检测图像:


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



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


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



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


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


    展开全文
  • 用改进的三帧差法进行目标检测,应用opencv进行开发,能很好的对运动目标进行检测
  • 对一个不包含动态背景的稳定拍摄的监控视频构造提取前景目标的数学模型算法。视频中的前景提取一直是图像处理...难以获取目标的完整区域,容易出现空洞和双影现象。针对以上问题,本文提出了一种基于改...

           对一个不包含动态背景的稳定拍摄的监控视频构造提取前景目标的数学模型算法。视频中的前景提取一直是图像处理领域的研究热点,也是目标跟踪与识别的基础。目前光流法、背景差分法、帧差分法是前景提前的主流算法.光流法其计算量大,对噪声比较敏感;背景差分法需要有比较稳健的背景模型支撑,对背景的扰动比较敏感;帧间差分法难以获取目标的完整区域,容易出现空洞和双影现象。针对以上问题,本文提出了一种基于改进的五帧帧差和混合高斯模型相融合的前景提取算法。通过改进的五帧帧差法提取目标,同时利用混合高斯背景建模进行背景更新,将中间帧图像与背景图像做差,提取出目标,通过运动策略分析,将两个检测出的目标进行“与”运算,再通过连通性检测和形态学处理得到最终的运动目标.

     

    1 改进的五帧帧差法

               帧间差分法是一种通过对视频图像序列的连续两帧图像做差分运算获取运动目标轮廓的方法。当监控场景中出现异常目标运动时,相邻两帧图像之间会出现较为明显的差别,两帧相减,求得图像对应位置像素值差的绝对值,判断其是否大于某一阈值,进而分析视频或图像序列的物体运动特性。帧差分法能适应静态和动态背景,无需提取和更新背景,时间复杂度低,但容易出现空洞和双影现象。

    本文改进了五帧帧差法其具体步骤主要有 5 步:

    1)选取相邻的 5 帧图fk-2(x,y) , fk-1x,y , fk(x,y) , fk+1(x,y) , fk+2(x,y) 分别将其转为相应的灰度图像,然后都进行高斯滤波去除图像中的噪声,得到相应的 5 帧图像Fk-2(x,y) , Fk-1x,y , Fk(x,y) , Fk+1(x,y) , Fk+2(x,y) .

    2)以第k帧图像作为当前帧,分别与前 2 帧和后 2 帧进行帧差运算和二值化运算:

            

    其中G1 ,G2 ,G3 ,G4  是帧差运算后的图像;α 是调控系数,参考值设置为2i×j大小图像区域的像素点个数,T 是设定的二值化阈值,T1 ,T2 ,T3 ,T4  均是动态阈值,动态阈值反映了待测图像光线变化的情况,当光线变化越明显时,Ti 的值就越大,而光线变化较小时,Ti 的值也就较小,从而能有效的应对光线变化对目标提取造成的影响。

    3)为了减少拖影,对步骤(2)的结果进行逻辑“与”操作:

    4)为了克制空洞现象,对步骤(3)的结果进行“或”运算,得到第k帧的五帧差分图像

    HK=H1∪H2           (11)

    5)对得到的目标HK 进行膨胀、腐蚀、填充等形态学处理,以剔除噪声,使边缘轮廓更连续,目标区域更加显著。

              改进的五帧差分法能适用于光照变化、背景扰动等复杂场景的目标检测。与三帧差分法相比,该方法所获取的目标边缘更连续,目标轮廓更完整,空洞现象较少,目标信息更丰富,具有较高的准确率和较强的鲁棒性,能为后续识别跟踪提供更好的数据。

     

    2 改进的混合高斯模型背景建模建立

            混合高斯背景模型最早由Stauffer 等人在文献[2]中提出, 在固定摄像头的交通监控中, 基于混合高斯型的背景差分法是一种常用的方法, 该方法为每个像素点建立一个高斯模型,具有对背景自适应性高、更全面的描述复杂背景的优点。

    2.1 构建背景模型

            混合高斯背景模型中,对于背景图片中的每个像素要用N个高斯分布来描述,然后将这N个高斯分布采用加权组合,得到背景图像。读取视频序列的前N帧图像,用图像预处理方法将其转化为灰度图像序列pi(i=1,2,3,K,N) ,将这些图像中坐标(x , y)处的像素值fi(x,y) 分别赋给这N个高斯分布的均值ul,i(x,y) ,再为每个高斯分布初始化一个相对比较大的方差。这样就完成了混合高斯背景模型的建立,数学表达式如下:

                                             

    表达式中N是高斯模型的个数, 表示第l个高斯分布,wi,l表示第l个高斯分布的权重,初始值取1/M。

    2.2 前景目标检测

    读入下一帧图片,图像预处理后记做pi+1 ,将pi+1(x,y) 对应的高斯模型按w/σ 值的大小进行排序,取比值大的前B个高斯函数组成该点背景的混合高斯模型,其中B的取值表达式如下:

    式子中T 为给定的门限参数, 然后按下面的表达式进行匹配 ,如果pi+1(x,y) 与其背景模型中的第 k(k≤ B)个高斯分布匹配,则认为该点是背景,否则为前景目标. 式中λ 是前景阈值,我们取2.5.

                

    2.3 背景更新

          新一帧图像检测完成后,若pi+1(x,y) 被认为来自于前景,也就是说该点对应模型的前B个高斯分布中没有一个与之匹配的,就用一个新的高斯分布来替换w/σ 值最小的那个分布,其均值为pi+1(x,y) ,并赋予一个较大的方差和较小的权重.与pi+1(x,y) 匹配的高斯函数按如下表达式更新:

    不能与pi+1(x,y) 匹配的高斯函数按如下表达式更新:

    然后归一化权值,式中a,p为学习速度一般根据经验所得。

     

    3.4 改进的混合高斯背景建模

            在以上传统的混合高斯模型中,认为像素之间相互独立,各点之间像素没有联系。对于水纹,树叶波动等因素的影响,混合高斯模型具有一定的抗干扰性,但在复杂背景下的适应能力比较差,产生大量噪音;而对于意外的摄像头小幅度震动产生的噪音是致命的。以上问题可以总结为像素点的小幅度移动产生的影响,针对以上情况我们设计背景模式邻域更新法, 每个像素点的取值会考虑它周围八个点的像素值, 如表1所示,在小区域内建立了一种逻辑联系, 对以上问题进行优化,。

    w(x-1,y-1)=1/16

    w(x,y-1)=1/16

    w(x+1,y-1)=1/16

    w(x-1,y)=1/16

    w(x,y)=1/2

    w(x+1,y)=1/16

    w(x-1,y+1)=1/16

    w(x,y-1)=1/16

    w(x+1,y+1)=1/16

    表1. 像素点的八邻域及权值

    在背景图像的生成时, 我们对于每一个像素Xi在匹配成功的时候, 我们用公式:

    来代替Xi 代入公式(13) (14) (15)更新背景模式, 在新增背景模式时也利用该公式作为均值建立背景模式。改进的混合高斯背景建模算法建立了像素点之间的逻辑联系, 对于因摄像头震动、树叶摇晃引起的噪音有更好的自适应性, 复杂度小, 学习周期更短。

    3.4 算法流程

    由于传统的帧差法检测准确率不高,而且在光照变化、噪声干扰时容易造成目标检测失误等问题,为了解决以上问题和提高前景提取的准确性,我们提出了将改进的混合高斯模型与改进的五帧帧差分算法相融合的前景提取算法。

    该算法首先是提取视频中的每帧图像,然后进行高斯滤波去除图像中的噪声,再用改进的五帧帧差分算法对图像进行差分运算,并用改进的混合高斯建模进行背景建模,最后将改进的混合高斯背景模型与改进的五帧帧差分算法得到的前景目标进行逻辑“与”操作,并采用连通性检测和形态学处理来消除存在的少量小孔洞,从而得到完整的运动目标提取图像,算法如图1所示.

     

    图1 算法流程图

    3.5 算法效果分析

    用问题一给出的6个视频做为测试对象,利用VS2013进行算法测试,图2是本文提出的基于改进的混合高斯模型与改进的五帧帧差分算法相融合的前景提取算法实验效果对比。原始视频拍摄环境分别为室内电梯,机场大厅,办公室公园等背景静止的场景,前景目标有人和烟等多种情况。从图2可以看出,本算法在提取人时轮廓清晰,总体效果优于mask,能比较完整的提取前景目标的完整轮廓。

     

    图2 算法结果比较图

              本文结合改进的混合高斯背景建模算法和改进的五帧帧差分算法来提取运动目标轮廓模型,通过实验结果分析,验证了本文算法能够有效的解决空洞和拖影的问题,并且能更快的处理由于静止物体开始运动产生的“影子”噪音问题,更适合于实际的运动目标检测,与同类的算法相比具有更高的鲁棒性和准确率。

    展开全文
  • 相邻帧差法和三帧差法

    千次阅读 2019-07-17 21:36:04
    相邻帧差法和三帧差法 原文地址:https://blog.csdn.net/dcrmg/article/details/52234929 是通过对视频中相邻两图像做分运算来标记运动物体的方法。 帧差法依据的原则是:当视频中存在移动物体的...

    相邻帧差法和三帧差法

    原文地址:https://blog.csdn.net/dcrmg/article/details/52234929

     

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

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

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

    相邻帧间差分法

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

    C++、Opencv实现:

    1. #include "core/core.hpp"

    2. #include "highgui/highgui.hpp"

    3. #include "imgproc/imgproc.hpp"

    4.  
    5. using namespace cv;

    6.  
    7. int main(int argc,char *argv[])

    8. {

    9. VideoCapture videoCap(argv[1]);

    10. if(!videoCap.isOpened())

    11. {

    12. return -1;

    13. }

    14. double videoFPS=videoCap.get(CV_CAP_PROP_FPS); //获取帧率

    15. double videoPause=1000/videoFPS;

    16.  
    17. Mat framePre; //上一帧

    18. Mat frameNow; //当前帧

    19. Mat frameDet; //运动物体

    20. videoCap>>framePre;

    21. cvtColor(framePre,framePre,CV_RGB2GRAY);

    22. while(true)

    23. {

    24. videoCap>>frameNow;

    25. if(frameNow.empty()||waitKey(2500)==27)

    26. {

    27. break;

    28. }

    29. cvtColor(frameNow,frameNow,CV_RGB2GRAY);

    30. absdiff(frameNow,framePre,frameDet);

    31. framePre=frameNow;

    32. imshow("Video",frameNow);

    33. imshow("Detection",frameDet);

    34. }

    35. return 0;

    36. }

     

     

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

     

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

     

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

     

    三帧差法

     

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

     

    三帧差法基本实现步骤:

    1. 前两帧图像做灰度差

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

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

     

    C++、Opencv实现:

     

     
    1. #include "core/core.hpp"

    2. #include "highgui/highgui.hpp"

    3. #include "imgproc/imgproc.hpp"

    4.  
    5. using namespace cv;

    6.  
    7. int main(int argc,char *argv[])

    8. {

    9. VideoCapture videoCap(argv[1]);

    10. if(!videoCap.isOpened())

    11. {

    12. return -1;

    13. }

    14. double videoFPS=videoCap.get(CV_CAP_PROP_FPS); //获取帧率

    15. double videoPause=1000/videoFPS;

    16. Mat framePrePre; //上上一帧

    17. Mat framePre; //上一帧

    18. Mat frameNow; //当前帧

    19. Mat frameDet; //运动物体

    20. videoCap>>framePrePre;

    21. videoCap>>framePre;

    22. cvtColor(framePrePre,framePrePre,CV_RGB2GRAY);

    23. cvtColor(framePre,framePre,CV_RGB2GRAY);

    24. int save=0;

    25. while(true)

    26. {

    27. videoCap>>frameNow;

    28. if(frameNow.empty()||waitKey(videoPause)==27)

    29. {

    30. break;

    31. }

    32. cvtColor(frameNow,frameNow,CV_RGB2GRAY);

    33. Mat Det1;

    34. Mat Det2;

    35. absdiff(framePrePre,framePre,Det1); //帧差1

    36. absdiff(framePre,frameNow,Det2); //帧差2

    37. threshold(Det1,Det1,0,255,CV_THRESH_OTSU); //自适应阈值化

    38. threshold(Det2,Det2,0,255,CV_THRESH_OTSU);

    39. Mat element=getStructuringElement(0,Size(3,3)); //膨胀核

    40. dilate(Det1,Det1,element); //膨胀

    41. dilate(Det2,Det2,element);

    42. bitwise_and(Det1,Det2,frameDet);

    43. framePrePre=framePre;

    44. framePre=frameNow;

    45. imshow("Video",frameNow);

    46. imshow("Detection",frameDet);

    47. }

    48. return 0;

    49. }


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

     

     

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

     

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

     

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

     

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

     

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

    展开全文
  • 背景提取是在视频图像序列中提取出背景,背景就是场景中静止不动的...针对静止摄像机的、高斯背景,还有针对运动摄像机的光流等。  一. 相邻间图像分思想:检测出了相邻两...
  • 基于MATLAB的视频车辆检测系统1、课题背景改革开放以后,随着经济的高速发展,交通问题越来越开始影响着人们的生产和...对于问题一,首先分别应用像素 直方图分析和分块直方图分析对视频图像背景进行了提取,...
  • opencv 运动检测 三帧差法

    万次阅读 多人点赞 2018-12-09 08:00:09
    opencv 运动检测 三帧差法    三帧差法 优点: 实时性高 缺点: 1、运动物体本身颜色相近时,会出现较大的空洞。 2、无法应对光照骤变的情况 理论上:三帧差法 比 二帧差法更好一些(可在一定程度上消除...
  • 针对传统混合高斯模型(GMM)在检测运动目标时存在噪声、计算量大、效果不佳等问题,提出了一种混合四帧差分算法的改进混合高斯目标检测方法。通过选定不同规则,分别更新前后图像的学习速率来消除“鬼影”;提出...
  • 运动目标检测是指在序列图像中检测出变化区域并将运动目标从背景图像(背景层)中提取出来。...大多数视频监控系统是摄像头固定的,因此基于静态背景下运动目标检测算法受到广泛关注,常用的方法有帧差法、光
  • 算法通过将RPCA提取的视频当前的背景作为三帧差的中间与视频当前的前一和视频当前分别进行邻间分,使得三帧差在运动目标检测过程中避免了背景像素点所带来的影响,消除了“空洞”现象。...
  • opencv 运动检测 二帧差法

    千次阅读 2018-12-09 07:44:18
    opencv 运动检测 二帧差法    1. 帧差法基本原理  是一种通过对视频图像序列的连续两图像做分运算获取运动目标轮廓的方法。当监控场景中出现异常目标运动时,相邻两图像之间会出现较为明显的...
  • 帧差法求运动目标

    2015-12-01 15:40:06
    代码使用简单的帧差法进行求视频序列中的运动目标,通过设置参数可以改变间的间隔,即每隔几进行帧差。该方法对噪声比较敏感,且容易产生运动目标内部空洞
  • 针对传统三帧差提取的运动目标存在大量的噪声和空洞,提出一种改进的三帧差分运动目标实时检测算法;该算法采用Surendra背景提取算法提取有效背景,对视频流中连续三图像分别进行背景减除,得到的结果作为反馈对...
  • 【目标追踪】三帧差法原理及实现

    千次阅读 2020-01-06 23:23:51
    帧差法原理及实现(一)帧差法原理及实现:(二)帧差法存在的问题:(三)三帧差法的原理:(四)三帧差法的实现代码:(五)视频中的目标追踪效果: (一)帧差法原理及实现: 这里可以看一下我的这篇博客,这里...
  • opencv实现三帧差法

    2020-10-20 17:06:37
    今天和大家谈谈三帧差法来实现运动目标检测吧,其中运动检测画框实现追踪方法多种多样,大家可以自行百度,后面我也会一一实现,今天我先给大家玩玩三帧差法吧;;;;(注释非常清楚哦,程序也极其简单的) 帧差法...
  • 传统的三帧差分运动目标检测算法易出现空洞及虚假边缘等现象。为了对其进行改进,提出了一种融合边缘检测的三帧差分运动目标检测算法。首先对三连续图像采用Canny 边缘检测算子快速提取边缘图像,然后对三连续的...
  • 运动目标检测(2)—

    千次阅读 2020-12-05 03:13:26
    帧差法依据的原则是:当视频中存在移动物体的时候,相邻(或相邻三)之间在灰度上会有差别,求取两图像灰度的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰度...
  • 目标检测入门:帧差法,光流和背景减法

    万次阅读 多人点赞 2019-03-12 19:50:03
    但由实验结果可以看出,检测的目标不完整,内部含有“空洞”,这是因为运动目标在相邻之间的位置变化缓慢,目标内部在不同图像中相重叠的部分很难检测出来。通常不单独用在目标检测中,往往...
  • OpenCV实现详解

    千次阅读 2020-12-05 06:20:50
    本文实例为大家分享了OpenCV实现的具体方法,供大家参考,具体内容如下一.基本概念基于视频的车辆检测算法种类很多:光流检测,帧差法,背景消除(其中包括:直方图法,平均值,单分布和混合高斯分布...
  • 一、帧差 摄像机采集的视频序列具有连续性的特点。如果场景内没有运动目标,则连续的变化很微弱,如果存在运动目标,则连续的之间会有明显地变化。 1.1 两帧差 (Temporal Difference...
  • 0x00顾名思义,就是将视频的前后对应的像素点进行运算得出差值。0x01 原理首先将视频每画面转为二值图(即只有“白”与“黑”两种颜色的图),再将前后进行运算。当前后的同一个像素点的差值不...
  • 帧差法是背景减图法中的一种,只不过是帧差法不需要建模,因为它的背景模型就是上一的图,所以速度非常快,另外帧差法对缓慢变换的光照不是很敏感,所以其用途还是有的。  代码如下: #include #include "cv.h" ...
  • 1. 基本原理是一种通过对视频图像序列的连续两图像做分运算获取运动目标轮廓的方法。当监控场景中出现异常目标运动时,相邻两图像之间会出现较为明显的差别,两相减,求得图像对应位置像素值的...
  • 在摄像头静止的情况下,常用的方法有帧差法和减背景帧差法比较直观实用,对光照的变化干扰不敏感,但是 对目标的检测不准确,对于缓慢运动的目标甚至可 能无法提取出目标边界,对于快速运动的目标提取 出的目标...
  • 帧差是目前较为常见的运动目标检测算法之一。它的执行速度较快,但是它会存在各种干扰以及易受到环境噪声的影响,而且容易在检测到的运动目标内部产生较大的空洞,以致影响到最后的检测效果。针对这些问题,将...
  • 帧差法检测运动目标

    万次阅读 2018-01-13 16:11:19
    一、原理  摄像机采集的视频序列具有连续性的特点。如果场景内没有运动目标,则连续的变化很微弱,如果存在运动目标... (Temporal Difference)就是借鉴了上述思想。由于场景中的目标在运动,目标的影像
  • 基于“帧差”的运动目标检测

    千次阅读 2018-09-16 20:34:25
    一、原理 &nbsp;&nbsp;&nbsp; 摄像机采集的视频序列具有连续性的特点。如果场景内没有运动目标,则连续的变化很微弱,如果存在运动目标,则连续的之间会有明显地变化。... (Temporal ...
  • 千次阅读 2019-05-05 19:59:44
    原文链接: https://blog.csdn.net/qq_36670033/article/details/89853555 https://blog.csdn.net/tiemaxiaosu/article/details/51736975 ...1.基本原理 是一种通过对视频图像序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 966
精华内容 386
关键字:

帧差法空洞