毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc

上传人:仙人指路1688 文档编号:2946110 上传时间:2023-03-05 格式:DOC 页数:30 大小:1.34MB
返回 下载 相关 举报
毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc_第1页
第1页 / 共30页
毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc_第2页
第2页 / 共30页
毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc_第3页
第3页 / 共30页
毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc_第4页
第4页 / 共30页
毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于VC++的砂轮表面金刚石识别.doc(30页珍藏版)》请在三一办公上搜索。

1、基于VC+的砂轮表面金刚石识别摘要本文提出了一种基于图像边缘轮廓检测的砂轮表面金刚石磨料识别算法。算法程序基于VC+开发,调用OpenCV库进行数字图像处理,并利用MFC库制作了算法展示界面。算法通过对样本图像进行灰度转换、阈值变换、中值滤波、边缘提取、寻找轮廓等步骤,获得图像中金刚石磨料部分的轮廓面积以及区域边界点。算法检测性能良好,程序操作演示界面简洁直观。关键词数字图像处理;轮廓检测;金刚石识别;计算机视觉DiamondrecognitionongrindingwheelsurfacebasedonVisualC+abstractIn this paper, one kind of di

2、amond recognition algorithm based on the edge-detection of diamond wheel is proposed. The algorithm program is based on VC+ development, and calls the OpenCV library to carry on the digital image processing, using the MFC library to build the algorithm presentation interface. By using gray transform

3、ation, threshold transform, median filtering, edge detection and contour search, the Algorithm obtain the diamond parts area and region boundary in the sample image. The results demonstrates the well performing of the algorithm, and the intuition of the interface.Keywords:Digital image processing; C

4、ontour detection; Diamond recognition; Computer vision 目录引言1第一章课题的背景及意义21.1计算机视觉和数字图像处理21.2 课题实践意义3第二章课题软件开发环境介绍52.1 VC+52.2 MFC52.3 OpenCV6第三章主要功能的理论基础及设计实现73.1 灰度转换73.1.1 理论基础73.1.2 程序实现83.2 中值滤波93.2.1 理论基础103.2.2 程序实现103.3 阈值变换123.3.1 理论基础123.3.2 程序实现133.4 边缘提取143.4.1 理论基础153.4.2 程序实现153.5 寻找轮廓与后

5、续操作173.6 软件整体演示20结论25致谢语26参考文献27引言随着科学技术的发展,计算机技术也随着快速发展。图片自动识别处理技术应运而生。图像处理是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理技术基本可以分成两大类:模拟图像处理和数字图像处理。数字图像处理技术主要包括如下内容:几何处理、算术处理、图像增强、图像复原、图像重建、图像编码、图像识别、图像理解。图像处理是信号处理在图像域上的一个应用。图像处理应用在摄影及印刷,卫星图像处理,医学图像处理,面孔图像处理,显微图像处理以及汽车障碍识别。图像是我们生活中必不可少随处可见的,可以确切的说,图像是我们获取信

6、息的必要而必不可少的途径。图像处理在很多方面例如:国防、医学、交通、地质勘查、地球环境、宇航航天以及民用等方面都有着十分重要的运用。图像在国民经济和科技科研中,是一种反馈指导人们对计划进行修改,达到理想效果,图像技术作为一种关键技术手段,把图像以恰当的方式展现,给人以指导。鉴于这些,参考了一些书籍,在现有的知识基础上,设计了这个程序,本课题选取对砂轮样本图像中金刚石区域部分提取轮廓这一需求作为入手点,研究了相关的视觉算法,编写了包含演示界面的轮廓检测程序。第一章 课题的背景及意义1.1 计算机视觉和数字图像处理 伴随科学技术的发展,社会生产力不断提高,许多领域行业正逐步由传统的人工作坊制作方式

