基于目标识别的计价系统科技文化节论文.doc

上传人:李司机 文档编号:1180411 上传时间:2022-07-14 格式:DOC 页数:15 大小:121.19KB
返回 下载 相关 举报
基于目标识别的计价系统科技文化节论文.doc_第1页
第1页 / 共15页
基于目标识别的计价系统科技文化节论文.doc_第2页
第2页 / 共15页
基于目标识别的计价系统科技文化节论文.doc_第3页
第3页 / 共15页
基于目标识别的计价系统科技文化节论文.doc_第4页
第4页 / 共15页
基于目标识别的计价系统科技文化节论文.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于目标识别的计价系统科技文化节论文.doc》由会员分享,可在线阅读,更多相关《基于目标识别的计价系统科技文化节论文.doc(15页珍藏版)》请在三一办公上搜索。

1、基于目标识别的计价系统摘要:现今诸多公司高校餐厅计价系统依旧采用人工结算人工打卡,进程缓慢且出错率较高。为了在诸如下班下课的高峰期有效改善结账效率与准确率,本文提出一种基于目标识别的计价系统。该系统利用VC+6.0架构为框架,以Intel公司的开源项目OpenCV计算机视觉库为核心。系统主要使用的算法有:图像处理部分图像的灰度化,图像的二值化,平滑滤波;图像识别部分Canny边缘检测,霍夫圆变换;计算部分:概率投票策略。系统主要功能:使用普通USB摄像头,采集餐盘图像作为输入,检测出当前餐盘半径。通过用户对于规定餐盘半径以及对应价格的输入计算相应价格,然后输出到屏幕。关键词: OpenCV;计

2、算机视觉;VC+6.0;1.项目背景及意义人类正在进入信息时代,计算机将越来越广泛地进入几乎所有领域。一方面是更多未经计算机专业训练的人也需要应用计算机,而另一方面是计算机的功能越来越强,使用方法越来越复杂。这就使人在进行交谈和通讯时的灵活性与目前在使用计算机时所要求的严格和死板之间产生了尖锐的矛盾。人可通过视觉和听觉,语言与外界交换信息,并且可用不同的方式表示相同的含义,而目前的计算机却要求严格按照各种程序语言来编写程序,只有这样计算机才能运行。为使更多的人能使用复杂的计算机,必须改变过去的那种让人来适应计算机,来死记硬背计算机的使用规则的情况。而是反过来让计算机来适应人的习惯和要求,以人所

3、习惯的方式与人进行信息交换,也就是让计算机具有视觉、听觉和说话等能力。 使用安装有计算机视觉技术软件智能计算机不但使计算机更便于为人们所使用,同时如果用这样的计算机来控制各种自动化装置,就可以使这些自动化系统和智能机器人具有适应环境,和自主作出决策的能力。这就可以在各种场合取代人的繁重工作,或代替人到各种危险和恶劣环境中完成任务。 现今几乎所有的高校和公司的食堂都依旧采用人工结账:人工算出价格再人工打卡,耗时耗力,在诸如下班放学的人流高峰期结账缓慢,而且较容易出错。于是本文提出一种基于计算机视觉技术的目标检测方案,与刷卡系统配合,可以改善结账的时间与正确率,在人流高峰期能显著加快结账。另一方面

4、,该系统成本低廉,使用简单,节省了人工结账的工人工资,解放了生产力,具有广阔的应用前景。2.概要设计通过对用户在操作与检测时候通常需要注意的地方和遇到的问题进行分析和归纳,本系统需能操作简洁,并能高效,稳定地输出检测结果。在对待检测的餐盘尺寸进行改变时能灵活地进行参数设置。基于以上需求,本软件提出了如下功能模块需求:1.硬件需求系统使用成本不能过高,计算单元与图像采集单元需能方便购买。以普通PC和普通USB摄像头为主要硬件平台。2.软件需求A. 参数输入模块需求:参数输入界面简洁友好,能满足用户临时改变参数设置的要求,并且能稳定地将参数传入检测与计算模块。B. 检测与计算模块需求:检测正确率不

