基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf

上传人:wj 文档编号:14654999 上传时间:2023-06-25 格式:PDF 页数:13 大小:382.65KB
下载 相关 举报
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第1页
第1页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第2页
第2页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第3页
第3页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第4页
第4页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第5页
第5页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第6页
第6页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第7页
第7页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第8页
第8页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第9页
第9页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第10页
第10页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第11页
第11页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第12页
第12页 / 共13页
基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf

《基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf》由会员分享,可在线阅读,更多相关《基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf(13页珍藏版)》请在冰点文库上搜索。

基于帧间差分法和背景差分法的运动目标检测方法及其实现.pdf

1基于帧间差分法和背景差分法的运动目标检测方法及实现杨一君1,王兆仲2,邓希宁1(1.中国电子科技集团公司11研究所光电系统部北京100001;2.北京航空航天大学图像处理心北京100001)摘要:

帧间差分法和背景差分法计算简单,实时处理效率高,因此是最常用的运动目标检测方法。

本文根据这两种方法的优缺点介绍一种在运动区域内结合使用帧间差分法和背景差分法来提取运动目标的方法。

这种方法首先根据帧间差分图像确定运动区域,然后在确定的运动区域内对背景差分图像和帧间差分图像进行运动目标测。

关键词:

运动目标检测、帧间差分、背景差分1引言目前在静止背景下常用的的运动目标检测方法有:

块匹配法、光留法、运动能量法、帧差法、背景差分法等1。

也有人讲一些优秀的算法如小波变换或遗传算法等方法引入到视频的运动目标检测中,但是由于受到计算机运算速度和算法复杂度的限制,使得在检测与跟踪运动目标的实时性和鲁棒性方面总是差强人意,若没有特定的硬件支持,一般很难满足实时处理的要求。

在实时系统中人们更热衷于使用计算的方法来获得理想的目标检测结果2。

2帧间差分法帧间差分法是利用图像序列中相邻帧图像之间做差来提取出图像中的运动区域3。

首先将数帧图像校正在同一坐标系中,然后将同一背景不同时刻的两幅图像进行差分运算,灰度不发生变化的背景部分被减掉,由于运动目标在相邻两帧中的位置不同,且与背景灰度有所差异,两帧相减后将使运动目标突现出来,从而大致确定出运动目标在图像中的位置。

3背景差分法背景差分法是利用图像序列和参考背景模型相减实现运动目标检测的4。

背景差分法能够提供较为完整的特征数据从而提取出运动目标,但其对光照和外部条件造成的动态场景变化过于敏感,在非受控情况下需要加入背景图像更新机制,且不是用与摄像头运动,或背景灰度变化较大的情况5。

4运动检测方法4.1建立背景模型2假设物体连续运动,以当前某段待处理图像序列的平均值作为参考图像,即产生一个除运动区域以外与当前静态场景相似的背景图像6,7。

利用这种多帧图像平均的背景模型建立法其公式描述如下:

其中,N为重建图像序列帧数,Bn为重建背景图像,为第n帧图像,背景模型的每个像素点的值为该像素点N帧图像灰度的累加平均。

4.2检测变化区域利用帧间差分法检测出相邻两帧间发生变化的区域。

设fn(i.j),fn+1(i.j)为视频序列中连续的两帧图像,将这两帧图像进行差分处理,检测规则如下:

如果如果

(2)其中T为检测阈值,由于变化区域需要与背景图像进行进一步的处理从而分割出运动物体,因此这里对T值选值15以适应一般检测需求。

表示差分后确定未背景的区域,表示差分后确定为运动变化的区域。

4.3运动目标检测区分出图像中变化区域和非变化区域之后,针对当前帧图像,只对变化区域中变化区域中图像与背景图像做差分,达到检测运动物体的目的。

如果其他当前帧图像与背景图像差分之后,还需要进行阈值分割,将差分图像变成二值图像。

阈值分割之后由于噪声的干扰目标会出现一些小孔洞和毛刺,为了能更好的进行目标定位,需将一些空洞填充并除去毛刺,这里采用形态学的开运算完成8。

定义的开运算结构元素为:

(4)经过形态学开运算,小空洞和毛刺可以被有效滤除9。

4.4目标检测算法的VC实现建立CStasticDetect对象后,每当一帧到来是,则调用对象的ReceiveFrame函数,该函数接受两个参数,第一个参数是帧图像数据,这里处理的图像数据大小与构造类时3给定的图像大小相同;第二个参数是当前帧的帧号。

在达到预先定义的阈值后,ReceiveFrame将自动建立背景模型,并对目标进行检测,检测结果通过m-pDiffImage成员变量输出。

具体代码参见附录1.程序流程图如图1所示:

图1程序流程图5实验结果实验图像取自录屏软件录制的录屏视频,视频中的对话框做平移运动,图2和图3为两帧视频图像经过二值化处理后的图像,图4为运动检测结果,图5为经过二值开运算滤波后的图像。

从实验结果可以看出,基于帧间差分和背景差分的运动目标检测方法结合形态学滤波可以对静止背景下的运动目标进行有效的检测。

4图2图3图4图55参考文献1杨杰、张翔.视频目标检测和跟踪及其应用M.上海:

上海交通大学出版社,2012,1015.2关键、刘宁波、黄勇等.雷达目标检测的分形理论及应用M.北京:

电子工业出版社,2011,3135.3周许超、屠大维、陈勇、赵其杰、张翼成.基于相位相关和差分相乘的动态背景下运动目标检测J.仪器仪表学报,2010,5:

980-983.4张毅刚、曹阳、项学智.静态背景差分运动目标检测研究J.电子测量与仪器学报.2010,5:

494-499.5SlimAmri,WalidBarhoumi,EzzeddineZagrouba.Arobustframeworkforjointbackground/foregroundsegmentationofcomplexvideoscenesfilmedwithfreelymovingcameraJ.MultimediaToolsandApplications.2010(2-3)6AlbertoDelBimbo,FabrizioDini.Particlefilter-basedvisualtrackingwithafirstorderdynamicmodelanduncertaintyadaptationJ.ComputerVisionandImageUnderstanding.2011(6)7黄鹤,王小旭,赵春晖,梁彦,潘泉.基于后验信息修正的自适应交互多模型跟踪算法J.西北工业大学学报.2011(06)8王芳林.稳健视觉跟踪算法中的关键问题研究D.上海交通大学20099LingShao,RuoyunGao,YanLiu,HuiZhang.Transformbasedspatio-temporaldescriptorsforhumanactionrecognitionJ.Neurocomputing.2010(6)6附录一部分主要程序清单#includestdafx.h/#includeMotiontrack.h#includeStaticDetect.h#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#definenewDEBUG_NEW#endifCStatsticDetect:

CStatsticDetect(intnwidth,intnheight)m_nFrame=0;count=0;WIDTH=nwidth;HEIGHT=nheight;IMAGESIZE=WIDTH*HEIGHT;m_pCurImage=newBYTEIMAGESIZE*3;memset(m_pCurImage,0,IMAGESIZE*3);m_pGrayImage=newBYTEIMAGESIZE;memset(m_pGrayImage,0,IMAGESIZE);m_pBackground=newBYTEIMAGESIZE;memset(m_pBackground,0,IMAGESIZE);m_pBgImage=newBYTEIMAGESIZE*3;memset(m_pBgImage,0,IMAGESIZE*3);m_pDiffImage=newBYTEIMAGESIZE;memset(m_pDiffImage,0,IMAGESIZE);m_pDetectImage=newBYTEIMAGESIZE*3;memset(m_pDetectImage,0,IMAGESIZE*3);m_pBackHistgram=newshortintIMAGESIZE*256;memset(m_pBackHistgram,0,IMAGESIZE*256*sizeof(shortint);m_pTemplate=newUINTIMAGESIZE;memset(m_pTemplate,0,IMAGESIZE*sizeof(UINT);m_pPreGrayImage=newBYTEIMAGESIZE;memset(m_pPreGrayImage,0,IMAGESIZE);image1=newBYTEIMAGESIZE;memset(image1,0,IMAGESIZE);image2=newBYTEIMAGESIZE;memset(image2,0,IMAGESIZE);image3=newBYTEIMAGESIZE;memset(image3,0,IMAGESIZE);image4=newBYTEIMAGESIZE;memset(image4,0,IMAGESIZE);CStatsticDetect:

CStatsticDetect()deletem_pBackHistgram;deletem_pDiffImage;deletem_pBgImage;deletem_pGrayImage;deletem_pBackground;deletem_pDetectImage;deletem_pCurImage;deletem_pTemplate;deleteimage1;deleteimage2;deleteimage3;deleteimage4;voidCStatsticDetect:

ReceiveFrame(intindex,BYTE*sBuf,DETECT_METHODsMethod)m_nFrame=index;memcpy(m_pCurImage,sBuf,WIDTH*HEIGHT*3);RGBToYUV(m_pCurImage,m_pGrayImage,WIDTH,HEIGHT);switch(sMethod)caseD_MULDIFFER:

if(m_nFrame0)DiffImage(m_pGrayImage,m_pPreGrayImage,WIDTH,HEIGHT,20);7DeNoise(m_pDiffImage,WIDTH,HEIGHT);memcpy(m_pPreGrayImage,m_pGrayImage,IMAGESIZE);break;caseD_MULMEAN:

GetMultiData(m_pGrayImage,WIDTH,HEIGHT);if(m_nFrameBACK_ALL_NUM)if(m_nFrame=(BACK_ALL_NUM+1)GetBgImage();memset(m_pTemplate,0,IMAGESIZE*sizeof(UINT);count=0;SaveBmp(m_pBackground,WIDTH,HEIGHT,8,index);elseif(m_nFrame%(2*BACK_ALL_NUM)=1)/更新背景图像GetBgImage();memset(m_pTemplate,0,IMAGESIZE*sizeof(UINT);count=0;SaveBmp(m_pBackground,WIDTH,HEIGHT,8,index);DiffImage(m_pGrayImage,m_pBackground,WIDTH,HEIGHT,THRESHOLD);DeNoise(m_pDiffImage,WIDTH,HEIGHT);break;caseD_STATISTIC:

if(m_nFrame%BACK_SEQ_NUM=1)SetBgHistgram(m_pBackHistgram,m_pGrayImage,WIDTH,HEIGHT);if(m_nFrameBACK_ALL_NUM)if(m_nFrame=(BACK_ALL_NUM+1)GetBgByHistgram(m_pBackHistgram,m_pBackground,WIDTH,HEIGHT);memset(m_pBackHistgram,0,WIDTH*HEIGHT*256*sizeof(shortint);elseif(m_nFrame%(3*BACK_ALL_NUM)=1)/更新背景图像GetBgByHistgram(m_pBackHistgram,m_pBackground,WIDTH,HEIGHT);memset(m_pBackHistgram,0,WIDTH*HEIGHT*256*sizeof(shortint);DiffImage(m_pGrayImage,m_pBackground,WIDTH,HEIGHT,THRESHOLD);8DeNoise(m_pDiffImage,WIDTH,HEIGHT);if(index=1257)SaveBmp(m_pDiffImage,WIDTH,HEIGHT,8,index);break;default:

break;voidCStatsticDetect:

RGBToYUV(BYTE*sRGB,BYTE*sGray,intnWidth,intnHeight)inti,j;for(j=0;jnHeight;j+)for(i=0;inWidth;i+)sGraynWidth*j+i=(11*sRGB3*(nWidth*j+i)+59*sRGB3*(nWidth*j+i)+1+30*sRGB3*(nWidth*j+i)+2)/100;voidCStatsticDetect:

SetBgHistgram(shortint*pHistgram,BYTE*sGray,intnWidth,intnHeight)for(intj=0;jnHeight;j+)for(inti=0;inWidth;i+)intp=*(sGray+j*nWidth+i)+256*(j*nWidth+i);*(pHistgram+p)=*(pHistgram+p)+1;BOOLCStatsticDetect:

GetBgByHistgram(shortint*pHistgram,BYTE*sBg,intnWidth,intnHeight)intj,i,k;for(j=0;jnHeight;j+)for(i=0;inWidth;i+)intc=0;intcolor=0;for(k=0;kc)c=*(pHistgram+256*(j*nWidth+i)+k);color=k;*(sBg+j*nWidth+i)=color;for(j=0;jnHeight;j+)for(i=0;inWidth;i+)memset(m_pBgImage+(nWidth*j+i)*3,*(sBg+j*nWidth+i),3);returnTRUE;9voidCStatsticDetect:

DiffImage(BYTE*sGray,BYTE*pGray,intnWidth,intnHeight,intnThreshold)inti,j;for(j=0;jnHeight;j+)for(i=0;inThreshold|diff-nThreshold)m_pDiffImagej*nWidth+i=255;elsem_pDiffImagej*nWidth+i=0;voidCStatsticDetect:

DeNoise(BYTE*sGray,intnWidth,intnHeight)intmode33=-1,0,-1,-1,0,-1,-1,0,-1;Erosion(sGray,nWidth,nHeight,mode);Medianfilter_3x3(sGray,nWidth,nHeight);for(intj=0;jnHeight;j+)for(inti=0;inWidth;i+)memset(m_pDetectImage+(nWidth*j+i)*3,*(m_pDiffImage+j*nWidth+i),3);voidCStatsticDetect:

Medianfilter_3x3(BYTE*sGray,intnWidth,intnHeight)inti,j,k,l,count;intii,mid;BYTEmean9;intImageWidth,ImageHeight;ImageWidth=nWidth;ImageHeight=nHeight;BYTE*pBuf=newBYTEImageWidth*ImageHeight;for(i=1;iImageHeight-1;i+)for(j=1;jImageWidth-1;j+)count=0;for(k=-1;k=1;k+)for(l=-1;l=1;l+)meancount=sGray(k+i)*ImageWidth+l+j;count+;for(k=0;k9;k+)mid=meank;ii=k;for(l=k+1;lmeanl)mid=meanl;ii=l;meanii=meank;meank=mid;pBufi*ImageWidth+j=mean4;10memcpy(sGray,pBuf,sizeof(BYTE)*ImageWidth*ImageHeight);deletepBuf;voidCtatsticDetect:

Dilation(BYTE*sGray,intnWidth,intnHeight,intstructure33)BYTE*t_gray=newBYTEnWidth*nHeight;BYTEpixel;inti,j,m,n;for(j=1;jnHeight-1;j+)for(i=1;inWidth-1;i+)t_grayj*nWidth+i=(BYTE)0;for(m=0;m3;m+)for(n=0;n3;n+)if(structuremn=-1)continue;pixel=sGray(j+(m-2)+1)*nWidth+i+(n-1);if(pixel=255)t_grayj*nWidth+i=(BYTE)255;break;memcpy(sGray,t_gray,nWidth*nHeight);deletet_gray;voidCStatsticDetect:

Erosion(BYTE*sGray,intnWidth,intnHeight,intstructure33)BYTE*t_gray=newBYTEnWidth*nHeight;BYTEpixel;inti,j,m,n;for(j=1;jnHeight-1;j+)for(i=1;inWidth-1;i+)t_grayj*nWidth+i=(BYTE)255;for(m=0;m3;m+)for(n=0;n3;n+)if(structuremn=-1)continue;pixel=sGray(j+(m-2)+1)*nWidth+i+(n-1);if(pixel=0)t_grayj*nWidth+i=(BYTE)0;break;memcpy(sGray,t_gray,nWidth*nHeight);deletet_gray;voidCStatsticDetect:

GetMultiData(BYTE*sGray,intnWidth,intnHeight)count+;for(intj=0;jnHeight;j+)for(inti=0;inWidth;i+)m_pTemplatej*nWidth+i+=sGrayj*nWidth+i;voidCStatsticDetect:

GetBgImage()11inti,j,t,pixel;for(j=0;jHEIGHT;j+)for(i=0;i255)m_pBackgroundt=BYTE(255);elseif(pixel0)m_pBackgroundt=BYTE(0);elsem_pBackgroundt=BYTE(pixel);voidCStatsticDetect:

SaveBmp(BYTE*buffer,intnwidth,intnheight,intbit,intindex)BITMAPFILEHEADERbfh;bfh.bfType=0X4D42;bfh.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+nheight*nwidth);bfh.bfReserved1=0;bfh.bfReserved2=0;bfh.bfOffBits=(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);BITMAPINFOHEADERbih;bih.biSize=sizeof(BITMAPINFOHEADER);bih.biWidth=nwidth;bih.biHeight=nheight;bih.biPlanes=1;bih.biBitCount=bit;bih.biCompression=BI_RGB;bih.biSizeImage=nheight*nwidth;bih.biXPelsPerMeter=0;bih.biYPelsPerMeter=0;bih.biClrUsed=0;bih.biClrImportant=0;RGBQUADpalate256;for(intt=0;t256;t+)palatet.rgbBlue=(BYTE)t;palatet.rgbGreen=(BYTE)t;palatet.rgbRed=(BYTE)t;palatet.rgbReserved=0;intbpl=(nwidth*8+31)/32*4;intimageSize=nheight*bpl;BYTE*imgData=NULL;if(bit=8)imgData=newBYTEimageSize;memcpy(imgData,buffer,imageSize);if(bit=24)imgData=newBYTEimageSize*3;memcpy(imgData,buffer,imageSize*3);CFilefp;CStringpath;path.Format(Frame%03d.bmp,index);TRYfp.Open(F:

+path,CFile:

modeCreate|CFile:

modeWrite);fp.Write(LPSTR)&bfh,sizeof(BITMAPFILEHEADER);/写文件头fp.Write(LPSTR)&bih,sizeof(BITMAPINFOHEADER);/写信息头if(bit=8)fp.Write(LPSTR)palate,sizeof(RGBQUAD)*256);/写调色板fp.Write(imgData,nheight*nwidth);/写数据12CATCH(CFileException,e)THROW_LAST();END_CATCHdeleteimgData;imgData=NULL;fp.Close();voidCStatsticDetect:

ImageCopy(BYTE*sGray,intm_num)if(m_num=0)memcpy(image1,sGray,IMAGESIZE);elseif(m_num=1)memcpy(image2,sGray,IMAGESIZE);elseif(m_num=2)memcpy(image3,sGray,IMAGESIZE);elseif(m_num=4)memcpy(image4,sGray,IMAGESIZE);elsememcp

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2