7、转变为大规模的机器流水线自动生产。在流水线的生产过程中,一个重要的环节是让机器设备系统辨识生产加工的原材料,以便后续加工和剔除次品的处理。但与人类的视觉系统和大脑思考方式不同,机器只能依靠摄像头获取产品样本的视频图像数据,而其处理系统也只能按照设定好的程序逻辑模式进行计算分类,不能达到完全模拟人类视觉系统与大脑思考的程度。因此,计算机视觉学科应运而生,得到了研究者广泛的关注,获得了飞速发展。 计算机视觉 ( Computer Vision )主要研究机器如何“看”和“感知”,即如何通过摄像头采集的图像数据,和电脑程序或其他软硬件设备对数据的图形处理,使得系统能够识别、跟踪或测量图像中的目标物体

8、。1 科技工作者们研究计算机视觉的相关理论和技术,试图建立一个能从样本图像数据中获得有用信息的人工智能系统。作为一门研究计算机系统与机器视觉的科学,计算机视觉与数字图像处理这门学科领域存在大量交集。 数字图像处理 ( Digital Image Processing )主要指计算机系统对数字图像进行去噪、增强、还原、分类、提取特征等的方法和技术。2 数字图像处理的发展跟以下三个因素关系密切:其一是计算机技术,计算机软硬件的发展,直接提升了数字图像处理算法软件的计算能力;其二是数学学科发展,尤其是其中的离散数学领域分支,为新算法的创立和完善奠定了理论基础;其三是工业、农牧业、林业、军事、医疗和环

9、境等行业的规模增长,产生了源源不断的需求,进一步刺激数字图像处理相关技术的发展。数字图像处理技术已逐渐深入各行各业之中,为人民群众的日常生活的方方面面提供了便利。1.2 课题实践意义 砂轮是磨削加工中最常见的一种磨具。通过在磨料中加入结合剂,经过压坯、干燥和焙烧等流程,将磨料固定成一定的几何形状(通常为圆形)的多孔体来制成砂轮,其工作表面如图(1-1)所示。图( 1-1 ) 砂轮表面形貌 磨削是一种以磨具作为“刀具”对工件材料进行精密微量切削的工序,以砂轮为例,则主要利用其工作表面上凸出结合剂外的磨料部分进行切削。由于磨料、结合剂搭配组成不一,制造工序不同,生产的砂轮差异很大,其特性主要由磨料

10、、粒度、结合剂、硬度、组织、形状和尺寸等因素决定。3 砂轮种类多样,根据结合剂、磨料和制造工艺的不同,砂轮的特性千差万别,而这种差异会对生产质量和经济效益产生巨大影响。按结合剂分类,有金属、树脂和陶瓷等品种;按所用磨料分类,有刚玉(AL3O2)、碳化硅、金刚石、立方氮化硼(CBN)等品种,其中的金刚石砂轮品种硬度极高。金刚石是一种由碳原子构成的矿物,是碳元素的同素异形体,是目前地球上发现的自然物体中最坚硬的物质。其绝对硬度是刚玉的四倍,石英的8倍。金刚石的外观颜色主要由其所包含的元素杂质和晶体纯净程度决定,通常呈现蓝、绿、黄、褐、乳白、紫和灰色等。在工业生产中采用的一般为人工合成的金刚石。 砂

11、轮机是工厂中常见的一种磨具,其上的砂轮是否安装正确,砂轮质量是否合格,直接对工业生产的安全与否造成重大影响。无论是在砂轮的生产制造过程中,还是在工业生产安全检查中,都必须认真仔细考察砂轮质量,及时排除砂轮次品,保障生产安全。对磨削砂轮的准确认识,是对磨削机理进行研究的重要基础,是对磨削过程进行建模和仿真、优化磨削过程的基本环节。而不同磨粒与结合剂组合、磨粒的大小尺寸、砂轮本身制作工序的差异,都会为砂轮的形貌检测提出不同的要求,需根据实际情况制定检测算法。 本课题针对砂轮工作表面的金刚石磨料检测这一需求展开研究,通过计算机视觉与数字图像处理算法程序的检测,提取金刚石磨料的轮廓,计算轮廓面积,记录