5、低于99%,需能稳定鲁棒地输出检测结果到输出检测模块中,并且检测时间不高于1s。C. 输出检测结果模块 需求:输出模块需提供价格显示,提供刷卡接口。3.软件主体功能模块本软件所实现的功能模块需求如图3-1所示:软件主体功能模块1.软件使用说明2.设置参数对话框3.餐盘检测4.显示价格算法功能模块1.图像采集2.灰度化与二值化3.霍夫圆变换5.投票图2-1 功能需求分析图2.1功能模块设计详细说明2.1.1软件使用说明该模块的作用是:当用户按下菜单使用说明按钮的时候,出现一个对话框模式的界面,对该软件的主要功能进行简要介绍,以及如何使用该软件还有操作注意事项。该功能通过CSMART_COUNTE

6、RView类的OnMenudes菜单响应函数和对话框来实现。2.1.2设置参数对话框该模块的作用是:当用户按下菜单设置规格与价格按钮的时候,出现一个对话框模式的界面,提示用户输入特定餐盘的半径以及对应价格。该功能通过CSMART_COUNTERView类的OnMenuSet菜单响应函数和对话框来实现。2.1.3餐盘检测该模块的作用是:当用户按下菜单目标检测餐盘检测按钮的时候,打开摄像头采集数据,并实时显示出餐盘的半径以及标记处位置。该功能通过调用OpenCV的库函数来实现,主要使用到的库函数有:1cvCaptureFromCAM; /打开本机摄像头2cvCreateMemStorage;/申请

7、存数组3. cvNamedWindow;/创建图像显示对话框 4. cvCreateImage;/分配存给一幅新图像5. cvCreateMat;/创建矩阵6. cvCvtColor;/彩图转灰度图7.cvSmooth;/平滑滤波8. cvHoughCircles;/霍夫圆变换9. cvCircle;/画圆函数10.cvReleaseImage;/释放图像存11.cvReleaseMat;/释放矩阵12.cvReleaseCapture;/释放摄像头2.1.4价格计算与显示该模块的作用是:读入用户设定参数,当一帧检测完毕的时候,进入投票。当检测到20帧时,计算投票结果和价格,并调用对话框IDD

8、_MessageDlg,显示总价格。3.详细设计3.1主要算法介绍3.1.1 图像的灰度化 理论:在检测图像的特定目标之前,通常要对所采集得图像进行相关的处理,而图像边缘检测的前提是对图像进行灰度化和二值化,灰度化是二值化的前提。对于彩色转灰度,有一个很著名的心理学公式:Gray = R*0.299 + G*0.587 + B*0.114采用系数缩放的方法可以避免大量浮点运算,加快运算速度。所以实际应用时需要整数算法。可将系数放大100倍进行运算。使用移位算法还能再加快运算速度。OpenCV实现:调用函数cvCvtColor;参数说明:cimg 原图指针Gimg 目标图指针CV_BGR2GRA

9、Y 转换方式为彩图转灰度图3.1.2 图像的二值化理论:图像二值化是提取轮廓的前提算法思路: 1.从灰度图指针得到改点成灰度值 2.按照给定的阀值判断改点灰度是否大于它,如果比阀值大,取255,反之取0 3.将该点的新颜色255或0输出到图像上阀值的选取一般用127,也可以按照颜色统计来进行。就是将整幅图片的所有点的灰度累加起来再除以总的点数,除下来的商作为一个阀值。缺点是必须对整图片扫描两次,速度比较慢。OpenCV实现:调用函数 cvThreshold;参数说明:src原图指针 dst 目标图指针Threshold 阈值 threshold_type 阈值类型3.1.3 平滑滤波理论:摄像

