系统详细设计

上传人:阳*** 文档编号:152193968 上传时间:2022-09-15 格式:DOC 页数:14 大小:54.50KB
收藏 版权申诉 举报 下载
系统详细设计_第1页
第1页 / 共14页
系统详细设计_第2页
第2页 / 共14页
系统详细设计_第3页
第3页 / 共14页
资源描述:

《系统详细设计》由会员分享,可在线阅读,更多相关《系统详细设计(14页珍藏版)》请在装配图网上搜索。

1、系统详细设计说明书杨后超2013.8.061. 引言1.1 编写目的本报告根据交通部门实时的对道路车流量的统计的要求,对系统如何实现功能如何划分做了概要性的说明。通过该报告能够使详细设计人员和开发人员了解本系统的体系结构,技术方案,软件的功能能结构,各业务间的数据接口,数据库结构等,并对整个系统的功能实现按照功能模块进行了较为详细的规划和描述,为下一步的开发任务指明方向,提出了纲要。1.2 参考资料【1】城市道路车流量检测技术及其应用研究_颜李【2】 基于视频的车流量检测技术研究_吴志伟【3】 运动车辆视频检测与车流量检测方法的研究_墨芹2. 设计概述本系统采用结构化设计的方法来实现系统总体功

2、能,提高系统的各项指标,即将整个系统合理的划分成各个功能模块,正确地处理模块之间和模块内部的联系以及和数据库的联系,定义各模块的内部结构,通过对模块的设计和模块之间关系的系统来实现整个系统的功能。2.1 限制和约束开发过程中最为重要的里程碑如下表:时间段里程碑9月项目启动、需求分析10月上半月系统的概要设计、系统详细设计10月到十二月完成白天黑夜流量统计系统1月上半月完成各种噪声所带来的对检测、识别的影响。1月下半月测试、部署在以上这些条件下,系统要实现的目标是:目的是实现系统的总体设计,明确系统的总体结构和数据结构,即划分出系统的功能模块,设计出系统的数据库数据结构,为下一步的对每个模块进行

3、设计的详细设计工作提供依据,同时为系统的测试、修改和维护提供依据。2.2 设计原则和设计要求一设计原则(1). 独立性每个模块只涉及软件要求的具体子功能(2). 易维护性基于MFC开发,采用统一的编码规则和注释,便于系统开发和维护(3). 可扩展性考虑到用户需求的多变性,采用易于扩展的软件架构,便于软件升级二 设计要求l 需求规定:1.系统打开视频序列界面:2.人工划定感兴趣的区域(ROI):3.模式选择(白天和黑夜):4.跟踪界面:5.流量统计界面:3系统的软件构架开始总系统构架: 视频采集灰度化、平滑去噪等确定ROI同时判断 白天检测模式 夜间检测模式 车流量统计4.系统主要模块功能以及代

4、码白天车流量统计:void CCarTrackSystemDlg:Nightupdate_mhi( IplImage* img, IplImage* dst, int diff_threshold ) / 夜间开始 / double timestamp = clock()/1000.; CvSize size = cvSize(img-width,img-height); int i, idx1 = last, idx2; IplImage* silh; CvSeq* seq; CvRect comp_rect; double count; double angle; CvPoint cent