12、金刚石区域的界限面积,从而获得有助于金刚石砂轮生产的磨料信息。课题最终完成的砂轮表面金刚石检测程序,既包含逻辑清晰的核心算法,又具有直观简洁的演示界面。通过对检测算法的研究和程序的编写调试,笔者的编程能力得到了提升,同时对计算机视觉和数字图像处理技术有了初步认识。 本文的总体结构如下:第一章说明了计算机视觉与数字图像处理技术在实际生产生活中的应用背景和本项目课题的实践意义价值;第二章介绍了项目程序的开发环境,简要列举了调用的库函数;第三章分模块详细阐述了检测算法的原理,并展示了各步骤对样本图像的处理结果和最终程序展示界面;最后的结论对整个课题项目进行反思,提出改进点并对未来技术进步作出展望。第

13、二章 课题软件开发环境介绍 数字图像处理算法必须以程序作为依托,本章将主要介绍金刚石检测项目程序的开发环境,为后续章节的算法提供实现基础。2.1 VC+Microsoft Visual C+ ( VC+ )是一款由微软公司推出的,面向对象的可视化集成编程系统,主要用于Win32位环境下的程序开发。4VC+近期的高级版本被整合在Visual Studio ( VS )中。相比VC+,VS功能更为强大丰富,包含了整个软件生命周期中所需要的大部分开发工具,如UML工具、代码管控工具、集成开发环境( IDE )等等。VS是当前应用最为广泛的Windows平台应用程序的集成开发环境。本文后续项目程序的实

14、际开发环境为 Viual Studio 2010 ( VS 2010 )。2.2 MFCMFC是微软公司提供的一个图形化界面语言类库,全称为 Microsoft Foundation Classes。该类采用C+语言中类的形式封装了Windows API,其中包含了大量的Windows句柄和Windows内建控件组件的封装类和方法。5VC+中封装了MFC类,程序员在利用VC+进行MFC编程时,可以直接应用通用框架,无须考虑消息循环等琐碎问题,可以专心于程序代码本身的逻辑。通过MFC类的调用,可以创建类似Windows主题风格的程序演示界面框架,为算代码的处理结果提供了一个直观的展示平台。2.3

15、 OpenCV OpenCV全称为Open Source Computer Vision Library,最早由Intel在1999年建立,是一个开源的跨平台计算机视觉库。6 除了C和C+外,OpenCV还提供了Python、Ruby、Matlab等语言的接口。OpenCV使用的license对非商业和商业的应用都是免费的,加上其开源、不依赖其他外部库的特性,被广泛使用在各类计算机视觉和数字图像处理应用中,常见的应用领域有人机交互、目标识别、分类分割、人脸识别、姿态识别、运动跟踪、人工智能、轨迹分析、机器视觉、结构分析、安全监控等等。OpenCV由C函数和C+类构成,经过恰当的改写可以移植入D

16、SP或单片机系统中。 OpenCV库实现了大量的计算机视觉和数字图像处理算法,包括对视频图像的读取保存操作、颜色通道转换、绘制几何图形、空间平滑滤波、提取图像特征、时域频域空间转换、模式训练分类等等。通过调用其完善的封装类和函数方法,可以极大地方便研究者进行科研实践,又由于其具有开源的特性,使得在原有的视觉算法基础上进行改良成为了可能。一些程序员在github、csdn等IT社区网站主动分享其OpenCV项目的开源代码,在为他人提供借鉴的同时也促进了OpenCV库自身的研究发展。截至2015年5月,OpenCV已更新至3.0版本。通常情况下,OpenCV库的版本会向下兼容,高级版本相对低级版本

17、会保留原有算法结构,同时增加新的类和函数方法。 在实际环境中,本文项目在Visual Studio 2010 ( VS 2010 )编译器上开发,调用了OpenCV 2. 4. 3版本库及封装的MFC库,最后编译完成类Windows主体风格的MFC演示界面程序。第三章 主要功能的理论基础及设计实现 在前面的章节中,对于软件的开发环境我们已经有了概括性的了解。在本章中,笔者将以金刚石检测这个项目为例,详细介绍软件各个模块在数字图像处理中的算法原理以及具体的代码实现。3.1 灰度转换 在对数字图像进行研究时,通常需要对样本图像进行预处理,以便突显其图像特征,方便后续的考察,其中一种最常见的预处理就

