ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:206.86KB ,
资源ID:28890554      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28890554.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第二章单高斯模型.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第二章单高斯模型.docx

1、第二章单高斯模型评阅成绩Northwestern Polytechnical University计算机学院专业实习报告专业名称计算机科学与技术实习题目基于多摄像机协同的运动对象分割与三维重建系统之-背景建模与运动前景分割姓 名宋雪梅班 级10010801学 号2008302420实习时间2011/6/27-2011/7/8指导教师杨涛2011年7月8日摘 要前景检测是目标跟踪、分类、识别、行为理解等后继处理的基础。目前,主流的前景检测算法采用背景建模的思路,通过分析输入图像和估计背景的差异,提取变化的前景区域。由于对目标类型、观测角度、距离等因素不敏感,该类算法在很多监控场合得到广泛应用。本

2、文通过对传统的单高斯模型进行改进,有效的解决了使用传统单高斯模型造成的阴影问题。对背景的更新率提出了一种新的方案,使得单高斯模型能迅速收敛。将基于色度畸变与一阶梯度信息的阴影消除方法结合起来,能够较好的消除阴影,使得运动目标轮廓更为精确,清晰。实验结果表明,在背景较为稳定的环境中,基于单高斯的运动目标检测方法能够很好很迅速的检测出运动目标,相比混合高斯模型,其时间复杂度和空间复杂度都具有优越性。关键词:单高斯模型,背景建模,前景检测,阴影消除第一章 项目简介 1.1总体介绍第一步:构建摄像机内外参数标定子系统采用经典的摄像机标定方法和摄像机自标定方法分别进行多个摄像机的标定,获取各个摄像机的内

3、参和外参,从而建立图像像素坐标与世界坐标的映射关系,这是之后进行三维重建的基础。第二步:构建背景建模与运动前景分割子系统通过分析输入图像和估计背景的差异,提取变化的前景区域。对原始拍摄的视频数据进行前景提取,输入为彩色图像序列,输出为二值化的前景分割结果,即为剪影。第三步:构建三维重建与显示子系统根据前景分割的结果,利用三维重建可获得目标的三维信息,目前基于多视点环境的快速三维重建方法主要以Shape-From-Silhouette (SFS)算法为基础。原理如下:由于剪影是待重建物体在图像平面上的投影,因而物体应该完全落在从多个视点的剪影反投影形成的空间区域的交集中,这种根据剪影获取反投影交

4、集的方法便是SFS,如果相机的数目足够多,并且合理布局以便覆盖广泛的视角,那么SFS方法获得的交集将是真实目标三维形状的良好近似。此模块要求组员利用前景分割的结果进行三维重建,并根据原始图像对重建的点云上色,最终完成三维重建结果的可视化显示。本文进行第二个模块即背景建模与运动前景分割子系统的论述。1.2本文研究内容 近年来,随着硬件设备成本大大降低,智能视频监控系统得到了日益广泛的研究与应用,智能视频监控技术也得到了越来越多的关注。运动检测技术是智能视频监控技术中的核心部分,通常用光流法,时间差分法和背景差分法进行运动目标检测。光流法利用运动目标随时间变化的光流特性进行运动检测,但其抗燥性能差

5、,且计算非常复杂,很难满足视频监控系统实时性的要求。时间差分法又称帧差分法,它通过对相邻帧对应像素的差分来提取图像中的运动区域,能够很好的适应光照的变化,对背景的变化也有很好的自适应性。但用时间差分法提取出的运动区域往往会有较大的噪声,且对于运动缓慢的目标很难检测出来。背景差分法通过将输入的每一帧视频帧和通过训练得到的背景图像进行差分来检测运动目标。考虑到背景不可能完全固定,一个好的背景模型应该能够反映出背景随时间的推移发生的变化。因此背景模型应该能够反映出背景随时间的推移发生的变化。因此,背景差分法的关键不在于差分,而在于背景模型的建立与更新。常用的背景建模方法有单高斯模型法和混合高斯模型法

6、。与混合高斯模型法相比,单高斯模型法的时间效率更高。在室内以及背景较为稳定的环境下,单高斯模型法可以很好的检测出运动目标。本文对传统的单高斯模型进行了一些改进,在背景的更新策略方面做了一些改进。在更新率的选取方面提出了一种搞笑的方法,使得高斯模型具有更好的收敛性。在阴影抑制方面,将基于色度畸变和一阶梯度信息的阴影消除方法相结合,取得了较好的效果。第二章 单高斯模型2.1单高斯模型的理论基础高斯模型法来源于高斯分布,其基本原理为:视频图像由于受到外界因素的影响,各个像素点的像素值随时间的推移会有一些变化,这个变化近似于高斯分布。当有物体经过时,像素值的变化就会很大,物体出现时对应的像素点的像素值