10、头采集装置一般采集的图像会带有噪声,如何消除噪声改善系统的鲁棒性,降低误检率,是模式识别的基础和关键。一般把利用噪声的性质消除图像中噪声的方法称为图像平滑image smoothing或简单称为平滑。移动平均法是最简单的消除噪声的方法,它的原理是,通过使图像模糊,达到看不到细小噪声的目的。本系统采用简单移动平均法滤波。OpenCV实现:调用函数cvSmooth;参数说明:src 输入图像 Dst 输出图像smoothtype 平滑方式3.1.4 Canny边缘检测理论:Canny边缘检测的实现大致有5步:1.高斯滤波对图像去噪。2.由原始灰度图求出纵横2个梯度图sobel算子或robort算子

11、,以及综合梯度图。3.结合3个梯度图来进行非极大抑制4.进行边缘连接5.对边缘进行细化OpenCV实现:调用函数 cvCanny;参数说明:image 原图指针 edges 检测结果存放指针threshold1 第一个阈值threshold2 第二个阈值aperture_size Sobel算子核大小3.1.5 霍夫圆变换理论:计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变换,其核心思想是把图像中属于某种图形的点集二维映射到一个点可以是高维上

12、,这个点记录了点集中点的数目,使得程序通过搜索峰值找到该点,这个点就是图形的参数,而该参数的围就叫做参数空间。霍夫变换不仅能够识别出图像中有无需要检测的图形,而且能够定位到该图像包括位置、角度等,本系统通过此原理,调用OpenCV库函数中的霍夫圆变换,返回图像中圆每个圆的半径和圆心位置。根据这些数据来投票,最后计算结果。OpenCV实现:调用函数cvHoughCircles;参数说明:image输入8-比特、单通道灰度图像circle_storage 监测到的圆的数据存储仓,存储圆心,半径等数据method 霍夫变换方式,dp累加器图像的分辨率min_dist该参数让算法能明显区分的两个不同圆

13、之间的最小距离。param1用于Canny的边缘阀值上限,下限被置为上限的一半。param2累加器的阀值。min_radius最小圆半径。max_radius最大圆半径。说明:由于霍夫变换函数部调用了Canny边缘检测和阈值处理,故本系统的代码部分没再调用。3.1.6简单的投票策略理论:采集一帧图像识别后,检测出结果。对于不同结果半径进行一个投票累加操作,在达到20帧之后,停止采集,计算该结果的票数。对于不同的票数得出物体的数量以及尺寸算法实现伪代码:/投票ifsize1-10 & 当前半径 ticket1+;/票数累加 ifsize2-10 &当前半径 ticket2+; ./出循环后,计算

14、投票结果 if2&ticket1 p1=price1; /存在一个尺寸相同,对应价格为Price1的餐盘 if20&ticket1 p1=price1*2;/存在两个尺寸相同,对应价格为Price1的餐盘 if2&ticket2 p2=price2; if20&ticket2 p2=price2*2; price=p1+p2;/得出总价格3.2主体功能模块介绍3.2.1参数的设置和传递一、参数的设置: 系统结账时需预先知道待检测物既定的尺寸及相应价格。对此需求,为了方便当用户改变不同尺寸的餐盘,本软件设计了餐盘尺寸及其相应价格的参数设置对话框。实现对话框需如下几步:1.点击插入-资源。点选插入

15、对话框资源,修改该对话框ID为IDD_DIALOG_SET。2.在对话框中加入输入说明的静态文本控件以及文本输入控件,其中六个文本输入控件分别为三个餐盘的尺寸输入和三个对应价格输入。ID分别为:餐盘尺寸输入控件:IDC_Size1,IDC_Size2,IDC_Size3对应价格输入控件:IDC_Price1,IDC_Price2,IDC_Price3参数设置对话框如图所示:图4-1 参数设置对话框二、参数的传递 对话框在接收到参数信息后,要传递给主函数。本系统采用声明外部变量的方式声明了六个变量,分别对应三个尺寸和三种价格。六个变量如下:extern int size1=0;extern in