18、是灰度转换。3.1.1 理论基础 在计算机系统中,图像文件通常以彩色图像的RGB三通道格式或灰度图像的单通道格式进行存储。在彩色图像中,以矩阵的形式有序存储像素点的信息,而每个像素点的像素值则包含( r, g, b)三个分量,分别代表该像素在红、绿、蓝三个通道中的强度值,取值范围为0, 255区间的整数。例如,我们可以用一个三维矩阵X m, n表示一幅m行n列的彩色图像,其中x j, k = ( r, g, b )则表示第j行第k列坐标的像素值强度为( r, g, b )。灰度图像的存储方式与彩色图像类似,但由于其像素只能表示从黑到白的颜色渐变,存储时每个像素只有一个分量( i ),用以表示该

19、像素点的亮度,取值范围为 0, 255区间的整数,越接近最大值,像素点越亮(呈现白色),反之则越暗(呈现黑色)。同样地,可以用一个一维矩阵X m, n表示一幅m行n列灰度图像,其中x j, k = ( i )表示第j行第k列坐标的像素亮度为( i )。2 在计算机视觉领域中,图像中物体的颜色、亮度信息作为一种最基本的视觉特征,因其直观、便于分析、对比度高易于区分等特性,常被运用于物体的识别、分类算法之中。具体到金刚石检测这个项目中,通过对样本图像的肉眼观察,我们可以发现含有金刚石的矿石部分像素亮度值,显著大于不含金刚石的杂质部分。这提示我们将样本图片由三通道的彩色图像转化为单通道的灰度图像,并

20、通过对像素点亮度值的考察进行后续处理。3.1.2 程序实现 对一张彩色图片,将对应像素点的RGB三通道值转化为亮度I的公式为:I = 0.299 x R + 0.587 x G + 0.114 x B( 3.1 )式( 3.1 )中,R、G、B分别为像素点红、绿、蓝三通道对应的强度值,I为灰度图相应位置像素点的灰度值。对于一张宽width、高height的彩色图像sourceImage,将其转化为灰度图像grayImage的方法即为遍历sourceImage,对图中每个像素点进行式( 3.1 )的转换处理,程序伪代码如下:for ( y = 0 ; y height ; y+ )for( x

21、= 0 ; x depth, 1);cvCvtColor ( sourceImage, grayImage, CV_BGR2GRAY );上述代码中,cvCreateImage( )函数创建了一幅与sourceImage同样宽高的单通道图像,CV_BGR2GRAY参数通知程序转换图像的方式为“BGR彩色图到灰度图”。 以数字图像处理中常见的Lena图为例,进行灰度转换后,得到的灰度图与原始彩色图像对比如图( 3-1 )所示,其中图(a)为原始的RGB三通道彩色图像,图(b)为经过转换后的灰度图像。(a)(b)图( 3-1 ) Lena图的灰度转换(a)原始彩色RGB三通道图像;(b)灰度图像。

22、3.2 中值滤波 经过灰度转换后的样本图像包含了丰富的目标信息,为后续搜寻轮廓算法提供了特征基础。仔细观察原始样本图像可以发现,图像中杂质矿石部分中参杂了少数离散的亮点“噪声”。由于项目的最终目的是计算金刚石轮廓包含的面积,而这部分亮点噪声会对轮廓的搜寻产生干扰,因此需要消除,而首选的方式即为中值滤波。3.2.1 理论基础 作为一种传统的非线性平滑技术,中值滤波擅于处理离散、突发的噪声,尤其对消除椒盐噪声有非常好的效果,并能保护信号或图像信息的边缘不被模糊。中值滤波在图像处理领域的定义为:对x坐标处的像素点,规定长度n作为邻域窗口范围,对领域内像素强度值序列I(x-n), I(x-n+1),.

23、I(x),.I(x+n-1), I(x+n)进行大小排序,选择该序列的中值作为I(x)滤波后的强度值。由于离散的噪声与邻域的像素值具有很大差异,在窗口排序后通常排列在序列的头部或尾端,并有较大的可能性选取周围邻域像素点强度作为中值,从而达到消除噪声的效果。 在数字图像处理的实际运用中,考虑到图像像素分布在二维(x,y)空间,选取的邻域通常为一个以当前滤波像素点为中心,n x n大小的正方形窗口,对窗口中n2个像素点强度值进行排序并选取中值。 椒盐噪声是一种在图像上随机分布,离散的亮暗点噪声。通常情况下,中值滤波被应用于处理椒盐噪声。在金刚石检测项目中,虽然待处理的噪声均为亮点,没有“椒”噪声,