7、不服从高斯分布。利用某一时刻某像素点的像素值是否满足高斯分布可以判断该点是背景点还是前景点。2.1.1 背景建模 单高斯分布背景模型适用于单模态背景情形,以下是利用单高斯分布背景模型进行运动检测的过程:首先,对一段时间内的视频序列图像进行训练,从而建立每个像素点的颜色分布初始高斯模型。假设这段时间内共N帧图像。则有:,此后,为输入一帧图像的每个像素点建立高斯模型。其中,下标t表示帧序号,为像素点的当前像素值,为当前像素点高斯模型的均值, 为当前像素点高斯模型的均方差。若(T 为阈值),则该点判定为前景点,否则为背景点(这时又称与相匹配)。在实际应用中,可以用等价阈值替代概率阈值。记,在常见的一

8、维情形中,则常根据的取值设置前景检测阈值:若T(T需根据实验选取),则该点被判定为前景点,否则为背景点。用公式表示为:2.1.2 背景更新 背景不可能是完全固定的,随着时间的推移会发生一些变化。一个好的北京模型应该能够反映出背景的这些变化,否则会做出错误的检测。因此,需要对背景模型进行实时更新。与以往的方法不同的是,这里的更新为100%更新,即每读入一帧,判断是否前景,若为前景则标记,若不是前景则判断是否和背景匹配,若匹配则进行更新,否则不予置理。2.1.3 本文对传统单高斯进行的改进1.与对像素的灰度值建立高斯分布不同的是,本文对一个像素点的R,G,B三通道分别建立高斯分布,这样做的意义是:

9、采用三通道,将目标与背景分割出来的几率更大。2.对更新率的设置:更新率为100%。即:每读入一帧图片,判断相应像素是否为背景点,若是,则对背景更新,若不是则直接标记为前景点。3.鉴于该项目所使用的背景单一,变化甚微,判断前景与否的阈值选取采用统计实验数据,观察结果的方法,试探性的选取分割阈值。2.2 单高斯算法流程图2.2.1 背景建模 2.2.2 前景提取 第三章 阴影消除3.1阴影消除 背景差分法的缺陷是阴影点常常被误检为运动点,从而严重干扰了运动目标的分割与提取。由于阴影具有与运动目标相同的运动特征,阴影消除成为运动目标检测与提取的难点。CUCCHIARA等提出了一种在 HSV颜色空间内

10、去除阴影的方法8, JIANG等采用基于阴影强度与几何特征的三步阴影检测算法剪除阴影9,KUMAR等提出基于不同彩色空间检测前景物体及其阴影的方法10。本文将基于YUV颜色空间色度畸变和一阶梯度模型的阴影检测算法结合起来消除阴影,取得了较好效果。3.1.1 基于YUV颜色空间色度畸变的阴影检测方法 YUV是被欧洲电视系统所采用的一种颜色编码方法,其中Y表示亮度,UV代表色差,U和V是构成彩色的两个分量。YUV颜色空间的一个重要特性是其亮度信号Y和色度信号U、V相分离。这一特性可以很好地应用于阴影的检测与消除。应用式(12)可以很容易地将图像从RGB颜色空间转换到YUV颜色空间。基于YUV颜色空

11、间色度畸变的阴影检测方法的原理是:阴影区域和它所对应的背景区域的亮度会有较大变化,但其色度几乎保持不变或有微小的变化。这样,根据当前帧中某像素点和它所对应的背景中的像素点的色度变化大小就可以检测出该像素点是否属于阴影点。基于YUV颜色空间色度畸变的阴影检测方法的步骤为:(1) 应用式(12)将当前帧图像x从RGB颜色空间转换到YUV颜色空间,记Ix=(Yx,Ux,Vx);(2) 应用式(12)将背景图像b从RGB颜色空间转换到YUV颜色空间,记Ib=(Yb,Ub,Vb);(3) 分别计算Ix和Ib在UV平面上的投影,分别记为Ix和Ib;(4) 利用式(13)计算向量OIx和OIb之间的夹角余弦

12、cos;参考文献11求出角度再与阈值进行比较,使用了反余弦函数。本文根据两向量之间的夹角0,180,且的余弦值在该区间内单调递减这一性质,仅需求出两向量夹角余弦,然后与设定的阈值T进行比较,简化了运算。3.1.2 基于一阶梯度模型的阴影检测方法当目标和阴影的颜色差别明显时,基于YUV颜色空间色度畸变的阴影检测方法能够很好地分离目标和阴影。但当目标和阴影的颜色几乎相同时,基于YUV颜色空间色度畸变的阴影检测方法就不再有效了12。此时,利用图像的一阶梯度信息可以有效地区分出阴影和目标区域。基于一阶梯度模型的阴影检测方法过程如下:(1) 采用Sobel算子计算背景图像中的每一个像素点在x、y方向的梯