16、t size2=0;extern int size3=0;extern int price1=0;extern int price2=0;extern int price3=0; 在声明了变量以及得到参数后,需要通过一个消息进行传递。本系统通过用户点选参数设置对话框的OK键进行参数的传递,相应消息相应函数如下:void CSetDlg:OnOK / TODO: Add extra validation herechar s15,s25,s35,s45,s55,s65;GetDlgItem-GetWindowText;GetDlgItem-GetWindowText;GetDlgItem-Get

17、WindowText;GetDlgItem-GetWindowText;GetDlgItem-GetWindowText;GetDlgItem-GetWindowText; size1=atoi;/字符串转整型变量 size2=atoi; size3=atoi;price1=atoi;price2=atoi;price3=atoi;CDialog:OnOK;3.2.2目标尺寸和数量的检测与投票 此部分为本系统的核心代码,当用户设置完参数后,点选菜单栏的目标检测-餐盘检测,调用View类的OnMenuCircle函数。该函数分为四部分:1、图像的采集和预处理灰度化,平滑滤波 2、餐盘的检测霍夫圆

18、变换3、投票与计算4、打开消息对话框,返回检测结果函数的程序流程图如下:图3-2 程序流程图下面依次介绍OnMenuCircle函数的这四个部分。一、图像的采集和预处理灰度化,平滑滤波 图像的采集调用OpenCV的库函数cvCaptureFromCAM该函数功能为初始化一个摄像头捕捉器。具体代码如下:CvCapture* capture=NULL;/初始化摄像头指针./获取摄像头capture = cvCaptureFromCAM; if AfxMessageBox; return; cvNamedWindow;图像预处理:调用cvCvtColor;cvConvert;cvSmooth;具体代

19、码如下:cvCvtColor; /灰度化 cvConvert; /翻转矩阵 cvSmooth; /平滑处理二、餐盘的检测霍夫变换 预处理图像之后,调用OpenCV的霍夫变换函数cvHoughCircles检测图像中的圆的圆心位置与半径,并将这些值返回到一个存储数组storage,等待下一步处理。具体代码如下:CvSeq* results = cvHoughCircleswidth/10;三、投票与计算 函数采用简单的投票策略,对采集的20帧图像序列部圆的半径与数量进行一个投票,到20帧时跳出循环,计算投票结果。具体代码如下:/当小于20帧时whileframe = cvQueryFrame&n

20、FrmNumnFrmNum+;if /如果是第一帧,需要申请存,并初始化 pFrImg = cvCreateImagecvSizewidth, frame-height, IPL_DEPTH_8U,1; pFrMat = cvCreateMatheight, frame-width, CV_32FC1;pFrameMat = cvCreateMatheight, frame-width, CV_32FC1;cvCvtColor;cvConvert;else/霍夫圆变换/投票ifcvRoundsize1-10 & cvRoundticket1+;ifcvRoundsize2-10 & cvRou

21、ndticket2+;ifcvRoundsize3-10 & cvRoundticket3+;/end of whilecvShowImage;/显示当前处理的一帧图像/计算投票结果 if2&ticket1p1=price1; if20&ticket1 p1=price1*2;if2&ticket2p2=price2; if20&ticket2 p2=price2*2;if2&ticket3p3=price3; if20&ticket3 p3=price3*2; price=p1+p2+p3;/总价四、打开消息对话框,返回检测结果具体代码如下:/显示信息 CMessageDlg *pMdlg=

22、new CMessageDlg; pMdlg-Create;pMdlg-ShowWindow; pMdlg-GetDlgItem-SetWindowText;此外,为了演示圆的检测过程,函数包含了对于圆的定位标记功能,代码如下:counter=20; forint i=0;itotal;i+float* p=cvGetSeqElem;CvPoint pt = cvPointcvRound,cvRound; cvCircle pFrImg, / 画圆pt,cvRound,/半径CV_RGB,2;/左上方显示文字CvPointpt1 = cvPoint;cvPutTextpFrImg,Radius