24、但由于其显著离散的特性,我们仍可使用中值滤波对其进行处理,以期获得较好的效果。3.2.2 程序实现 在实际环境中,我们选取 3 x 3的正方形邻域作为滤波窗口。对3.1节中获得的灰度图像grayImage,利用滤波窗口遍历像素点进行滤波得到滤波后图像mfilterImage,算法伪代码如下:for ( y = 0 ; y height ; y+ )for( x = 0 ; x depth, 1);cvSmooth(grayImage, mfilterImage,CV_MEDIAN,3);cvSmooth ( )提供了丰富的参数控制图像的滤波效果,CV_MEDIAN通知程序对图像进行中值滤波,数

25、字3则控制滤波窗口的边长大小。在使用OpenCV库函数处理的情况下,只需保证原图像与处理图像具有同样大小和通道数,无需考虑图像边界问题,OpenCV封装的函数算法会根据当前像素点坐标自动调整窗口序列。 图( 3-2 )展示了3x3正方形窗口中值滤波的金刚石砂轮灰度图像,其中图( a )为原始灰度图像,图( b )为中值滤波后的二值图像。通过观察可以发现,图( a )中大部分离散的小亮点噪声在图( b )中都被消除了,而且图( b )保留了目标轮廓的大部分信息,并没有造成边缘模糊过重的现象。(a)(b)图( 3-2 ) 金刚石砂轮图像的中值滤波(a)原始灰度图像;(b)中值滤波后的灰度图像。3.

26、3 阈值变换 得到中值滤波的图像之后,依据对样本图像的观察,我们发现图像中不同种类(含/不含金刚石)的矿石亮度值有明显差异,可以通过阈值变换的方式对图像做进一步处理。3.3.1 理论基础 阈值变换是数字图像处理中的一种常用手段,通过阈值变换可以彰显或抑制图像中符合像素值条件要求的区域,进而提取其中的有效信息。2对于图像中某像素点亮度值I,给予一个阈值T,比较I与T的大小,若其满足事先预设的条件(I小于T或I大于T)则进行相应的处理。常见的处理方法有如下几种:( 1 ) 满足条件者保留原始亮度值,不满足者亮度值置0; ( 2 ) 满足条件者亮度值置为最大,不满足者亮度值置0;( 3 ) 满足条件

27、者亮度值置为阈值T,不满足者亮度值置0。 在金刚石检测的应用中,不含金刚石的杂质部分对后续处理没有帮助,反而会造成干扰,需要从图像中除去信息;而包含金刚石的部分则是后续考察的对象,需要重点突出。同时,金刚石矿层部分亮度较高基于上述两点原因,决定采用方法( 2 )作为程序算法的处理方法。3.3.2 程序实现 对于3.2中得到的中值滤波灰度图mfilterImage,类似于灰度变换,阈值变换的过程也需要通过遍历图像中的像素点来进行处理。程序的伪代码如下:for ( y = 0 ; y height ; y+ )for( x = 0 ; x T)thresImage x, y I = 255;els

28、e thresImage x, y I = 0;通过上述运算,我们获得了阈值变换后的图像thresImage。此时的thresImage为一幅二值灰度图像,各像素点取值非0即为255。 同样地,在OpenCV库中,也有封装好的阈值转换函数供研究者调用:Iplimage * thresImage =cvCreateImage ( cvGetSize(mfilterImage ), mfilterImage-depth, 1);cvThreshold( mfilterImage, thresImage,pixThres,255,CV_THRESH_BINARY);在上述代码中,cvThreshol