13、度,分别记为bxi和byi(i=R,G,B);(2) 计算背景图像的像素值均方差i(i=R,G,B)。(3) 采用Sobel算子计算当前帧图像中的每一个像素点在x、 y方向的梯度,分别记为ix和iy(i=R,G,B)。(4) 利用式(15)判断像素点是否属于阴影点。基于YUV颜色空间色度畸变的阴影检测方法和基于一阶梯度模型的阴影检测方法有它们各自的适用范围,将二者结合起来使得算法具有更好的适应性。如果某点同时满足式(14)、式(15)中的第一个条件,则判定该点为阴影点,否则为目标点。(在生产实习期间上述阴影算法只是做了些了解,由于时间原因没有实现。)3.2 简单的阴影消除法 由于阴影的灰度值相

14、对低,可以通过控制改变阈值,使得阴影得到部分消减。 pixel=cvGet2D(pRGBImg,j,k); t1=(pixel.val0-MeanBjk)0?(pixel.val0-MeanBjk):(MeanBjk-pixel.val0);t2=(pixel.val1-MeanGjk)0?(pixel.val1-MeanGjk):(MeanGjk-pixel.val1); t3=(pixel.val2-MeanRjk)0?(pixel.val2-MeanRjk):(MeanRjk-pixel.val2); if(t125|t225) pixel.val0=255; cvSet2D(Outlo

15、ok,j,k,pixel); 本文中,阈值的选择是基于对实验结果统计得出并不断试探取的局部范围内最佳值。据统计,对于此项目的背景而言,t1,t2的值局限在10以内,所以阈值可取2030之前,取值太大,会使前景的像素点减少。 阈值设为25与20效果会有很大的不同。阈值设为20.阈值设为25:以上方法的正确性有待考证,但是对于本次实验效果还是比较有说服力。阈值设置错误会导致结果出错:第四章 实验结果与评价分析4.1 实验结果4.1.1 闭运算去噪效果图:孔洞明显,效果不好4.1.2 开运算去噪效果图:对较大的噪声起增强作用,效果欠佳4.1.3 采用中值滤波对于8个图像序列,每个序列404帧运行时间

16、为:326s由此可见单高斯运行速率非常高,其占用的存储空间也很低,在算法实现中,六个数组来存储RGB三通道的均值和方差,设为全局变量,其次在背景建模时申请一个IplImage * pRGBImg 来存储每次读入的图像;在前景提取中申请两个IplImage变量,pRGBImg,Outlook,可见单高斯模型的实现空间复杂度很低。由此可见其时间,空间效率优于混合高斯模型,更加满足实时性的要求。int MeanB500700;/存储均值int MeanG500700;int MeanR500700;int Mean2B500700;/存储方差int Mean2G500700;int Mean2R50

17、0700;4.2 存在的缺陷4.2.1 缺陷一然而单高斯存在的致命问题是其鲁棒性不高,会产生错误的检测,如果一个物体进入场景中,起初时会被当做前景而显示出来,由于没有将其加入到背景中进行更新,若随后此物体一直没有离去,现实中,我们把它当做场景,但是由于单高斯模型的局限性,此物体会一直被当做前景而显示出来。例如下图所示:左上方的人影随着时间的推移在场景中没有变动,应该被当做背景,但由于算法的缺陷却一直被当做前景而提取显示出来。4.2.2 缺陷二对于和场景颜色RGB变动范围相似的前景部分,单高斯模型检测不出来,如上图所示,人体的胳膊和腿部就没有没检测出来,这是单高斯的致命缺陷,也是提出混合高斯的需

18、求所在。因此以上模型只适用于单稳态场景下检测不断运动的物体,其存在的缺陷可以通过建立混合高斯模型解决,但是由于它高效的时空效率,在有些场合仍然得到广泛应用。第五章 测试与运行 该程序可在windowsxp,window7等系统下运行,依附于vs2010实现,运行速度较快。 使用方法:打开工程gauss,在Debug中单击gauss.exe文件执行即可。第六章 生产实习心得体会本次生产实习是自上大学以来最有意义的一次实习,它让我们看到了学习了三年的成效,这是一个真正意义上的项目或者成品,之前的课程设计还都是仅局限在课本内容,而本次的实习,更加贴近生活,生产,让我们看到了知识的创造力,也让我们感受

19、到自己可以作为一个生产者存立于社会。本次的实习项目有重大的现实意义,运动目标的检测与重建,在生产,生活,娱乐,军事,游戏等方面有很好的发展前景,现在,将来我们必能看到它广阔的市场前景,因此研究这个课题是非常有意义和使用价值。通过本次实习,让我感觉到图像的世界是丰富多彩,其乐无穷的,有很多有意义有趣的东西等待我去发现去创造,这是本次实习最大的意义,它给我指明了一条未来的道路。在实习过程中,遇到了很多问题,例如:matlab中很多函数不熟悉,vs2010用的不顺,openCV,openGL都是新接触的库,很多函数都要通过XX,google,不断地查询才会用。从茫然到做出成果,我们学会了很多,历练了

