三帧差分法
- 格式:doc
- 大小:17.00 KB
- 文档页数:2
帧差法近些年来, 世界各地的学者们针对视频图像中的运动目标检测与跟踪问题做了大量而深入的研究, 提出了很多极其有效的算法难点主要在于视频序列中有各种不同的干扰因素, 这些因素主要包括: 光线明暗的变化、成像传感器本身的固有噪声、运动目标自身的形变或位移变化、背景中的杂波、运动目标的互相遮挡或者自遮挡等, 这些问题还有待于做进一步的研究。
目前, 常用的运动目标检侧方法有: 光流法、背景差分法和帧间差分法。
1.光流法光流法能够检测出运动目标较完整的运动信息, 不需要预先知道场景的任何信息, 能够较好的处理运动背景的情况, 并且可以用于摄像机运动的情况, 适用于帧间位移较大的情况。
但是由于透明性、阴影、多光源、遮挡和噪声等原因,利用光流法进行运动物体检测时, 计算量很大, 无法保证实时性和实用性, 故难以应用到实时系统, 同时对噪声比较敏感, 计算结果精度较低, 难以得到运动目标的精确边界。
2 .背景差分法操作简单, 能够提供完全的特征数据, 但对目标的检测能力较低, 尤其对天气、光照等噪声的影响极其敏感,3T 为预先设定的阈值, 可根据经验选取T , 若选取过大, 则检测的目标则可能出现较大的空洞甚至漏检, 若T 选取过小, 将出现大量噪声。
由于帧间差分法的不足, 就有学者提出了三帧差法, 三帧差法充分考虑了动像素的时间相关性, 对动态检测比较灵敏, 对随机噪声也有很好的抑制作用,但也存在一定缺陷, 即差分图像的检测阈值需手动设定, 大多数情况下只能依据实践经验。
三帧差分法的关键是选取合适的阈值对图像进行二值化。
运动目标自动跟踪是指对目标进行连续的检测并确定其运动轨迹[1].在视频监控领域中,目标智能识别与自动跟踪系统是近几年来的研究重点.在军事、国防和工业等领域有着广泛的应用前景.当前运动目标的检测方法主要有3类:光流法[2]、帧间差分法[3]和背景差分法[4].背景差分法具有简单、运算速度快等诸多优点,使得该法作为运动目标检测的基本方法被普遍采用.但该法暴露出若干问题:一种是因外部条件引起的,如对光线的变化、噪声等造成差分图像检测精度不高,甚至失效;另一种是由差分图像法本身内在局限引起的,主要有空洞[5]、拖影,以及运动目标被拉长等现象.光流法[6]虽然能够适用于静态背景和动态背景两种环境,有较好的适应性,但是其计算复杂度高,运算时间开销很大,不能满足实时性的要求.帧差法[7]比较简单,实时性高,它主要包括减背景方法和相邻帧相减法,即三帧差分法.减背景方法存在背景获取困难、受光照影响严重且更新困难等问题.三帧差分法受光照和阴影影响较小.笔者对三帧差分法进行改进,提出了一种简单有效的运动目标检测方法.1 运动目标实时跟踪系统1. 1 帧差法的基本原理帧间差分法的基本原理就是将前后两帧图像对应像素点的灰度值相减,在环境亮度变化不大的情况下,如果对应像素灰度相差很小,可以认为此处物是静止的;如果图像区域某处的灰度变化很大,可以认为这是由于图像中运动物体引起的,将这些区域标记下来,利用这些标记的像素区域,就可以求出运动目标在图像中的位置.一般采用的帧差法是在连续的图像序列[8]中2个或3个相邻帧间采用基于像素的时间差分并且阈值化来提取图像的运动区域.该运动目标实时跟踪系统是采用三帧差分来进行运动目标检测,这种方法不仅能提高运动目标检测[9]的速度,而且提高了所检测运动目标图像的完整性.均值滤波均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
一种基于改进三帧差分和ViBe算法的运动目标检测算法谢红;原博;解武【摘要】近几年提出的ViBe算法具有运算速度快,目标提取准确率高的特点,但是它对光照的突然变化也非常敏感,而且由于它的模型初始化的方式,也容易形成“拖影”现象。
文中先通过引入传统三帧差分算法难以提取出完整的目标轮廓这一问题,提出一种结合边缘检测的改进三帧差分算法。
该算法在提取出完整的运动目标的同时不会附加冗余的边缘信息。
然后将该算法引入到ViBe算法中,使2种方法结合,一方面消除“拖影”现象,另一方面可以自适应地选择检测的方法,以消除光照突变造成的影响。
试验结果表明,该改进算法是一种适应性强、鲁棒性高的运动目标检测算法。
%The ViBe algorithm proposed in recent years has the characteristics of high computing speed and high accuracy of object extraction. But it is sensitive to the light mutation. And it is also easy to form the"smear" phe⁃nomenon because of its model initialization modes. Firstly, this article proposed the improved three⁃frame difference algorithm combined with edge detection by introducing the problem that the traditional three⁃frame difference algo⁃rithm is difficult to extract the complete contours of the targets. This algorithm can extract the complete moving tar⁃gets without additional redundancy edge information. Then this algorithm is introduced into the ViBe algorithm and is combined with it. The improved algorithm can eliminate the"smear" phenomenon. and it can select the suitable detection method adaptively to eliminate the impact caused by the light mutation. The experimental results show that, this method is an effective moving target detection method.【期刊名称】《应用科技》【年(卷),期】2016(043)006【总页数】7页(P46-52)【关键词】视觉背景提取算法;三帧差分法;边缘检测;“拖影”现象;光照突变【作者】谢红;原博;解武【作者单位】哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001;哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001;哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001【正文语种】中文【中图分类】TN911.73运动目标检测就是将视频序列中的运动目标与所在的背景图像相分离,从而可以获得目标的前景,也就是确切的运动目标。
图像处理算法之帧间差分法
1. 基本原理
帧间差分法是⼀种通过对视频图像序列的连续两帧图像做差分运算获取运动⽬标轮廓的⽅法。
当监控场景中出现异常⽬标运动时,相邻两帧图像之间会出现较为明显的差别,两帧相减,求得图像对应位置像素值差的绝对值,判断其是否⼤于某⼀阈值,进⽽分析视频或图像序列的物体运动特性。
其数学公式描述如下:
D(x,y)为连续两帧图像之间的差分图像,I(t)和I(t-1)分别为t 和t-1时刻的图像,T 为差分图像⼆值化时选取的阈值,D(x,y) = 1表⽰前景,D(x,y)= 0表⽰背景。
2. 优缺点
优点:算法实现简单,程序设计复杂度低,运⾏速度快;动态环境⾃适应性强,对场景光线变化不敏感。
缺点:“空洞”现象(运动物体内部灰度值相近);“双影”现象(差分图像物体边缘轮廓较粗);不能提取出运动对象的完整区域,仅能提取轮廓;算法效果严重依赖所选取的帧间时间间隔和分割阈值。
3. 三帧差法
⽬的:解决帧间差分法的“双影”问题。
算法步骤如下:
可在⼀定程度上消除帧间差分法的“双影”现象。
一种改进的三帧差分运动目标实时检测算法张英;车进;周鹏【摘要】针对传统三帧差分法提取的运动目标存在大量的噪声和空洞,提出一种改进的三帧差分运动目标实时检测算法;该算法采用Surendra背景提取算法提取有效背景,对视频流中连续三帧图像分别进行背景减除,得到的结果作为反馈对背景进行选择性更新,利用HSV颜色空间去除阴影后进行三帧差分,将差分结果进行“与”运行,通过将中间帧背景减除结果与“与”运算的结果进行“或”运算,这样可以得到运动目标的完整信息;实验结果表明,该算法能够快速、完整、准确地检测出运动目标,可有效应用于实时监控系统.【期刊名称】《计算机测量与控制》【年(卷),期】2015(023)006【总页数】4页(P2073-2075,2078)【关键词】背景选择性更新;阴影去除;三帧差分;运动目标检测【作者】张英;车进;周鹏【作者单位】宁夏大学物理电气信息学院,银川 750021;宁夏大学物理电气信息学院,银川 750021;宁夏大学物理电气信息学院,银川 750021【正文语种】中文【中图分类】TP391运动目标的有效检测是提取计算机视觉信息的重要步骤之一,是进行高层次视频图像处理的前提。
由于后续对运动目标的处理过程只是利用图像中运动区域内的像素值,所以对运动目标的有效检测显得非常重要[1]。
目前,运动目标的检测主要有3类方法,分别是光流法[2]、背景差法[3]和帧间差分法[4-5]。
光流法会受到噪声、阴影、光线变化和遮挡等因素的影响,使得计算结果有很大的误差,而且光流法的计算要有一定的硬件支持,所以要实现对视频流的实时处理就非常困难。
背景差法在背景发生变化(如光照、树枝树叶摇动等)时,则会影响到检测效果。
帧间差分法对静止或者速度比较慢的目标容易漏检,同时对连续两帧图像灰度和纹理比较接近时将无法得到完整的目标,容易形成较明显的“空洞”和“双影”现象。
针对上述问题,本文利用三帧差分法对外部环境变化不敏感的特点,提出了一种改进的三帧差分法对运动目标进行检测,有效地克服了以上问题,并且取得了很好的检测效果。
#include "stdafx.h"#include "cv.h"#include "cxcore.h"#include "highgui.h"#include "stdio.h"int main(int argc, _TCHAR* argv[]) {IplImage* pFrame = NULL;IplImage* pFrImg1 = NULL;IplImage* pFrImg2 = NULL;IplImage* pFrImg3 = NULL;IplImage* result1 = NULL;IplImage* result2 = NULL;IplImage* result = NULL;IplImage* tempImg1 = NULL;CvSize size;CvMat* pFrMat1 = NULL;CvMat* pFrMat2 = NULL;CvMat* pFrMat3 = NULL;CvMat* reMat1 = NULL;CvMat* reMat2 = NULL;CvMat* reMat = NULL;CvMat* tempMat1 = NULL;CvCapture* pCapture = NULL;int nFrmNum = 0;char* reWin = "effect" + nFrmNum;cvNamedWindow("video", 1);cvNamedWindow("effect", 1);cvMoveWindow("video", 0, 0);cvMoveWindow("effect", 400, 400);if( argc != 1 ){fprintf(stderr, "Usage: bkgrd <video_file_name>\n");return -1;}if( !(pCapture = cvCaptureFromFile("视频3.avi"))){fprintf(stderr, "Can not open video file %s\n", "视频3.avi");return -2;}while(pFrame = cvQueryFrame( pCapture )){nFrmNum++;if ( nFrmNum > 500){nFrmNum = 0;break;}}while(pFrame = cvQueryFrame( pCapture )){nFrmNum++;//如果是第一帧,需要申请内存,并初始化if(nFrmNum == 1){pFrImg1 = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1); pFrImg2 = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1); pFrImg3 = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);result1 = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1); result2 = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);result = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);pFrMat1 = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1); pFrMat2 = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1); pFrMat3 = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1); reMat1 = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1); reMat2 = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1); reMat = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1);tempMat1 = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1);size = cvSize(pFrame->width, pFrame->height);tempImg1 = cvCreateImage( cvSize((size.width & -2)/2, (size.height & -2)/2), 8, 1 );cvConvert(pFrImg1, pFrMat1);cvConvert(pFrImg1, pFrMat2);cvConvert(pFrImg1, pFrMat3);cvConvert(pFrImg1, reMat1);cvConvert(pFrImg1, reMat2);//cvConvert(pFrame1, reMat);}else{cvCvtColor(pFrame, pFrImg3, CV_BGR2GRAY);cvConvert(pFrImg3, pFrMat3);//cvCvtColor(pFrImg3, pFrImg2, CV_BGR2GRAY);pFrImg2 = pFrImg3;cvConvert(pFrImg2, pFrMat2);//cvCvtColor(pFrImg2, pFrImg1, CV_BGR2GRAY);pFrImg1 = pFrImg2;cvConvert(pFrImg1, pFrMat1);cvSmooth(pFrMat1, pFrMat1, CV_GAUSSIAN , 3, 1);cvSmooth(pFrMat2, pFrMat2, CV_GAUSSIAN , 3, 1);cvSmooth(pFrMat3, pFrMat3, CV_GAUSSIAN , 3, 1);//当前帧跟前一帧相减cvAbsDiff(pFrMat2, pFrMat1, reMat1);cvAbsDiff(pFrMat3, pFrMat2, reMat2);//二值化前景图cvThreshold(reMat1, result1, 60.0, 255.0, CV_THRESH_BINARY); cvThreshold(reMat2, result2, 60.0, 255.0, CV_THRESH_BINARY);//cvAdaptiveThreshold( reMat1, result1, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5 );//cvAdaptiveThreshold( reMat2, result2, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5 );//两个帧差值相与cvAnd(result1,result2,result,0);//使用Gaussian金字塔分解对输入图像向下采样,输出图像的高度和宽度应是输入图像的一半cvPyrDown(result, tempImg1, 7 );//对输入图像进行膨胀cvDilate(result, result, 0, 1);//使用Gaussian金字塔分解对输入图像向上采样,输出图像的高度和宽度应是输入图像的2倍cvPyrUp(tempImg1, result, 7 );//cvErode(result, result, 0, 1);//cvDilate(result, result, 0, 1);//cvPyrDown(result, tempImg1, 7 );//cvPyrUp(tempImg1, result, 7 );cvErode(result, result, 0, 3);cvDilate(result, result, 0, 3);//翻转图像,使其正立显示cvFlip(result, NULL, 0);cvShowImage("video", pFrame);cvShowImage("effect", result);cvCopy(pFrMat2, pFrMat1, NULL);cvCopy(pFrMat3, pFrMat2, NULL);cvCopy(pFrMat1, pFrMat3, NULL);cvCopy(pFrMat1, tempMat1, NULL);if( cvWaitKey( 20 ) >= 0 )break;}printf("\nFrame = %d\n", nFrmNum);}//销毁窗口cvDestroyWindow("video");//cvDestroyWindow(reWin);cvDestroyWindow("effect");//释放图像和矩阵cvReleaseImage(&pFrame);cvReleaseImage(&pFrImg1);cvReleaseImage(&pFrImg2);cvReleaseImage(&result1);cvReleaseImage(&result2);cvReleaseImage(&result);cvReleaseImage(&tempImg1);cvReleaseMat(&pFrMat1);cvReleaseMat(&pFrMat2);cvReleaseMat(&reMat1);cvReleaseMat(&reMat2);cvReleaseMat(&reMat);cvReleaseMat(&tempMat1);cvReleaseCapture(&pCapture); return 0;}。
三帧差分法原理
三帧差分法(Three-Frame Difference)是一种视频运动检测方法。
该方法通过对连续三帧图像进行比较,来检测出其中的运动目标。
原理是:首先,将三帧图像进行差分,得到两个差分图。
然后,将两个差分图进行逐像素比较,如果两个差分图的像素差异都比较大,就说明当前的图像中存在运动目标。
最后,可以通过一些形态学操作,如腐蚀、膨胀等,来进一步处理检测出来的运动目标。
三帧差分法可以有效地检测出视频中的运动目标,并且对于背景干扰较小的情况下,检测效果较好。
但是,在背景干扰较大的情况下,容易出现误检和漏检。
因此,在实际应用中,需要根据具体情况选择合适的方法来进行视频运动检测。
改进三帧差分算法在移动物体检测中的应用刘伟洋;陈侃松;张丹;兰智高;冯杰【摘要】移动物体监控系统利用检测算法识别监控区域的移动物体,并进行实时异常信息存储,检测算法中的传统三帧差分法中的阈值是固定的,因此重叠部分无法准确检测出来,存在空洞现象,可能发生误判;针对这些问题,对已有的三帧差分法进行改进,结合图像边缘提取和自适应的迭代阈值计算方法来提高移动物体检测的准确性,并对异常信息进行选择性存储,由实验结果可知,应用平台采用改进后的移动物体检测算法,较好的提高了移动物体检测的灵敏度,增强了检测系统的实时性和准确性,若仅存储异常信息,可节省视频存储空间,并在定位异常动态信息时节省查找时间.【期刊名称】《计算机测量与控制》【年(卷),期】2017(025)002【总页数】4页(P177-180)【关键词】异常信息;三帧差分法;边缘提取;迭代阈值【作者】刘伟洋;陈侃松;张丹;兰智高;冯杰【作者单位】湖北大学计算机与信息工程学院物联网工程研究所,武汉430062;湖北大学计算机与信息工程学院物联网工程研究所,武汉430062;黄冈师范学院电子信息学院,湖北黄冈438000;湖北大学计算机与信息工程学院物联网工程研究所,武汉430062;黄冈师范学院电子信息学院,湖北黄冈438000;黄冈师范学院电子信息学院,湖北黄冈438000【正文语种】中文【中图分类】TP391智能视频监控系统是信息安全中的重要一环,它集成了智能行为识别算法,能够对画面场景中物体的行为进行识别、判断,当视频监控范围内出现异常信息时,通过对视频中的物体进行检测、分析和识别,实现异常报警等功能。
在智能视频监控系统中,移动物体检测算法的优劣直接影响系统对移动物体的有效检测和系统的应用性能,它的目的是为了从背景中提取出移动物体的信息,既从采集的序列图像中检测出变化的区域,并将移动物体从背景中提取出来进行分析和分割,检测出移动物体。
然而,现实生活中复杂的背景,摄像机固有的缺陷和环境光照的影响等因素给移动物体的检测带来了很大的影响。
改进三帧差分法与背景差分法结合的运动目标检测算法高林;王昌宇【摘要】针对传统三帧差分法对于运动速度较慢物体容易漏检等问题,提出了利用光流法对传统三帧算法改进并与背景差分法结合的运动目标检测算法.实验结果表明,改进的三帧差分算法与背景差分算法结合具有良好的抗躁性、适应性和鲁棒性.【期刊名称】《装备制造技术》【年(卷),期】2018(000)003【总页数】3页(P172-173,177)【关键词】三帧差分法;背景差分法;光流法;移动目标检测【作者】高林;王昌宇【作者单位】沈阳理工大学自动化与电气工程学院学院,辽宁沈阳110159;沈阳理工大学自动化与电气工程学院学院,辽宁沈阳110159【正文语种】中文【中图分类】TP3910 引言运动目标检测与识别的实用化是近几年图像识别领域重要研究方向,对运动目标图像的分割、跟踪和分类等在各个方面中都有重要应用。
目前,应用较多的算法是三帧差分法、背景差分法和光流法。
其中三帧差分法的优点是速度快,背景不用积累,但是对于与运动速度较慢物体容易漏检;背景差分法对于光照、天气等外界环境变化比较敏感;光流法具有精度相对较高的优点,但很难达到实时性[1]。
本文所提出的运动目标检测算法,能够达到最大程度降低噪声和最快速度反应目的。
1 应用光流法改进的三帧差分法利用金字塔Lucas-Kanade光流法对传统三帧差分算法进行改进。
采用金字塔结构来计算光流,可以减小光流计算的误差。
金字塔结构是对图像的各个层都计算光流矢量,首先计算出图像金字塔最高层处的光流,然后将该光流定义为下一层金字塔的起始点,重复上述过程,直至计算到金字塔的最底层[5]。
最后提取出可能存在运动目标的区域,根据不同的阈值在该区域内提取各个目标,这样便将光流法与传统的三帧差分算法结合了起来。
Lucas-Kanade光流法需要满足以下条件:(1)相邻的帧图像的灰度值不变;(2)该像素点邻域内的点具有相似的运动状态;(3)图像运动随时间的变化相对比较缓慢[3]。
三帧差分法基于OpenCV实现的三帧差分法代码基于帧间差分法进行升级的三帧差分法,不同的测试视频可以设置不同二值化阈值来增强效果。
根据实际情况进行形态学处理。
[cpp] view plain copy1. #include <opencv2/highgui/highgui.hpp>2. #include<opencv2/imgproc/imgproc.hpp> 3. #include <opencv2/core/core.hpp>4.5. #define threshold_diff1 25 //设置简单帧差法阈值6. #define threshold_diff2 25 //设置简单帧差法阈值7.8. using namespace cv;9. using namespace std;10.11. int main(int argc,unsigned char* argv[]) 12. {13. Mat img_src1,img_src2,img_src3;//3帧法需要3帧图片 14. Mat img_dst,gray1,gray2,gray3;15. Mat gray_diff1,gray_diff2;//存储2次相减的图片 16. Matgray_diff11,gray_diff12;17. Mat gray_diff21,gray_diff22;18. Mat gray;//用来显示前景的19. bool pause=false;20.21. VideoCapture vido_file("test3.avi");//在这里改相应的文件名 22. namedWindow("foreground",0);23. for (;;)24. {25. if(!false)26. {27. vido_file >>img_src1; 28. cvtColor(img_src1,gray1,CV_BGR2GRAY);29.30. waitKey(33);31. vido_file >>img_src2; 32. cvtColor(img_src2,gray2,CV_BGR2GRAY);33. imshow("video_src",img_src2);//34.35. waitKey(33);36. vido_file >>img_src3;37. cvtColor(img_src3,gray3,CV_BGR2GRAY);38.39. Sobel(gray1,gray1, CV_8U,1,0,3,0.4,128);40. Sobel(gray2,gray2, CV_8U,1,0,3,0.4,128);41. Sobel(gray3,gray3, CV_8U,1,0,3,0.4,128);42.43. subtract(gray2,gray1,gray_diff11);//第二帧减第一帧44. subtract(gray1,gray2,gray_diff12);45. add(gray_diff11,gray_diff12,gray_diff1); 46.subtract(gray3,gray2,gray_diff21);//第三帧减第二帧47. subtract(gray2,gray3,gray_diff22); 48.add(gray_diff21,gray_diff22,gray_diff2);49.50. for(int i=0;i<gray_diff1.rows;i++)51. for(int j=0;j<gray_diff1.cols;j++) 52. {53. if(abs(gray_diff1.at<unsigned char>(i,j))>=threshold_diff1)//这里模板参数一定要用unsigned char,否则就一直报错54. gray_diff1.at<unsigned char>(i,j)=255; //第一次相减阈值处理 55. else gray_diff1.at<unsigned char>(i,j)=0;56.57. if(abs(gray_diff2.at<unsigned char>(i,j))>=threshold_diff2)//第二次相减阈值处理58. gray_diff2.at<unsigned char>(i,j)=255;59. else gray_diff2.at<unsigned char>(i,j)=0;60. }61. bitwise_and(gray_diff1,gray_diff2,gray);62.63. dilate(gray,gray,Mat());erode(gray,gray,Mat());64.65. imshow("foreground",gray); 66. }67. if( cvWaitKey(33) >= 0 ) 68. break;69. }70. return 0;71. }。
①基金项目:玉林市政府与玉林师范学院重大合作项目(项目编号:YLSXZD2019015);玉林师范学院科研项目(项目编 号:2019YJKY24);玉林师范学院校级科研项目(项目编号:2019YJKY26)。
作者简介:莫丹雷(1991—),男,研究生,助教,研究方向为视频图像处理。
通信作者:杨瑞兆(1990—),男,硕士,实验师,研究方向为激光诱导击穿光谱、激光微加工技术。
E-mail: yangruizhao@。
DOI:10.16660/ki.1674-098X.2012-5640-9634基于改进三帧差分法对监控视频中行人目标检测①莫丹雷 杨瑞兆* 吴伟 甘永进 龙妹(玉林师范学院物理与电信工程学院 广西玉林 573000)摘 要:行人是交通系统中的主要参与者,所以监控视频中的行人目标检测对智能交通系统的研究和应用有着重要的意义。
由于场景的动态变化使得行人目标的检测变得相当困难,有效检测出监控视频中行人目标是解决这个问题的关键。
本文对比帧差法、光流法、背景相减法、三帧差法等几种常用检测算法的效果,最终采用三帧差法结合形态学技术对监控视频中行人目标检测,能较好地填充行人目标的部分“空洞”。
实验结果表明:改进的算法能较清晰,较完整地检测出视频中行人目标,检测效果良好。
关键词:监控视频 行人目标检测 三帧差法 形态学技术中图分类号:TP391.1文献标识码:A 文章编号:1674-098X(2021)02(c)-0138-05Pedestrian Target Detection in Surveillance Video Based onImproved Three-frame Difference MethodMO Danlei YANG Ruizhao * WU Wei GAN Yongjin LONG Mei(School of Physics and Telecommunication Engineering, Yullin Normol University, Yulin, Guangxi ZhuangAutonomous Region, 573000 China)Abstract: Pedestrians are the main participants in the transportation system, so the detection of pedestrian targets in sur veillance video is of great signif icance to the research and application of intelligent transportation systems. This article compares the effects of several common detection algorithms such as frame difference method, optical f low method, background subtraction method, and three frame difference method. Finally, the three-frame difference method combined with morphological technology is used to detect the pedestrian target in the surveillance video, which can better fill in the part of the pedestrian target hole. The experimental results show that the improved algorithm can detect pedestrians in surveillance video clearly and completely, and the detection effect is good.Key Words: Surveillance video; Pedestrian target detection; Three frame difference method; Morphological technique1 引言行人目标检测就是检测图像或者视频序列中是否包含行人目标,并根据检测出的行人得出其大小和位置信息,是目前计算机视觉领域的研究热点之一[1]。
三帧差分法的问题大家帮忙看看这个三帧差分法的代码哪里出了问题?参照论坛上的相邻帧差法,改造成三帧差分法。
clc;clear;targetavi='SampleVideo.avi'; %%原始视频resultavi='result.avi'; %%检测结果视频%%%%%%%%%%%%%%%%%%%%%%读取视频mov=aviread(targetavi);%mov=mmreader(targetavi);fnum=size(mov,2);%%%%%%%%%%%%%%%%%%%%%%建立结果视频aviobj = avifile(resultavi);aviobj.Quality = 100;aviobj.Fps = 15;%pression='Indeo5';pression='None';%%%%%%%%%%%%%%%%%%%%%%帧间差分法for i=2:fnumx=mov(i-1).cdata(:,:,:);y=mov(i).cdata(:,:,:);z=mov(i+1).cdata(:,:,:);m=rgb2gray(x);m=medfilt2(m);n=rgb2gray(y);n=medfilt2(n);o=rgb2gray(z);o=medfilt2(o);q=im2double(n);w=im2double(m);p=im2double(o);c=q-w;%%前两帧差分b=p-q;%%后两帧差分t=40; %%阈值,此值可以调节t=t/256;%%转化为double型数据k=find(abs(c)>=t);%%find函数作用是找到图c中的值大于t的点坐标d=find(abs(b)>=t);%%find函数作用是找到图b中的值大于t的点坐标c(k)=255;%%二值化的一b(d)=255;k=find(abs(c)<t);d=find(abs(b)<t);c(k)=0;%%二值化的零b(d)=0;f=c&b;imshow(f);adata=cat(3,f,f,f);%%灰度图像生成视频必加此句aviobj = addframe(aviobj,adata);%%生成视频hold on;drawnow;hold off;endaviobj=close(aviobj);显示的错误提示:??? Error using ==> avifile.addframe>getInputType at 384Invalid input argument. Each frame must be a numeric matrix, a MA TLAB movie structure, or a handle to a figureor axis.Error in ==> avifile.addframe at 58inputType = getInputType(varargin{i});Error in ==> ThreeFrameDifference at 61aviobj = addframe(aviobj,adata);%%生成视频TOPMatlab中文函数大全上线,欢迎大家完善!点。
三帧差分法的问题
大家帮忙看看这个三帧差分法的代码哪里出了问题?参照论坛上的相邻帧差法,改造成三帧差分法。
clc;
clear;
targetavi='SampleVideo.avi'; %%原始视频
resultavi='result.avi'; %%检测结果视频%%%%%%%%%%%%%%%%%%%%%%读取视频
mov=aviread(targetavi);
%mov=mmreader(targetavi);
fnum=size(mov,2);
%%%%%%%%%%%%%%%%%%%%%%建立结果视频
aviobj = avifile(resultavi);
aviobj.Quality = 100;
aviobj.Fps = 15;
%pression='Indeo5';
pression='None';
%%%%%%%%%%%%%%%%%%%%%%帧间差分法
for i=2:fnum
x=mov(i-1).cdata(:,:,:);
y=mov(i).cdata(:,:,:);
z=mov(i+1).cdata(:,:,:);
m=rgb2gray(x);
m=medfilt2(m);
n=rgb2gray(y);
n=medfilt2(n);
o=rgb2gray(z);
o=medfilt2(o);
q=im2double(n);
w=im2double(m);
p=im2double(o);
c=q-w;%%前两帧差分
b=p-q;%%后两帧差分
t=40; %%阈值,此值可以调节
t=t/256;%%转化为double型数据
k=find(abs(c)>=t);%%find函数作用是找到图c中的值大于t的点坐标
d=find(abs(b)>=t);%%find函数作用是找到图b中的值大于t的点坐标
c(k)=255;%%二值化的一
b(d)=255;
k=find(abs(c)<t);
d=find(abs(b)<t);
c(k)=0;%%二值化的零
b(d)=0;
f=c&b;
imshow(f);
adata=cat(3,f,f,f);%%灰度图像生成视频必加此句
aviobj = addframe(aviobj,adata);%%生成视频
hold on;
drawnow;
hold off;
end
aviobj=close(aviobj);
显示的错误提示:
??? Error using ==> avifile.addframe>getInputType at 384
Invalid input argument. Each frame must be a numeric matrix, a MA TLAB movie structure, or a handle to a figure
or axis.
Error in ==> avifile.addframe at 58
inputType = getInputType(varargin{i});
Error in ==> ThreeFrameDifference at 61
aviobj = addframe(aviobj,adata);%%生成视频
TOP
Matlab中文函数大全上线,欢迎大
家完善!点。