2-系统详细设计

上传人:回**** 文档编号:125064409 上传时间:2022-07-26 格式:DOC 页数:19 大小:54.50KB
返回 下载 相关 举报
2-系统详细设计_第1页
第1页 / 共19页
2-系统详细设计_第2页
第2页 / 共19页
2-系统详细设计_第3页
第3页 / 共19页
点击查看更多>>
资源描述
系统具体设计阐明书杨后超.8.061. 引言1.1 编写目的本报告根据交通部门实时的对道路车流量的记录的规定,对系统如何实现功能如何划分做了概要性的阐明。通过该报告可以使具体设计人员和开发人员理解本系统的体系构造,技术方案,软件的功能能构造,各业务间的数据接口,数据库构造等,并对整个系统的功能实现按照功能模块进行了较为具体的规划和描述,为下一步的开发任务指明方向,提出了纲要。1.2 参照资料【1】都市道路车流量检测技术及其应用研究_颜李【2】 基于视频的车流量检测技术研究_吴志伟【3】 运动车辆视频检测与车流量检测措施的研究_墨芹2. 设计概述本系统采用构造化设计的措施来实现系统总体功能,提高系统的各项指标,即将整个系统合理的划提成各个功能模块,对的地解决模块之间和模块内部的联系以及和数据库的联系,定义各模块的内部构造,通过对模块的设计和模块之间关系的系统来实现整个系统的功能。2.1 限制和约束开发过程中最为重要的里程碑如下表:时间段里程碑9月项目启动、需求分析10月上半月系统的概要设计、系统具体设计10月到十二月完毕白天黑夜流量记录系统1月上半月完毕多种噪声所带来的对检测、辨认的影响。1月下半月测试、部署在以上这些条件下,系统要实现的目的是:目的是实现系统的总体设计,明确系统的总体构造和数据构造,即划分出系统的功能模块,设计出系统的数据库数据构造,为下一步的对每个模块进行设计的具体设计工作提供根据,同步为系统的测试、修改和维护提供根据。2.2 设计原则和设计规定一设计原则(1). 独立性每个模块只波及软件规定的具体子功能(2). 易维护性基于MFC开发,采用统一的编码规则和注释,便于系统开发和维护(3). 可扩展性考虑到顾客需求的多变性,采用易于扩展的软件架构,便于软件升级二 设计规定l 需求规定:1.系统打开视频序列界面:2.人工划定感爱好的区域(ROI):3.模式选择(白天和黑夜):4.跟踪界面:5.流量记录界面:3系统的软件构架开始总系统构架: 视频采集灰度化、平滑去噪等拟定ROI同步判断 白天检测模式 夜间检测模式 车流量记录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 center; 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 ); cvReleaseImage( & 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, IPL_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( 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 = 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( orient, 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 ); 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 ); 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 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_tangle2.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 = bndRect.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=TrackBlocki-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_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-FramesTracked=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)/虽然置为零,但是也许零和目前中心的值在设定的范畴内,因此不行。/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的函数库可以解决视频序列,道路电子眼拍摄的视频流导入到系统中,本系统临时用视频导入其中,由于编码格式的问题,无法通过接口打开所拍摄的视频,为了是编码格式为XVID、格式为AVI、视频码率是512kbps、帧速率是24fps,音频编码用MP3。二内部接口内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。接口传递的信息将是以数据构造封装了的数据,以参数传递或返回值的形式在各模块间传播。还用settimer()函数定期发送命令。5.2 数据库设计 本系统我做了一种视频数据库,里面涉及晴天的视频,阴天的视频,雨天的视频,夜间的视频。在各个类别的视频中有特殊的状况,涉及白天在太阳的照射下车辆浮现阴影的状况,有雨天特别是夜间车灯照射的状况。5.2.2运用设计一运营设计(1). 运营模块的组合程序在有输入时启动接受数据模块,通过各模块之间的调用,读入并对输入进行格式化。在接受数据模块得到一定的数据时,将数据通过解决辨认并跟踪车辆。然后对信息进行解决,产生相应的输出。 (2). 运营时间在软体的需求分析中,对运营时间的规定为必须对作出的操作有较快的反映。特别在当视频数据不断的输入时,如果不对数据及时的解决就会产生溢出的状况,由于当大量的数据传入系统时系统要对每一帧的数据进行解决,只有提高时间的有效性才干保证对车流量的记录。 6. 难点及解决方案(1). 视频的预解决 a车辆行驶的过程中也许存在“鬼影”,如何解决“鬼影”是个难点。 b.视频抖动,在对抖动的视频进行车辆检测,导致误差很大。 通过对视频预解决后,通过运动估计,然后运动补偿,最后输出通过解决的稳定视频。c.当两车距非常近并且基本保持相对静止时,在车辆跟踪,运用外接矩形分别框住是个难点。(2). 白天黑夜的模式转换在白天和黑夜的对车辆的辨认是不同样的。如何实现对不同的视频采用相应的辨认措施,是一种难点。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


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

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


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