20、很多,深深地感受到科研的艰辛和乐趣。此外,另一个感受是:小组的力量是强大的,如果把项目交付给我一个人,我也许很难完成,或者很难在短期完成。小组成员团结协作,小组间相互合作讨论,都是一个项目成功完成的基石。在实习中,我学会了思考,查阅资料,遇到不懂得问题不会像以前一样依赖于别人的解答,学会了自己去寻找答案。感谢杨老师的指导和学长们的解答和技术,理论支持,让我们这些菜鸟们得以展开双臂飞翔。附录:程序编码#include string.h #include cv.h #include highgui.h #include #include#include#include time_t t_start

21、 = 0;time_t t_end = 0;FILE * fplog = NULL;#define printf(fmt, .) fprintf(fplog,fmt,_VA_ARGS_); int N=100; int height = 480;int width = 640;int num=25;int MeanB500700;int MeanG500700;int MeanR500700;int Mean2B500700;int Mean2G500700;int Mean2R500700;int M=404;char filename140480;char filename240480;d

22、ouble lamda=3;int point;CvScalar pixel;void filename(char * inname,char *outname) int i; for(i=0;iM;i+) sprintf(filename1i,inname,i); sprintf(filename2i,outname,i); int gaussground() int i,j,k; IplImage * pRGBImg = NULL; pRGBImg=cvLoadImage(filename10,1); if(!pRGBImg) printf( failed to load input im

23、age1n); return -1; for(j=0;jheight;j+) / for(k=0;kwidth;k+) pixel=cvGet2D(pRGBImg,j,k); MeanBjk=pixel.val0; MeanGjk=pixel.val1; MeanRjk=pixel.val2; Mean2Bjk=400; Mean2Gjk=400; Mean2Rjk=400; for(i=1;iN;i+) pRGBImg=cvLoadImage(filename1i,1); if(!pRGBImg) printf( failed to load input image1n); return -

24、1; for(j=0;jheight;j+) for(k=0;kwidth;k+) pixel=cvGet2D(pRGBImg,j,k); if( abs(pixel.val0-MeanBjk)lamda*sqrt(double)MeanBjk) &abs(pixel.val1-MeanGjk)lamda*sqrt(double)MeanGjk) &abs(pixel.val2-MeanRjk)lamda*sqrt(double)MeanRjk) ) point=point+1; MeanBjk=MeanBjk*(point-1)+pixel.val0; MeanGjk=MeanGjk*(po

25、int-1)+pixel.val1; MeanRjk=MeanRjk*(point-1)+pixel.val2; Mean2Bjk=Mean2Bjk*(point-1)+(pixel.val0-Mean2Bjk)*(pixel.val0-Mean2Bjk); Mean2Gjk=Mean2Gjk*(point-1)+(pixel.val1-Mean2Gjk)*(pixel.val1-Mean2Gjk); Mean2Rjk=Mean2Rjk*(point-1)+(pixel.val2-Mean2Rjk)*(pixel.val2-Mean2Rjk); MeanBjk=(int)(MeanBjk)/p

26、oint; MeanGjk=(int)(MeanGjk)/point; MeanRjk=(int)(MeanBjk)/point; Mean2Bjk=(int)(Mean2Bjk)/point; Mean2Gjk=(int)(Mean2Gjk)/point; Mean2Rjk=(int)(Mean2Bjk)/point; /if /for /for cvReleaseImage(&pRGBImg); / return 1;int object() IplImage * pRGBImg = NULL; / IplImage * Outlook=NULL; int i,j,k; int t1,t2

27、,t3; for(i=0;iwidth, pRGBImg-height), pRGBImg-depth, 1); cvZero(Outlook); for(j=0;jheight;j+) for(k=0;k0?(pixel.val0-MeanBjk):(MeanBjk-pixel.val0); t2=(pixel.val1-MeanGjk)0?(pixel.val1-MeanGjk):(MeanGjk-pixel.val1); t3=(pixel.val2-MeanRjk)0?(pixel.val2-MeanRjk):(MeanRjk-pixel.val2); if(i=100) printf(%d ,t1); printf(%d ,t2); printf(%d n,t3); if(t125|t225) pixel.val0=255; cvSet2D(Outlook,j,k,pixel); if(iN) if( abs(pixel.val0-MeanBjk)3*sqrt(double)MeanBjk) &abs(pixel.val1-MeanGjk)3*sqrt(d

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1