版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、多媒体通信类-数字电视课程设计报告 项目名称 闯入警戒区报警监测 项目人员 班 级 学 号 联系电话 电子邮件 指导教师 日 期 2014 年 6 月 20 日目录一课设目的3二课程设计前期准备32.1数字图像处理的基本方法31 )图像变换:32 )图像编码压缩:33 )图像增强和复原:34 )图像分割:45 )图像描述:46 )图像分类(识别):42.2背景消除4三项目背景5四项目实现64.1信号处理流程图64.2背景消除算法VIBE流程图74.3算法详解74.3.1初始化Vibe(IplImage *img)74.3.2背景模型初始化Vibe(IplImage *img)84.3.3检测图
2、像,得到前景图像素void Detect(IplImage *img)94.3.4消除前景图中小面积轮廓区域DeleteSmallAreaInForeground(double minArea)114.3.5消除前景图中连续不动区域void ClearLongLifeForeground(int i_lifeLength)124.3.6用鼠标画出重要区域134.3.7闯入区域判断144.3.8前景图优化15五项目结果165.1测试1165.2测试二18六课设总结19一课设目的1. 了解数字图像处理的基本手段和方法2. 熟练掌握数字图像处理的方法,并能编程实现3. 重点掌握背景消除算法VIBE以
3、及区域闯入检测二课程设计前期准备2.1数字图像处理的基本方法1 )图像变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。2 )图像编码压缩:图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允
4、许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。3 )图像增强和复原:图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。4 )图像分割:图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这
5、是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。5 )图像描述:图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。6 )图像分类(识别):图像分类(识别)属于模式识别的范畴,其主要内容是图像经
6、过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。2.2背景消除背景减除是在自动视频内容分析中最常使用的工具之一,特别是在视频监测领域。这些年来大量的方法在背景减除中被推荐使用。他们其中大部分,都会给每个像素点建立一个近期历史的模型。新像素值的分类通过与一致的像素模型做比较得到。这些技术可以分为两类:1)参数模型技术:为每个像素点建立参数模型;2)基于采样的技术:通过采集每个像素点的以前的观测值建立他们的模型。高斯
7、混合模型大概是使用最多的参数技术。它适用于处理多模型动态环境(随时间改变的日期,云,树叶)的背景。然而因为它的灵敏度不能准确调节,它成功处理背景中高低频变化的能力尚待讨论。另外对于嘈杂图像的参数建模(特别是变动)是成问题的。基于采样的技术通过观测像素值建模回避了一部分参数建模的步骤。这提高了对噪声的坚韧性。他们通过直接在像素模型里包含进最新的观测值实现了对背景中高频事件的高速反应。然而,他们成功处理不同速度的伴随事件的能力有所限制,因为他们通过先入先出的顺序更新他们的像素模型。事实上,一些技术对每个像素使用两个子模型:一个短期模型和一个长期模型。虽说这是个方便的解决方法,但它是人造虚假的模型,
8、还需要对任何给定情景进行调节以正常工作。三项目背景随着摄像机产业大规模化,摄像头的应用已经普及;在公共安全,智能家居的监控中都广泛地应用了大量的摄像头。人工且时时地管理这些众多的摄像头显然不可能,另外在智能家居等民用市场,传统的利用控制室大屏幕的监控手段不适合一般用户的需求,未来的监控终端应该是手机等移动设备。因此需要摄像头能够智能地判断重要敏感区域的安全性。闯入区域警报监测系统,如果有人进入了预先设定的禁止区域等异常情况发生,发出警报声,并加以扩展后可以启动预先设定的报警机制自动调用实际场景中声光报警装置。这种技术在我们的社会生活中应用十分广泛:围墙翻越智能报警、物品偷窃滞留报警、车辆检测应
9、用、厕所检测应用,这些应用的核心技术都是闯入警戒区报警监测四项目实现4.1信号处理流程图4.2背景消除算法VIBE流程图4.3算法详解4.3.1初始化Vibe(IplImage *img)确定视频的尺寸,初始化Vibe类中的数据,以及设置背景消除算法中的各项参数。if (!img)cout<<" The parameter referenced to NUll Pointer!"<<endl;return;this->g_Height=img->height;this->g_Width=img->width;g_Radius=
10、20;g_MinMatch=2;g_SampleNum=20;g_threshold=50;g_offset=(WINSIZE-1)/2;Sq_L =0;Sq_Le = 0;Sq_W = 0;Sq_We =0;g_storage = cvCreateMemStorage(0);g_contour = 0;g_ContourImg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);g_ForeImg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);g_Gray=cvCreateImage(cvGetSize
11、(img),IPL_DEPTH_8U,1);g_Edge=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);g_SegementMask=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);g_UpdateMask=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);element=cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_CROSS,NULL);cvCvtColor(img,g_Gray,CV_BGR2GRAY);/ 以上完成相
12、关的初始化操作4.3.2背景模型初始化Vibe(IplImage *img)1)每个像素模型有20个采样值,对每个像素模型初始化g_Modelkij=0,k是样值点个数,i,j代表坐标。2)对周围3*3的邻域内进行采样3)初始化前景点掩膜的生命长度/* 以下实现第一帧在每个像素的8邻域内的采样功能,建立对应的背景模型*/int i=0,j=0,k=0;g_Model=new unsigned char*g_SampleNum;for (k=0;k<g_SampleNum;k+)g_Modelk=new unsigned char *g_Height;for(i=0;i<g_Heig
13、ht;i+)g_Modelki=new unsigned char g_Width;for (j=0;j<g_Width;j+)g_Modelkij=0;/ 采样进行背景建模double dVal;int ri=0,rj=0; /随机采样的值for (i=g_offset;i<g_Height-g_offset;i+)for (j=g_offset;j<g_Width-g_offset;j+)/ 周围3*3的邻域内进行采样for(k=0;k<g_SampleNum;k+)ri=GetRandom(i);rj=GetRandom(j);dVal=cvGetReal2D(g
14、_Gray,ri,rj);g_Modelkij=dVal;/ 初始化前景点掩膜的生命长度LifeLength=new int *g_Height;for (i=0;i<g_Height;i+)LifeLengthi=new int g_Width;for(j=0;j<g_Width;j+)LifeLengthij=0;4.3.3检测图像,得到前景图像素void Detect(IplImage *img)1)颜色空间转化cvCvtColor(img,g_Gray,CV_BGR2GRAY);2)将边界外的前景图像素点设置为白色;3)通过计算随机检测像素点与像素模型的样值匹配的次数值,来
15、判断此像素属于前景还是背景,如果判断为前景,则将此坐标的前景图像素设为白色;4)更新背景模型与领域模型cvZero(g_ForeImg);cvCvtColor(img,g_Gray,CV_BGR2GRAY);int i=0,j=0,k=0;double dModVal,dCurrVal;int tmpCount=0;/ 距离比较在阈值内的次数double tmpDist=0;int iR1,iR2;/产生随机数int Ri,Rj; / 产生邻域内X和Y的随机数for (i=0;i<g_Height;i+)for (j=0;j<g_Width;j+)if( i < g_offs
16、et | j < g_offset | i> g_Height - g_offset | j> g_Width - g_offset )cvSetReal2D(g_ForeImg,i,j,0);/Change a specific array element.continue;elsetmpCount=0;dCurrVal=cvGetReal2D(g_Gray,i,j);/Return a specific element of single-channel 2D array.for (k=0;k<g_SampleNum && tmpCount<g
17、_MinMatch ;k+)dModVal=g_Modelkij;/tmpDist=CalcPixelDist(dCurrVal,dModVal);/tmpDist=CalcuColorDist(dCurrVal,dModVal);tmpDist=fabs(dModVal-dCurrVal);if (tmpDist<g_Radius)tmpCount+;/判断是否匹配上if (tmpCount>=g_MinMatch)cvSetReal2D(g_ForeImg,i,j,0);/ 背景模型的更新iR1=GetRandom(0,15);if (iR1=0)iR2=GetRandom()
18、;g_ModeliR2ij=dCurrVal;/进一步更新邻域模型iR1=GetRandom(0,15);if (iR1=0)Ri=GetRandom(i);/i+1或者i-1Rj=GetRandom(j);/j=1或者j-1iR2=GetRandom();/0-19任意一个数字g_ModeliR2RiRj=dCurrVal;elsecvSetReal2D(g_ForeImg,i,j,255);4.3.4消除前景图中小面积轮廓区域DeleteSmallAreaInForeground(double minArea)1)在前景图中找轮廓cvFindContours( g_ForeImg, sto
19、rage, &first_seq, sizeof(CvContour), CV_RETR_LIST );2)当轮廓所在的矩形区域面积小于阈值minArea/* =20 */,则把此区域删掉3)画出轮廓区域void Vibe:DeleteSmallAreaInForeground(double minArea/* =20 */)/cvZero(g_SegementMask);/cvCopy(g_ForeImg,g_SegementMask);int region_count = 0;CvSeq *first_seq = NULL, *prev_seq = NULL, *seq = NUL
20、L;CvMemStorage* storage = cvCreateMemStorage();cvClearMemStorage(storage);cvFindContours( g_ForeImg, storage, &first_seq, sizeof(CvContour), CV_RETR_LIST );for( seq = first_seq; seq; seq = seq->h_next )CvContour* cnt = (CvContour*)seq;if( cnt->rect.width * cnt->rect.height < minArea
21、)prev_seq = seq->h_prev;if( prev_seq )prev_seq->h_next = seq->h_next;if( seq->h_next ) seq->h_next->h_prev = prev_seq;elsefirst_seq = seq->h_next;if( seq->h_next ) seq->h_next->h_prev = NULL;elseregion_count+; cvZero(g_ForeImg);cvDrawContours(g_ForeImg, first_seq, CV_RG
22、B(0, 0, 255), CV_RGB(0, 0, 255), 10, -1);cvReleaseMemStorage(&storage);4.3.5消除前景图中连续不动区域void ClearLongLifeForeground(int i_lifeLength)判断前景点掩膜的生命长度是否大于阈值i_lifeLength/* =200 */,若大于阈值,则将此像素从前景图中删去,归为背景。void Vibe:ClearLongLifeForeground(int i_lifeLength/* =200 */)int i=0,j=0;double dVal=0;double dLi
23、fe=0;int iR1,iR2=0;double dCurrVal=0;for (i=g_offset;i<g_Height-g_offset;i+)for (j=g_offset;j<g_Width-g_offset;j+)dVal=cvGetReal2D(g_ForeImg,i,j);dLife=LifeLengthij;if (dLife>i_lifeLength)LifeLengthij=0;dCurrVal=cvGetReal2D(g_Gray,i,j);/ 更新背景模型iR1=GetRandom();iR2=GetRandom();g_ModeliR1ij=dC
24、urrVal;g_ModeliR2ij=dCurrVal;elseLifeLengthij=dLife+1;4.3.6用鼠标画出重要区域1)定义cvMouseCallback函数static void onMouse(int event, int x, int y, int, void*)if (select_flag)select.x = MIN(origin.x, x);/不一定要等鼠标弹起才计算矩形框,而应该在鼠标按下开始到弹起这段时间实时计算所选矩形框select.y = MIN(origin.y, y);select.width = abs(x - origin.x);/算矩形宽度和
25、高度select.height = abs(y - origin.y);P1.x = select.x, P1.y = select.y;P2.x = select.x + select.width, P2.y = select.y + select.height;if (event = CV_EVENT_LBUTTONDOWN)select_flag = true;/鼠标按下的标志赋真值origin = cvPoint(x, y);/保存下来单击是捕捉到的点select = cvRect(x, y, 0, 0);/这里一定要初始化,宽和高为(0,0)是因为在opencv中Rect矩形框类内的
26、点是包含左上角那个点的,但是不含右下角那个点else if (event = CV_EVENT_LBUTTONUP)select_flag = false;2)在主函数中,读取每帧时,画出矩形框,边框颜色是蓝色cvSetMouseCallback("img", onMouse, 0);char c = (char)cvWaitKey(20);if (27 = c)return -1;/画出矩形框cvRectangle(frame, P1, P2, cvScalar(255, 0, 0), 3, 8, 0);/能够实时显示在画矩形窗口时的痕迹if (pV->breaki
27、n(frame, P1, P2) = 1)cvRectangle(frame, P1, P2, cvScalar(0,255, 0), 3, 8, 0);4.3.7闯入区域判断1)在前景图中获得人物轮廓;2)判断在区域内的轮廓占此轮廓的百分比,若超过5%,则算作在区域内;3)如果此帧图像的人物在轮廓内,则返回逻辑值in=1;int Vibe:GetContour(IplImage *img)int counts;int size;bool in=0;int x = 0, y = 0;cvFindContours(img, g_storage, &g_contour, sizeof(Cv
28、Contour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cvPoint(0, 0);/*for (int i = 0; i < sizeof(g_contour); i+)CvPoint * pt = (CvPoint*)cvGetSeqElem(g_contour, i);*/for (CvSeq *c = g_contour; c != NULL; c = c->h_next) /这里的contour不单单只有一个轮廓序列counts =0 ;CvPoint* point = new CvPointc->total;CvSeqR
29、eader reader;CvPoint pt = cvPoint(0, 0);cvStartReadSeq(c, &reader);for (int i = 0; i<c->total; i+)CV_READ_SEQ_ELEM(pt, reader);x = (int)pt.x; y = (int)pt.y;if (x>Sq_W)&&(x<Sq_We)if (y>Sq_L)&&(y< Sq_Le)counts+;size = sizeof(g_contour);if (counts>=size*0.05)in
30、= 1;return in;4)在:breakin(IplImage *img, CvPoint p, CvPoint po)函数中,若breakT的值为1,则报警,执行Error()bool Vibe:breakin(IplImage *img, CvPoint p, CvPoint po)Sq_W = p.x, Sq_We = po.x;Sq_L = p.y, Sq_Le = po.y;breakT = 0;cvCopy(g_ForeImg, g_ContourImg, NULL);breakT = GetContour(g_ContourImg);cvWaitKey(1);Error()
31、;return breakT;void Vibe:Error()if (breakT = 1)PlaySound(TEXT("C:UsersPublicMusicSample MusicWindows.wav"), NULL, SND_FILENAME | SND_ASYNC);5)在主函数,当breakT为1时,区域边框由蓝色变为绿色if (pV->breakin(frame, P1, P2) = 1)cvRectangle(frame, P1, P2, cvScalar(0,255, 0), 3, 8, 0);4.3.8前景图优化通过对前景图的开集运算,对前景图进行优化。IplImage* Vibe:AdvancedImg(IplImage *img)IplImage *dst = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);int element_shape = CV_SHAPE_RECT;element = cvCre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年专业物流企业运输服务协议模板版
- 2024年城市地下综合管廊建设项目合同
- 2024年内江办理客运从业资格证版试题
- 2024三亚二手房买卖合同
- 2024年云南客运从业资格证模拟考试试题题库答案
- 2024年鞍山办理客运从业资格证模拟考试
- 2024年周口客运从业资格证考试真题保过
- 2024年内蒙古客运驾驶员考试试卷河南省
- 2024年白城道路旅客运输驾驶员继续教育试题
- 2024年度人力资源服务合同:某公司与人力资源服务机构之间关于招聘与培训服务的合同2篇
- 化工生产装置开工实施方案
- 银行资金监管协议
- 光荣升旗手PPT课件
- 集团总裁办规章制度流程汇编
- 消防泵房及雨淋阀室建筑施工方案
- 数码相机常用英文缩写对照表
- 最新最终版旋塞阀技术协议
- 高三总复习专项抢分信息技术卷共8套Word
- 服装洗水唛洗涤标志
- 律师事务所申请注销登记表(样表)
- 门店选址评估表
评论
0/150
提交评论