29、d ( ) 将mfilterImage图像的像素值根据条件阈值pixThres转换到thresImg图像中,参数CV_THRESH_BINARY通知程序按照3.3.1节中的方法( 2 )进行转换。 图( 3-3 )展示了阈值变换的金刚石砂轮图像,其中图( a )为中值滤波后的原始灰度图,图中呈现白色的矿石中包含金刚石,而灰色部分为杂质矿石。图( b )为阈值变换后的图像,其中阈值参数T设置为155。经过阈值变换后,图像中杂质矿石部分被屏蔽,金刚石矿石部分像素亮度被加强,得到凸显。(a)(b)图( 3-3 ) 金刚石砂轮图像的阈值变换(a)原始中值滤波灰度图像;(b)阈值变换后的二值图像。3.4

30、 边缘提取 经过中值滤波后的二值图像,目标金刚石的轮廓较为明显,可以进行边缘提取和轮廓搜索。在本项目中,采用阈值检测的方法提取边缘。3.4.1 理论基础 边缘提取是数字图像处理和计算机视觉中的基本问题之一,其主要目标是识别图像中亮度值有显著变化的像素点并标注出来。图像中像素点亮度的变化常常反映了展示目标信息属性的重要变化,其中包括场景照明光亮变更、物体表面纹理变化、物体深度不连续、物体表面方向变化等等。 通过对样本图像进行边缘检测,可以大幅度地剔除无关信息,只留下图像中重要的结构属性。用于边缘检测的算法有许多种,可以根据其数学原理大致划分为两类:其一是根据图像像素点亮度值一阶导数(即像素点亮度

31、值变化趋势)的最大值和最小值来检测边缘,通常将梯度最大的方向定为边缘界线方向,这是基于查找的方法;其二是寻找图像像素点亮度值二阶导数为零的点,这是基于零穿越的方法。而根据数学我们可以知道,一阶导数取最大值或最小值处,其二阶导数为零,两种方法的数学基础其实是共通的。 在自然界中获得的物体图像边缘由于多种原因,并不一定总是清晰理想的,影响的主要因素有:场景深度有限,造成聚焦模糊;光源不均匀,物体表面存在阴影,产生模糊;物体边缘光线的反射造成模糊。但在金刚石检测的项目中,经过前述章节处理的二值灰度图像不存在此类问题。考虑到样本图像的外观特性与计算复杂度,取图像亮度值区间上下限中任意一值作为阈值,若相

