基于平均背景建模的运动目标检测
来源:互联网 发布:淘宝买家秀福利木耳 编辑:程序博客网 时间:2024/04/30 05:57
建立一个场景模型,包含图像灰度均值、帧间平均差值。
对于输入的后续视频,当灰度在区间内时,认为是静止区域,反之为运动目标。判断静止灰度区间为:
diff实际上可认为是为了抑制一定的噪声,当图像序列噪声很小时,效果不错,但在实际场景基本不适用,例如我的实验图像。
我使用了前100帧图像作场景建模,暂未考虑场景更新问题,因此不能适用于背景具有运动目标的情况(例如风吹窗帘、摇曳的树),光线问题。
如下三幅图是对运动目标的检测,可以看出除了人物还有大量的噪声被检测出来。
因此,我对背景模型进行了去噪处理,采用了cvsmooth函数中的简单模糊、高斯、中值等,本以为中值效果应该最好,但由于噪声分布过于紧密,中值去噪并不好,最后采用15大小的普通加权去噪,效果如下。
使用大窗口进行模糊确实可以去除噪声,但对目标也会进行模糊,检测出现问题,此外,当噪声过大时,信号被严重干扰,甚至被淹没。说明简单的背景模型或去噪是行不通的。的背景模型或去噪是行不通的。
#include<highgui.h>#include<cv.h>#include<cxcore.h>void main(){ CvCapture *capture = cvCreateFileCapture("Walk2.mpg");CvSize img_sz = cvSize(384,288);IplImage *pic; IplImage *frame = cvCreateImage(img_sz,8,1);IplImage *frame2 = cvCreateImage(img_sz,8,1);IplImage *framedn = cvCreateImage(img_sz,8,1);IplImage *Imask = cvCreateImage(img_sz,IPL_DEPTH_8U,1);IplImage *Iscratch = cvCreateImage(img_sz,IPL_DEPTH_32F,1);IplImage *IavgF = cvCreateImage(img_sz,IPL_DEPTH_32F,1);IplImage *IpreF = cvCreateImage(img_sz,IPL_DEPTH_32F,1);IplImage *Iscratch2 = cvCreateImage(img_sz,IPL_DEPTH_32F,1);IplImage *IdiffF = cvCreateImage(img_sz,IPL_DEPTH_32F,1);IplImage *IhiF = cvCreateImage(img_sz,IPL_DEPTH_32F,1);IplImage *IlowF = cvCreateImage(img_sz,IPL_DEPTH_32F,1);int fnum=1,Icount = 100,ht=5;cvZero(IavgF);cvZero(Iscratch);cvZero(IpreF);cvZero(Iscratch2);cvZero(IdiffF); while(fnum<=Icount) { pic = cvQueryFrame(capture); if(!pic) break; cvCvtColor(pic,frame,CV_RGB2GRAY); cvSmooth(frame,framedn,CV_BLUR,15); cvCvtScale(framedn,Iscratch,1.0,0); cvAcc(Iscratch,IavgF); cvAbsDiff(Iscratch,IpreF,Iscratch2); cvAcc(Iscratch2,IdiffF); cvCopy(Iscratch,IpreF); fnum++;} cvConvertScale(IavgF,IavgF,(double)(1.0/(Icount))); /*均值*/ cvConvertScale(IdiffF,IdiffF,(double)(1.0/(Icount))); /*帧间插值*/ cvAddS(IdiffF,cvScalar(1.0),IdiffF); cvConvertScale(IdiffF,Iscratch,ht); /*high threshold = low threshold*/ cvAdd(IdiffF,IavgF,IhiF); cvSub(IavgF,Iscratch,IlowF); while(1) { pic = cvQueryFrame(capture); if(!pic) break; cvCvtColor(pic,frame,CV_RGB2GRAY); cvSmooth(frame,framedn,CV_BLUR,15); cvCvtScale(framedn,Iscratch,1.0,0); cvInRange(Iscratch,IlowF,IhiF,Imask); cvSubRS(Imask,cvScalar(255),Imask); cvNamedWindow("mask"); cvShowImage("mask",Imask); cvNamedWindow("frame"); cvShowImage("frame",frame); cvWaitKey(33); }}
0 0
- 基于平均背景建模的运动目标检测
- 基于平均背景建模的运动目标检测(二)
- 基于codebook背景建模的运动目标检测
- 混合高斯背景建模-视频的运动目标检测
- 运动目标检测_单高斯背景建模
- OpenCV_基于自适应背景更新的运动目标检测
- 基于自组织背景减除的运动目标检测算法
- OpenCV_基于自适应背景更新的运动目标检测
- 【OPENCV】基于背景差法的运动目标检测
- 运动背景下的运动目标检测
- 运动目标检测_混合高斯背景建模
- 动态背景下的运动目标检测
- 运动目标检测--改进的背景减法
- 运动目标检测--改进的背景减法
- 运动目标检测--背景减法
- 运动目标检测--背景减法
- 运动目标检测--背景减法
- 基于Vibe算法的运动目标检测
- Android 打开本地pdf文件
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher B HDU 1686
- 数据库优化之读写分离
- Unity Shader学习之相关知识搜集
- 一个平庸者的自述
- 基于平均背景建模的运动目标检测
- RabbitMQ之window环境启动
- HDU 1857 (prim+平面坐标+题意理解)
- 一道面试题深入了解java底层
- Android Studio Git .gitignore规则及使用方法
- Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息
- 职业计划
- 在ALV中加入OLE报表
- 23种设计模式