5、er; double magnitude; CvScalar color; if( !mhi | mhi-width != size.width | mhi-height != size.height ) if( buf = 0 ) buf = (IplImage*)malloc(N*sizeof(buf0); memset( buf, 0, N*sizeof(buf0); for( i = 0; i N; i+ ) cvReleaseImage( &bufi ); bufi = cvCreateImage( size, IPL_DEPTH_8U, 1 ); cvZero( bufi ); c

6、vReleaseImage( & mhi ); cvReleaseImage( & orient ); cvReleaseImage( & segmask ); cvReleaseImage( & mask ); mhi = cvCreateImage( size, IPL_DEPTH_32F, 1 ); cvZero( mhi ); orient = cvCreateImage( size, IPL_DEPTH_32F, 1 ); segmask = cvCreateImage( size, IPL_DEPTH_32F, 1 ); mask = cvCreateImage( size, IP

7、L_DEPTH_8U, 1 ); cvCvtColor( img, buflast, CV_BGR2GRAY ); / “灰度” idx2 = (last + 1) % N; last = idx2; silh = bufidx2; cvAbsDiff( bufidx1, bufidx2, silh ); cvThreshold( silh, silh, diff_threshold, 1, CV_THRESH_BINARY ); cvUpdateMotionHistory( silh, mhi, timestamp, MHI_DURATION ); / 更新 MHI cvCvtScale(

8、mhi, mask, 255./MHI_DURATION, (MHI_DURATION - timestamp)*255./MHI_DURATION ); cvZero( dst ); cvCvtPlaneToPix(mask, 0, 0, 0, dst ); cvCalcMotionGradient( mhi, mask, orient, MAX_TIME_DELTA, MIN_TIME_DELTA, 3 ); if( !storage ) storage = cvCreateMemStorage(0); else cvClearMemStorage(storage); / 运动分割 seq

9、 = cvSegmentMotion( mhi, segmask, storage, timestamp, MAX_TIME_DELTA ); for( i = 0; i total; i+ ) if( i rect;/ 去掉小的部分if( comp_rect.width + comp_rect.height total 0) MessageBox(NULL,Motion Detected,NULL,0); / 感性区域 cvSetImageROI( silh, comp_rect ); cvSetImageROI( mhi, comp_rect ); cvSetImageROI( orien

10、t, comp_rect ); cvSetImageROI( mask, comp_rect ); angle = cvCalcGlobalOrientation( orient, mask, mhi, timestamp, MHI_DURATION); angle = 360.0 - angle; / 在轮廓内计算点数 count = cvNorm( silh, 0, CV_L1, 0 ); cvResetImageROI( mhi ); cvResetImageROI( orient ); cvResetImageROI( mask ); cvResetImageROI( silh );

11、if( count width,img-height); CvPoint pt3,pt4;CvRect bndRect=cvRect(0,0,0,0);/用cvBoundingRect画出外接矩形时需要的矩形CvFont font1;/初始化字体格式int linetype=CV_AA; / get current frame size,得到当前帧的尺寸 int idx1, idx2; IplImage* silh; IplImage* pyr = cvCreateImage( cvSize(size.width & -2)/2, (size.height & -2)/2), 8, 1 );

12、CvMemStorage *stor; CvSeq *cont; /*先进行数据的初始化*/ if( !mhi | mhi-width != size.width | mhi-height != size.height ) if( buf = 0 ) /若尚没有初始化则分配内存给他 buf = (IplImage*)malloc(N*sizeof(buf0); memset( buf, 0, N*sizeof(buf0); for(int i = 0; i idx2(h_next) CvRect r = (CvContour*)cont)-rect; if(r.height * r.width

13、 1500) / 面积小的方形抛弃掉 bndRect = cvBoundingRect(cont, 0); /Get an average X position of the moving contour. avgX = (bndRect.x + bndRect.x + bndRect.width) / 2; avgY = (bndRect.y + bndRect.y + bndRect.height) / 2;if(avgX (m_tangle1.xm_tangle2.x?m_tangle2.x:m_tangle1.x ) & avgX m_tangle2.x?m_tangle1.x:m_t

14、angle2.x )& avgY m_tangle2.y?m_tangle1.y:m_tangle2.y) & avgY (m_tangle1.ym_tangle2.y?m_tangle2.y:m_tangle1.y ) cvRectangle( img, cvPoint(r.x,r.y), cvPoint(r.x + r.width, r.y + r.height), CV_RGB(255,0,0), 1, CV_AA,0); pt3.x = bndRect.x; pt3.y = bndRect.y; pt4.x = bndRect.x + bndRect.width; pt4.y = bn

15、dRect.y + bndRect.height;cvInitFont(&font1, CV_FONT_HERSHEY_DUPLEX, 0.5, 0.5, 0, 2, 8); for(int i=0;iavgX !=0 & fabs(double)(avgX-TrackBlocki-avgX)avgY)FramesTracked=nFrmNum; TrackBlocki-avgX=avgX; TrackBlocki-avgY=avgY; /记录运动轨迹 TrackBlocki-guiji_index=TrackBlocki-guiji_index+1; int index_g=TrackBlo

16、cki-guiji_index; TrackBlocki-guijiindex_g.x=avgX; TrackBlocki-guijiindex_g.y=avgY; for (int k=1;kguijik.x , TrackBlocki-guijik.y), cvPoint(TrackBlocki-guijik+1.x, TrackBlocki-guijik+1.y), CV_RGB(0,191,255), 2, 8, 0 ); /取轨迹中三点,判断其在被监控车道的运动趋势来得到是否为逆行 if (index_g = 4) if (TrackBlocki-guiji1.yguijiindex

17、_g/2.y&TrackBlocki-guijiindex_g/2.yguijiindex_g-1.y)/在框内输出顺行cvPutText(img,Normal, cvPoint(pt3.x+30,pt4.y), &font1, cvScalar(255,0,255); else cvPutText(img,Regression, cvPoint(pt3.x+20,pt4.y), &font1, cvScalar(255,0,0); Findcar=true; break;/使跳出for循环 if(Findcar!=true& avgYDirection=1; TrackBlockNo-Fra

18、mesTracked=nFrmNum; TrackBlockNo-avgX=avgX; TrackBlockNo-avgY=avgY; if(No=29) No=0; else No+; m_totalcar+; CString str; str.Format(%d,m_totalcar); GetDlgItem(IDC_NUM)-SetWindowText(str); Findcar=false; /end of for/对于没有匹配的车辆,表示已经出了边界,清空数组for(int j=0;jFramesTracked != nFrmNum)/虽然置为零,但是可能零和当前中心的值在设定的范围

19、内,所以不行。/TrackBlockj=NULL;为何用NULL不行。TrackBlockj-Direction=0;TrackBlockj-FramesTracked=0;TrackBlockj-avgX=0;TrackBlockj-avgY=0; / free memory cvReleaseMemStorage(&stor); cvReleaseImage( &pyr ); 5. 系统接口、数据库设计规划5.1 接口设计一接口 采用opencv2.46的函数库可以处理视频序列,道路电子眼拍摄的视频流导入到系统中,本系统暂时用视频导入其中,由于编码格式的问题,无法通过接口打开所拍摄的视频,

20、为了是编码格式为XVID、格式为AVI、视频码率是512kbps、帧速率是24fps,音频编码用MP3。二内部接口内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。还用settimer()函数定时发送命令。5.2 数据库设计 本系统我做了一个视频数据库,里面包含晴天的视频,阴天的视频,雨天的视频,夜间的视频。在各个类别的视频中有特殊的情况,包括白天在太阳的照射下车辆出现阴影的情况,有雨天特别是夜间车灯照射的情况。5.2.2运用设计一运行设计(1). 运行模块的组合程序在有输入时启动接收数据

21、模块,通过各模块之间的调用,读入并对输入进行格式化。在接收数据模块得到一定的数据时,将数据通过处理识别并跟踪车辆。然后对信息进行处理,产生相应的输出。 (2). 运行时间在软体的需求分析中,对运行时间的要求为必须对作出的操作有较快的反应。尤其在当视频数据不停的输入时,如果不对数据及时的处理就会产生溢出的情况,因为当大量的数据传入系统时系统要对每一帧的数据进行处理,只有提高时间的有效性才能保证对车流量的统计。 6. 难点及处理方案(1). 视频的预处理 a车辆行驶的过程中可能存在“鬼影”,怎样解决“鬼影”是个难点。 b.视频抖动,在对抖动的视频进行车辆检测,导致误差很大。 通过对视频预处理后,经过运动估计,然后运动补偿,最后输出经过处理的稳定视频。c.当两车距非常近并且基本保持相对静止时,在车辆跟踪,利用外接矩形分别框住是个难点。(2). 白天黑夜的模式转换在白天和黑夜的对车辆的识别是不一样的。怎样实现对不同的视频采用相应的识别方法,是一个难点。14 / 14

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!