23、=,pt1,&font,CV_RGB; CvPoint pt2= cvPoint; cvPutTextpFrImg,PAX,pt2,&font,CV_RGB; / 读取圆半径,显示 char string_x5; /整型转字符型itoacvRound, string_x, 10;CvPoint_pt4=cvPoint; cvPutTextpFrImg,string_x,pt4,&font,CV_RGB; counter+=30;/end of for完整的OnMenuCircle函数见附录部分3.3非主体功能模块介绍3.3.1软件主界面与背景图片设计软件主界面采用MFC经典的单文档界面结构,加

24、入友好易用的菜单以及简洁的背景图片,改善用户操作体验。实现背景图片需要两个个步骤1.使用绘图工具设计或直接下载一1024*768的bmp格式图片,在工程中选择插入资源,在弹出的对话框中点选Bitmap项,找到资源并插入。注意图片只能编辑256色或更少颜色的位图,超过256色不能被加载。2.为当前工程的View类添加响应函数OnEraseBkgnd。具体函数如下:BOOL CSMART_COUNTERView:OnEraseBkgnd / TODO: Add your message handler code here and/or call defaultCBitmap bitmap;bitm

25、ap.LoadBitmap;BITMAP bmp;bitmap.GetBitmap;CDC dcCompatible;dcCompatible.CreateCompatibleDC;dcCompatible.SelectObject;CRect rect;GetClientRect;pDC-StretchBlt0,0,rect.Width,rect.Height,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY;return TRUE;3.3.2菜单设计 菜单栏,工具栏和状态栏是组成Windows程序图形界面的经典元素。大多数Windows应

26、用程序都提供了菜单。方便友好的菜单设计是系统易用性的保证,本系统采用最简单的菜单设计,能方便用户快速上手。实现菜单需三个步骤:1点击ResourceView的Menu项,在右侧界面中编辑菜单界面,本系统的菜单层次如下:文件 目标检测设置帮助新建餐盘检测规格与价格关于打开使用说明保存另存为2.右击菜单,修改菜单ID。本系统菜单ID:餐盘检测 ID_MENU_CIRCLE规格与价格 ID_MENU_SET关于 ID_APP_ABOUT使用说明 ID_MENUDES3.双击菜单,添加菜单响应函数。以下为各菜单的响应函数:/餐盘检测void CSMART_COUNTERView:OnMenuCircl

27、e /餐盘检测过程已给出,此处略/规格与价格void CSMART_COUNTERView:OnMenuSet / TODO: Add your command handler code hereCSetDlg dlg;dlg.DoModal; /调用设置对话框 /使用说明void CSMART_COUNTERView:OnMenudes / TODO: Add your command handler code hereCDesDlg dlg;dlg.DoModal; /调用使用说明对话框3.3.3使用说明 使用说明帮助用户快速上手本系统以及提醒用户注意事项,实现使用说明对话框步骤为: 1.

28、点击菜单的插入资源项,点选插入对话框。2.修改对话框ID为IDD_DescDlg。3.添加静态文本,写入使用说明与注意事项。添加后的使用说明如图:图3-4 使用说明对话框参考文献1兵旗,明.实用数字图像处理与分析 M.:清华大学,2008:86-90.2铮,王燕平.数字图像处理与机器视觉M.:人民邮电 2010:34-563Gary Rost Bradski.学习OpenCV M.:清华大学,2009:34-45,78-88,204-2104OpenCV中文手册 DB/CD. OpenCV中文站.opencv.org 2010 15,24,385Gonzalez. 数字图像处理M.:电子工业 2005:240-245,345-356 6鑫, 余安萍. VC+深入详解 M.:电子工业 2006:124-136,380-390,400-4107侯俊杰 深入浅出MFC M. 华中科技大学 2005 124-1268来军 江游.一种规则几何图形的计算机识别方法J.图形图像与多媒体,2011,30942-45

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号