32、邻两像素点对阈值的满足条件不连续,即其一大于等于阈值,而另一小于阈值,则该处存在边缘,将其在边缘图像中标注出来。83.4.2 程序实现 对中值滤波后的二值图像thresImage的像素点进行遍历考察,判断相邻点与阈值条件关系,伪代码如下:Iplimage * edgeImg = cvCreateImage ( cvGetSize(thresImage ), thresImage - depth, 1);for ( y = 0 ; y height ; y+ )for( x = 0 ; x h_next) cvDrawContours(dstImage,contour,cvScalar(0,0,

33、255),cvScalar(0,0,255),-1,2); calArea( contour );xMin = ( contour - left left : xMin; xMax = ( contour - right xMax) ? contour - right : xMax;yMin = ( contour - top top : yMin; yMax = ( contour - bottom yMax ) ? contour - top: yMax; 代码中cvDrawContours ( ) 函数用于在dstImage图像上绘制轮廓,cvScalar( 0, 0, 255 )表示轮

34、廓的颜色为红色(在OpenCV中三通道彩色图像表示分量的顺序是B、G、R);参数-1表示只绘制当前轮廓的边缘像素,不填充轮廓内部;参数2表示绘制线条的宽度为2像素。calArea( ) 函数用于计算轮廓内包含像素面积,采用的是遍历轮廓内像素的方法,与之前章节的遍历结构代码类似,此处不再赘述。contour指针中left、right、top、bottom元素分别存储当前轮廓的左、右、上、下边界的坐标值(在实际程序中,调用的是该轮廓最小外接矩形的四个顶角坐标),与程序存储的xMin、xMax、yMin、yMax坐标最值点比较,若超过原有最值则更新数据。 图( 3-5 )是根据轮廓集contour中

35、信息,重新读取绘制的金刚石轮廓图像。其中图( a )在纯色背景图下绘制,图( b )则添加了原始图像作为背景,方便进行结果比较。(a)(b)图( 3-5 ) 金刚石砂轮的轮廓图像(a)轮廓图像;(b)添加原灰度图作为背景的轮廓图像。 遍历轮廓contour所有子元素后,xMin、xMax、yMin、yMax的值即为整个金刚石分布区域外接矩形的四边界限点,可以在图( 3-5 )( b )的基础上绘制出外接矩形,以便观察,同时获得外接矩形的面积:cvRectangle(dstImage,cvPoint(xMin,yMin),cvPoint(xMax,yMax),cvScalar(0,255,0),

36、3);rectArea = (yMax-yMin)*(xMax-xMin);cvRectangle ( )函数在dstImage图像上绘制了以( xMin, yMin )、( xMax、yMax )为对角顶点的矩形框,线条颜色为绿色,线条宽度为3像素。rectArea则记录了外接矩形的面积。在实际项目中,在更新比较边界记录点时,为了减小误差,仅考虑边缘长度超过20像素的轮廓,绘制的效果如图( 3-6 )所示。图( 3-6 ) 金刚石砂轮的外接矩形图像3.6 软件整体演示 3.1到3.5节的内容已详细阐述了核心的检测算法。算法包含了灰度转换、阈值变换、中值滤波、边缘提取、寻找轮廓、计算面积与确定

37、区域边界点几个模块,算法的流程如图( 3-7 )所示。图( 3-7 ) 金刚石检测算法流程 本节将简要介绍利用MFC类库编译制作的金刚石检测界面演示程序。运行程序后整体界面如图( 3-8 )所示。图( 3-8 ) 金刚石检测演示程序 在演示界面中,单击“打开图像”按钮,可选择读取的原始样本图像(.bmp后缀格式),如图( 3-9 )所示。图( 3-9 ) 选择图像界面 选择待处理的金刚石砂轮图片后,在界面中央展示区的左侧图片框内即会显示原始图像,如图( 3-10 )所示。图( 3-10 ) 选择图像后的待操作界面 此时在界面左下角文件操作栏内显示原始图像所在路径,正下方参数设置栏内可设置原始图

38、像总面积及像素点阈值两个参数。图像总面积totalArea用于后续金刚石砂轮面积diamondArea及外接矩形区域面积regionArea计算,公式为:diamondArea = contourArea * totalArea / ( width * height ) ( 3.2 ) regionArea = rectArea * totalArea / ( width * height )( 3.3 )式( 3.2 )和式( 3.3 )中,width、height分别为待处理图像的宽度和高度,两者相乘即为图像像素点总数;contourArea为contour轮廓集内包含像素点总数,rect

39、Area为外接矩形在图像中的面积。程序运行初始化时默认设置图像所代表面积为40000,可根据实际需要键入数字修改参数。像素点阈值参数则用于图像阈值变换处理步骤,初始化默认设置为150,同样可以根据实际情况修改。点击“识别处理”按钮后,程序自动调用前述章节中的检测算法,并将最终的轮廓检测图像绘制在中央展示区右侧的图片框内,同时右下方面积计算栏显示面积计算的结果,如图( 3-11 )所示。图( 3-11 ) 程序界面显示检测结果 程序将算法检测图像和计算面积结果直观地显示在界面上,与原始图像并排显示,方便进行对比。 本章通过各小节的详细说明,介绍了项目各个模块的算法实现,并展示了最终编译后的演示界

40、面程序。演示结果证明,算法程序对于处理的样本具有良好的检测性能和实际的使用价值。结论本文介绍了一种在砂轮图像中提取金刚石轮廓的边缘检测算法。算法程序基于VC+开发,调用了MFC类库与OpenCV图像处理库。程序可以读取包含金刚石和杂质的砂轮样本图片,对样本进行处理,从而提取图像中金刚石区域的轮廓并计算其区域面积。程序演示实验证明算法检测性能良好,界面直观、操作简洁。对项目程序进行反思,算法仍有改进的空间:( 1 ) 阈值变换模块中的像素点亮度阈值需靠人工给定,不能根据样本图像自适应,在后续的改进中可考虑对样本图像计算灰度直方图,统计其峰值点作为阈值,这样可使像素点亮度阈值根据输入的样本图像的实际情况自动调整;( 2 ) 可为算法增加目标分类模块,以处理砂轮中包含多种不同物品样本的情况;

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号