资源描述
分类号 编 号华北水利水电学院North China Institute of Water Conservancy and Hydroelectric Power毕 业 设 计题目 基于贪婪蛇形分割算法实现及应用学 院 电 力 学 院专业 自 动 化 姓 名 朋 涛 学 号 200607713 指导教师 徐 俊 红 年 月 日54 / 63自动化专业毕业设计任务书一、设计题目:基于贪婪蛇形分割算法实现及应用二、设计要求1.设计以VC+实现传统蛇形分割算法;2.进行二维图像处理;3.要求完全调试、并能够基于Opencv对任何宽度的图像予以处理。三、设计任务1. Greed蛇形分割算法设计;2. 基于VC+6.0和Opencv的实现;3. 运用上述对二维图形进行分割处理,使之收敛到图像的边缘。四、设计完成提交技术资料1.设计说明书,要求字数为1000015000字,论文格式参照华北水利水电学院关于本科毕业设计论文格式要求;2. 说明传统蛇形分割算法流程图;3.实现基于Opencv和VC+6.0传统蛇形分割算法;4.毕业设计论文插图必须用电脑制作。五、时间分配1.设计总时间为16周,其中毕业实习和资料采集四周,理论设计、分析计算及仿真6周,实际参数调试3周,写说明书2周,毕业答辩一周。六、设计参考书及论文1. Snake算法研究;2. 计算机图像处理与机器视觉第二版;3. VC+图像处理;4. C+语言设计;5. VC+6.0编程;6. Opening Source computer Vision;7. 数据结构与算法实现。华北水利水电学院本科生毕业设计论文开题报告20XX 3 月15 日学生朋涛学号200607713专业自动化题目名称基于贪婪蛇形分割算法实现及应用课题来源科研指导老师徐俊红主要容1. 以VC+实现传统蛇形分割算法设计2. 传统蛇形分割算法流程图的设计3. Greed蛇形分割算法设计4. Greed蛇形分割算法程序流程图的设计5. 基于VC+6.0和Opencv的实现,对任何宽度的图像予以处理的设计6. 对二维图形进行分割处理,使之收敛到图像的边缘的设计采取的主要技术路线或方法蛇形算法的基本原理能量最小化,即弯曲能量、连续性能量、图像能量最小;能量方程:其中:最终结合程序基于VC+6.0和Opencv,实现图形的分割处理,并使之收敛到边缘;预期的成果及形式1毕业设计书一份;毕业设计书的组成:A、封面; B、毕业设计任务书;C、毕业设计开题报告; D、中文摘要;E、英文摘要; F、目录;G、正文; H、参考文献;I、附录;2传统蛇形算法流程图;3Greed蛇形分割算法程序流程图;4对二值图像的处理结果图;时间安排本次设计的时间共16周,各部分设计容的时间安排大致如下:14周 毕业实习和资料采集; 56周 温习所用到的相关知识及学习所用到的新知识,如C+,Opencv; 78周 学习贪婪算法过程,蛇形算法原理等基础知识;910周 理论设计、分析计算,完成程序设计的主干容;1112周 编译程序并调试以及仿真; 1315周 完成毕业设计书,排版及修改;16周 毕业答辩 。指导教师意见签名:年月日备注摘要在过去的近二十年里,图像分割作为计算机视觉等领域的重要研究方向,吸引了越来越多研究者的注意。物体轮廓的提取在各个方面所起的作用也越来越重要,因此对于这方面的研究方法也越来越多。本文主要工作有:对贪婪算法的snake模型进行深入研究,通过增加新的控制能量,改变控制能量系数的符号,来改变snake曲线的运动方向,同时通过动态蛇点分配以及权值参数的调整,在因物体遮挡而造成阴影使得初始轮廓无法理想获取的情况下,也能准确的收敛。通过对Kass等提出的Snake算法的模型、Williimas和Shall的Snake模型 以及 GVF Snake模型进行对比,分析研究了各个模型之间的优缺点后,选定贪婪算法的snake模型,通过广义霍夫变换即Ghough变换,使用多个模板,根据设定的参数,先将目标模板形状进行仿射变换,然后对变换的每个模板形状进行Ghough变换,再从中找出最匹配的作为检测的结果,来获取Snake初始轮廓。解决了Snake模型初始轮廓手工定位这一难点,使Snake在实际应用中更方便,更加自动化。并且通过高斯金字塔对视频图片进行预处理,使其能获得更平滑的Snake收敛结果。关键词:贪婪算法,图像分割,轮廓模型AbstractIn Past almost twenty years,image segmentation,as an important research field in computer vision, attracts the attention of more and more researchers. Because it plays more and more important roles in many fields,many methods about it come out. In this paper, major ones are as follow:By in-depth study of Greed Snake algorithm. A result of not obtaining an ideal contour by the shadow of building block, the Snake curve still shows accurate Convergence by changing the direction of adding new parameters to control energy and changing in control of the energy coefficient of symbols, adjusting the weight parameters and distribute dynamic Snake point.By comparing advantages and disadvantages among Snake algorithm by Kass, Greedy Snake algorithm by Williimas and Shah and GVF Snake algorithm, Ichoose the Greedy Snake model as a template, After using the Ghough transform an the template which has been finished an affine transformation, it will choose the best match template as the initial contour of Snake model by which has a problem of manual positioning. It also makes the Snake algorithm more convenient and automatic in practical application. It obtains a more smoothing curve by taking the Gaussian Pyramid methods in retreating the video image.Keywords: Greedy Snake algorithms; Image Segmentation; Snake Mode;目 录摘要IABSTRACTII目录1第一章绪论11.1 图像分割的目的和意义11.2 本文的研究思路11.3 本文研究容2第二章图像分割32.1 图像分割的定义32.2 图像分割的特征42.3 图像分割的方法和技术42.3.1 基于边缘检测的图像分割方法42.3.2 基于灰度特征的阈值分割方法52.3.3 基于区域的分割方法52.3.4 基于聚类的分割技术62.3.5 基于人工神经网络的分割方法62.3.6 基于遗传算法的分割方法72.3.7 图像分割中的其他方法72.4 图像分割性能的评价8第三章 VC+及OPENCV介绍103.1 VC+介绍103.1.1 C+语言的概述103.1.2 VC+介绍113.2 OpenCV介绍123.2.1 OpenCV的简介123.2.2 OpenCV的功能介绍14第四章 SNAKES 模型164.1 基本Snakes 模型164.2 模型力的改进174.3 算法改进194.4 贪婪算法204.4.1 算法介绍204.4.2 算法过程204.4.3 算法结果21第五章 GREED蛇形分割算法设计225.1 整体设计225.2 载入图像225.3 灰度化处理245.4 蛇点间距离245.5 蛇点能量265.5.1 Greed蛇形分割算法的实现流程265.6 图像分割的实现28第六章总结与展望34参考文献35致36附录一37Opencv的一些函数定义程序37附录二44图像分割处理前后图片对比44附录三46外文翻译46第一章 绪论1.1 图像分割的目的和意义图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,也是图像处理、模式识别和人工智能等多个领域中一个十分重要且又十分困难的问题。所谓图像分割就是要将图像表示为物理上有意义的连通区域的集合,也就是根据目标与背景的先验知识,对图像中的目标、背景进行标记、定位,然后将目标从背景或其他伪目标中分离出来。由于这些被分割的区域在某些特性上相近,因而图像分割常用于模式识别与图像理解以及图像压缩与编码两大类不同的应用目的门。由分割产生的区域是图像容的一种表示,它是对图像进行视觉分析和模式识别的基本前提,分割结果的质量直接影响到以后的图像分析、识别和解释的质量,具有重要的意义。图像分割的目的在于根据某些特征 将一幅图像分成若干有意义的区域,使得这些特征在某一区域表现一致或相似,而在不同区域间表现出明显的不同。图像分割的应用非常广泛,几乎出现在有关图像处理的所有领域,如:工业自动化、在线产品检验、生产过程控制、文档图像处理、图像编码、遥感和生物医学图像分析、保安监视,以及军事、体育、农业工程等方面。在各种图像应用中,只要需对图像目标进行提取、测量等都离不开图像分割。虽然人们对图像分割已进行了大量的研究,但还没有一种适合于所有图像的通用的分割算法。所以,图像分割一直以来都是图像技术中的研究热点。因此,从原理、应用和应用效果等方面来深入研究图像分割技术,对于提高图像分析和图像理解系统的性能以及提高图像处理技术的应用水平都具有十分重要的意义。1.2 本文的研究思路图像分割是图像处理、模式识别和人工智能等多个领域中一个十分重要且又十分困难的问题,是计算机视觉技术中首要的、重要的关键步骤。图像分割技术的应用十分广泛,加之目前还没有适合于所有图像的分割算法。因此,从原理、应用和应用效果等方面来深入研究图像分割技术,具有十分重要的意义。边缘检测方法是传统的图像分割方法中的经典方法,在各种图像的分割中有着广泛的应用。边缘检测是图像处理、计算机视觉中的重要容之一,是实现图像分割、特征提取和图像理解的基础。图像的边缘是图像最基本的特征,一幅图像主要信息是由它的轮廓边缘提供的。国外对边缘检测算子的研究较多,做了很多有意义的工作,取得了很多成绩。本文的图像分割技术是基于贪婪蛇形算法的原理,Greed Snake 算法和其他算法比较起来,实现简单,速度快,容易加入新约束,最终结点分布比较均匀,但是无法达到最优解,只能实现局部最优。1.3 本文研究容根据以上研究思路,该论文其余部分的容如下:第二章阐述了图像分割的定义、特征、方法及其技术的相关知识,通过对几种图像分割技术的对比,得出贪婪蛇形分割算法的优点;第三章简单介绍VC+和Opencv在处理图像中的应用;第四章介绍了常见的一些Snake模型并给出了Greed Snake模型的算法原理;第五章介绍Greed蛇形分割算法及其实现;第六章总结与展望;最后是完成论文所查阅的参考文献、附录及致。第二章 图像分割从上世纪70年代起,许多研究人员为图像分割问题付出了巨大的努力。现代图像处理技术已成功地应用于许多领域。例如,机动车号牌识别,交通路口的电子警察,文字识别,指纹识别,人脸辨识等等。图像分割是图像识别和图像理解的基本前提,图像分割质量的好坏直接影响后续图像处理的效果,因此图像分割的作用是至关重要的。2.1 图像分割的定义图像分割研究领域和其他领域的发展过程类似,人们对图像分割提出了不同的解释和理解。在不同的阶段,研究者们根据研究的水平和实际的要求提出了很多图像分割的定义,目前广为人接受的是通过集合定义的图像分割。 令集合R代表整个图像区域,对R的图像分割可以看作是将R分成N个满足条件的非空子集,。;对i=1,2,3,N,=TRUE ; ; ;对i=1,2,3,N,是连通的区域 ;P=TRUE指出在分割结果中每个区域的像素有着相同的特性。表示在分割的结果中,不同的子区域具有不同的特性,它们没有公共的特性。表示分割的所有子区域的并集就是原来的图像,这一点非常重要,它保证图像中每个像素都要被处理的充分条件。2.2 图像分割的特征图像分割是指将一幅图像分解为若干互不交叠的有意义具有相同性质的区域。好的图像分割应具备的特征: 分割出来的各区域对某种性质例如灰度。纹理而言具有相似性,区域部是平整 的且没有许多小孔; 相邻区域对分割所依据的性质有明显的差异; 区域边界是明确和规整的; 条件之间寻找一种合理的折中。大多数图像分割方法只是部分满足上述特征。如果加强分割区域的同性质约束,则分割区域很容易产生大量小孔和不规整边缘;若强调不同区域间性质差异的显著性,则易造成不同质区域的合并。具体处理时,不同的图像分割方法总是存在各种约束。2.3 图像分割的方法和技术图像分割的方法主要有两大类:边界方法。假设是图像分割结果的某个子区域在原来图像中一定会有边缘存在。区域方法。假设是图像分割结果的某个子区域一定会有相同的性质,而不同区域的像素则没有共同的性质。2.3.1 基于边缘检测的图像分割方法基于边缘检测的图像分割方法是一种经典的分割方法,这种分割方法的依据是相当直观的。图像的边缘对人的视觉具有重要意义,一般而言,当人看一个有边缘存在的物体时,首先感觉到的便是边缘。灰度或结构等信息的突变处称为边缘,它是一个区域的结束,也是另一个区域的开始。利用该特征可以分割图像。需要指出的是,边缘并不等同于实际目标的边界,由于图像数据是二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失。再加上成像过程中的光照不均和噪声等因素的影响,使得有边界的地方不一定能检测出边缘,检测出有边缘的地方也不一定代表实际边界。基于边缘检测的图像分割方法虽然简单,理论和方法仍存在有待解决的地方。基于边缘检测的图像分割方法可分成两大类,即串行边缘分割技术和并行边缘分割技术。串行边缘分割方法,首先要确定边缘的起始点,然后根据某种相似性搜索准则寻找下一个边缘点,这种确定后续相似点的方法称为边缘跟踪。根据跟踪方法不同又可分为轮廓跟踪、光棚跟踪和全向跟踪三种方法。并行边缘检测方法,对图像上每一点的处理不依赖其他点的处理结果,算法可以并行处理,大大加快搜索检测的速度。当分割的图像含有强噪声干扰或者区域之间的性质差别很小时,分割出来的边缘可能是不连续的,此时可考虑用边缘连接技术把断开处连接起来。2.3.2 基于灰度特征的阈值分割方法基于灰度阈值的分割方法和基于边缘检测的分割方法一样也是一种经典分割方法。它通过设置阈值把像素点按灰度级分若干类,从而实现图像分割。这类方法主要包括以下几种:单阈值法,用一个全局阈值区分背景和目标。当一幅图像的直方图具有明显的双峰时,选择两峰之间的谷底作为阈值,可获得良好的分割效果。大多数自然景象的图像直方图变化多样,很少表现为明显的双峰。此时用单阈值法,效果不佳。双阈值法,用两个阈值区分背景和目标。双阈值法是对单阈值法的改进,通过设置两个阈值,以防单阈值设置阈值过高或过低,把目标像素误归为背景像素,或把背景像素误归为目标像素。多阈值法,当存在照明不均,突发噪声等因素或背景灰度变化较大时,整幅图像不存在合适的单一阈值,单一阈值不能兼顾图像不同区域的具体情况,这时可将图像分块处理,对每一块设一个阈值。因此,多阈值法又称为动态阈值法和自适应阈值法。这种算法的时间和空间复杂度比较大,但抗干扰能力较强,对采用全局阈值不容易分割的图像有较好的效果。基于灰度阈值分割方法的关键是如何合理地选择阈值。最常用方法是利用灰度直方图求双峰或多峰,选择两峰之间的谷底作为阈值。基于灰度的阀值分割方法具有计算简单、实现容易的特点,对目标和背景对比度反差较大图像进行分割比较有效。阈值分割方法的阈值确定主要依赖于灰度直方图,而很少考虑图像中像素的空间位置关系。因此当背景复杂,特别在同一背景上重叠出现若干个研究目标时,容易丧失部分边界信息,造成分割的不完整。在含有强噪声干扰时,阈值分割方法也不能取得令人满意的分割结果。2.3.3 基于区域的分割方法基于阀值分割方法利用的是图像象素点的性质,而基于区域的分割方法利用的是图像的空间性质。该方法认为分割出来的某一区域具有相似的性质,可见其概念是相当直观的。传统的区域分割算法有区域增长法和区域分裂合并法。该类方法对含有复杂场景或自然景物等先验知识不足的图像进行分割,效果较好。区域增长法开始时确定一个或多个象素点作为种子,然后按某种相似性准则增长区域,直到图像被分割成一个或多个区域。区域的分裂合并法是按某种一致性准则合并或分裂区域的,当相邻的区域性质相似时合并成一个大区域,当一个区域不满足一致性准则时被分裂成几个小的区域。具体实现时,分裂与合并分割算法通常是基于四叉树数据表示方式进行的。基于随机场模型的分割方法,是一种用随机场描述被分割图像象素之间的空间关系的分割方法。图像中的各个点不是相互独立的,相邻的点会相互影响,因而图像分割时可以将这种上下文限制作为先验知识,而这一类知识可以用马尔可夫随机场进行描述。由于马尔可夫随机场与一个吉布斯随机场相对应,因此若定义了吉布斯随机场的能量函数,那么相应的马尔可夫随机场也就确定了。这样,根据贝叶斯判断规则,采用最大后验概率估计器,就可将图像分割问题转化为求解图像的最大后验概率估计问题。虽然利用马尔可夫随机场模型结合贝叶斯方法,可将图像分割问题归结为求解标记场的最大后验概率估计问题,但是,求解后验概率属于组合优化问题,直接求解困难很大。此时可考虑结合模拟退火方法,遗传算法等搜索优化方法以加快搜索速度并避免收敛到局部最优。2.3.4 基于聚类的分割技术图像分割的结果是将图像分成若干个不相交的区域,而聚类技术可以将对象分成若干类,因此将聚类技术用于图像分割是很自然的想法。聚类分割算法一般在开始时需要给出两个初始的聚类中心,也有不用参数的聚类分割算法,C-均值聚类法, ISoDATA聚类法和模糊C均值聚类法均可用于图像分割,哪种方法好对不同的图像而言,没有统一的标准。聚类方法应注意几个问题,一是聚类的类数如何确定,二是怎样确定聚类的有效性准则,三是聚类中心的位置和特性事先不清楚时,如何设置初始值,四是运算的开销。2.3.5 基于人工神经网络的分割方法近年来,用人工神经网络图像分割的研究受到愈来愈多的重视,人工神经网络本身具有的分类属性是它可用于边缘检测,区域分割的依据理论上讲,大部分分割方法都可用ANN实现。基于人工神经网络的分割方法的难点在于选用何种网络以及网络确定后如何确定网络结构及构造合适的能量函数。2.3.6 基于遗传算法的分割方法遗传算法,是一种模拟自然选择和遗传机制的搜索和优化过程。它具有很强的全局优化搜索能力,是一种具有广泛适用性的自适应搜索方法。它在搜索空间中是在种群中而不是在单点上进行寻优,它在求解过程中使用遗传操作规则而不是确定性规则来工作。这些特点使得遗传算法很适于应用在图像分割中,尤其是阈值分割法以及区域生长法中。利用GA的全局寻优能力及对初始位置的不敏感特性,可以改进图像分割的性能。遗传算法应用于图像分割,其难点在于适应度函数的选择以及交叉概率和变异概率的确定。GA还有可能收敛于局部最优。可考虑使用能够自适应设置交叉概率和变异概率自适应遗传算法以及和模拟退火法相结合的混合遗传算法。2.3.7 图像分割中的其他方法前面介绍了六大类图像分割较常用的方法,有关图像分割方法和文献很多,新方法不断产生,这些方法有的只对特定的情形有效,有的综合了几种方法,放在一起统称为第七类。标号法是一种基于统计学的方法,这种方法将图像欲分割成的几个区域各以一个不同的标号来表示,用一定的方式对图像中的每一个像素赋以标号,标号相同的像素就合并成该标号所代表的区域,MWHansen等人给出了一种以人机交互式分割为基础的松弛标号算法。 基于Snake模型的分割方法,基于Snake模型的分割是通过对能量函数的动态优化来逼近图像目标的真实轮廓的,其能量函数由三部分组成:代表与轮廓的平滑性、连续性等形状特征有关的约束,称为部轮廓能量;代表轮廓点与图像局部特征吻合程度的约束,称为图像能量;代表各种预先人为设定的约束,称为外部能。纹理分割,长期以来人们就意识到纹理是图像分割中的重要特征,然而,由于缺乏有效和可靠的检测纹理方法,妨碍了纹理分割的发展。近年来,由于新的数学工具的引入,纹理分割技术取得了一些进展,蓬等人将小波分析应用于纹理基元提取,波等人将分形理论应用于自然景物纹理特征的构造。基于知识的图像分割方法,即使对图像中的某些物体并不熟悉,人也可以毫不费力地感知和解释一幅图像,这是因为人利用了已有的先验知识或模型来解释所看见的东西。常规的图像分割方法直接对图像数据进行处理,虽然也可使用有关先验知识,但不依赖于知识,基于知识的图像分割方法直接建立在先验知识的基础上,使分割更符合实际图像的特点。等提出了一种基于知识的图像分割方法,该法充分利用领域知识,把分割与解释有效地结合在一起。该方法的难度在于知识的正确合理的表示与利用。图像分割主要有四种技术:并行边界分割技术、串行边界分割技术、并行区域分割技术、串行区域分割技术。图示21。图像分割灰度相似性不连续性检测边界分割l 孤立点l 孤立线l 组成边界l 边界跟踪区域分割l 阈值分割l 区域分割l 区域合并l 自适应并行边界分割技术串行边界分割技术并行区域分割技术串行区域分割技术图21 图像分割技术框图2.4 图像分割性能的评价图像分割中另一个重要的问题是对分割算法的比较和评价。图像分割评价主要有两个方面的容:一是研究各个分割算法在不同情况下的表现,掌握如何选择和控制其参数设置,以适应不同需要。二是分析多个分割算法在分割同一图像时的性能,比较优劣,以便在实际应用中选取合适的算法。分割评价方法分为分析法和实验法两大类。分析法是直接分析分割算法本身的原理及性能,而实验法是通过对测试图像的分割结果来评价算法的。两种方法各有优劣,由于缺乏可靠的理论依据,并非所有的分割算法都能够通过分析法分析其性能。实验法大致又可以分为优度法和偏差法两类。优度法在没有正确分割的先验知识的情况下,根据分割图像计算某种优度量值来评价分割算法的好坏,因此以什么作为优度量值是困难所在,目前常用的有区域一致性、区域形状、区域对比度等。偏差法往往需要首先提供一个理想分割图像作为比较标准,依此来计算实际分割结果与理想分割图像的差别,这种差别可以是基于错误分割的象素数,错误分割象素点的位置,分割结果区域数的差别,等等。第三章 VC+及OpenCV介绍3.1 VC+介绍3.1.1C+语言的概述C+语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C+以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C+完美地体现了面向对象的各种特性。 C+程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup即本文作者设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设施。C+最初的版本被称作带类的CC with classesStroustrup,1980,在1980年被第一次投入使用;当时它只支持系统程序设计和数据抽象技术。支持面向对象程序设计的语言设施在1983年被加入C+;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C+领域。在1985年,C+第一次投入商业市场Stroustrup,1986Stroustrup,1986b。在1987至1989年间,支持型程序设计的语言设施也被加进了C+Ellis,1990Stroustrup,1991。 随着若干独立开发的C+实现产品的出现和广泛应用,正式的C+标准化工作在1990年启动。标准化工作由ANSIAmerican National Standard Institute以及后来加入的ISOInternational Standards Organization负责。1998年正式发布了C+语言的国际标准C+,1998。在标准化工作进展期间,标准委员会充当了一个重要的角色,其发布的C+标准之草案在正式标准发布之前,一直被作为过渡标准而存在。而作为标准委员会中的积极分子,我是C+进一步发展工作中的主要参与者。与以前的C+语言版本相比,标准C+更接近我理想中的那个C+语言了。关于C+的设计和演化,在Stroustrup,1994、Stroustrup,1996和Stroustrup,1997b中有详细的叙述。至于标准化工作末期产生的C+语言定义,在Stroustrup,1997有详细叙述。3.1.2 VC+介绍至于VC+ 是微软开发的用来开发WINDOWS桌面软件的C+可视化编译工具。用VC+来发开发桌面软件会比较方便,提高效率。VC+是微软公司开发的一个IDE,换句话说,就是使用c+的一个开发平台.有些软件就是这个编出来的.另外还有VB,VF.只是使用不同语言.但是, VC+是Windows平台上的C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调callback函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC+不是门语言,虽然它和C+之间有密切的关系,如果形象点比喻的话,可以把C+看作为一种工业标准,而VC+则是某种操作系统平台下的厂商标准,而厂商标准是在遵循工业标准的前提下扩展而来的。VC+应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势。VC基于C,C+语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。最大缺点是开发效率不高。VC适用围:1、VC主要是针对Windows系统,适合一些系统级的开发,可以方便实现一些底层的调用。在VC里边嵌入汇编语言很简单。2、VC主要用在驱动程序开发。3、VC执行效率高,当对系统性能要求很高的时候,可用VC开发。4、VC主要适用于游戏开发。5、VC多用于单片机,工业控制等软件开发,如直接对I/O地址操作,就要用C+。6、VC适用开发高效,短小,轻量级的COM组件,DLL。比如WEB上的控件。7、VC可以开发优秀的基于通信的程序。8、VC可以开发高效灵活的文件操作程序。9、VC可以开发灵活高效的数据库操作程序。10、VC是编CAD软件的唯一选择!包括AUTOCAD,UG的二次开发。11、VC在多线程、网络通信、分布应用方面,VC+有不可比拟的优势。3.2 OpenCV介绍3.2.1OpenCV的简介 OpenCV是什么?OpenCV是intel资助开发的开源计算机视觉库,其含义为Open Source Computer Vision Library,它由一系列C函数和少量C+类构成,包含了几百个图像处理和计算机视觉方面的C语言函数,实现了图像处理和计算机视觉方面的很多通用算法,具有强大的图像和矩阵处理能力,并且可以支持多个操作系统,有很好的可移植性。 OpenCV的显著特点:跨平台:Windows,Linux; 免费:无论非商业还是商业应用; 速度快; 使用方便。 OpenCV的功能:矩阵和向量的操作以及线性代数算法的实现图像数据的操作及矩阵结构和图像结构的转换基本的数字图像处理能力基本的GUI功能 OpenCV的应用领域1、人机互动2、物体识别 3、图象分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 OpenCV主要的模块库Cv,lib:主要的OpenCV函数,包括图像处理和计算机视觉功能图像处理、结构分析、运动分析、物体跟踪、模式识别、相机定标等;Cxcore.lib:一些基本函数各种数据类型的基本运算等,主要的数据结构,线性代数支持;Highgui.lib:与图形界面相关的函数GUI,图像视频IO,系统调用函数;Cvaux.lib:一些实验性的函数View Morphing、三维跟踪、PCA、HMM摄像头读取模块;Ml.lib:机器学习库、分类器实现、回归分析。 OpenCV所处理的图像结构图像为二维单通道或者三维的矩阵。在OpenCV中,图像数据结构类行为为ipllmage,所支持的像素深度:IPL-DEPTH-8U,8S,16U,16S,32S,32F和64F。 OpenCV与Matlab的图像处理工具箱相比:OpenC要用汇编语言调用,效率高,Matlab使用脚本语言,直观方便;OpenC适合开发实时系统,Matlab适合测试算法;OpenC开放源代码,Matlab核心算法代码不可得到。 OpenCV出现的背景计算机视觉市场巨大而且持续增长,且这方面没有标准API,目前的计算机视觉软件大概有以下三种: 1.研究代码慢,不稳定,独立并与其他库不兼容;2.耗费很高的商业化工具比如Halcon, MATLAB+Simulink; 3.依赖硬件的一些特别的解决方案比如视频监控,制造控制系统,医疗设备;这是目前的现状。而标准的API将简化计算机视觉程序和解决方案的开发。OpenCV致力于成为这样的标准API。3.2.2 OpenCV的功能介绍 基本使用:窗口与图像显示 GUI函数cvNamewindow:创建窗口cvDestroyWindow:销毁窗口cvShowlmage:显示图像 cvWaitKeyint cvWaitKey等待按键。如果delay0,那么无限等待;否则则等待delay毫秒则返回。在程序循环中,有时候由程序一直处于计算中,窗口无法重恢比如读出视频中的所有帧并显示,可以加入cvWaitKey,使之程序等待几毫秒,让窗口完成重绘再执行其他操作。 功能介绍 图像增强 图像变换傅立叶变换:cvDFT离散余弦变换:cvDCT霍特林变换PCA:cvCalcPCA,cvProjectPCA,cvBackProjectPCA 数学计算矩阵的加减,乘除,转置,逆,伪逆,逻辑运算,统计,SVD分解; 图像处理:梯度,插值,几何变换,形态学变换,滤波,色彩空间变换,矩,直方图,特征匹配; 结构分析:轮廓处理,几何形状计算,平面划分; 运动分析:对象跟踪,对象检测,相机定标,三维重建。分类器设计;OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。 OpenCV 使用类BSDlisence,所以对非商业应用和商业应用都是免费FREE的。OpenCV 为Intel Integrated Performance Primitives 提供了透明接口。这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。 OpenCV提供的视觉处理算法非常丰富,并且他不分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。第四章 Snakes 模型自1987年Kass提出Snakes模型以来,各种基于主动轮廓线的图像分割、理解和识别方法如雨后春笋般蓬勃发展起来。Snakes模型的基本思想很简单,它以构成一定形状的一些控制点为模板,通过模板自身的弹性形变,与图像局部特征相匹配达到调和,即某种能量函数极小化,完成对图像的分割。再通过对模板的进一步分析而实现图像的理解和识别。在Snakes这样一个简单的模型下,蕴含了深刻的计算机视觉理论的发展成果。以Mart为代表的计算机视觉理论,采用自底而上的处理方法。它将各种检测算子作用于图像得到初始简图,再通过一定规则对这些特征进行聚集而得到2.5维简图,最终求解三维模型;与此相对应的足从心理学发展起来的基于推理的视觉理解理论,采用从顶而下的处理方法。进入20世纪80年代以后,人们逐渐认识到放之四海皆准的视觉理论遥不可及,而针对具体问题,能够有效融合上层知识和底层图像特征的方法才是最有效、最切实可行的。Snakes模型正足在这样一种背景下提出的。构造Snakes模型的目的是为了调和上层知识和底层图像特征这一对矛盾。无论是亮度、梯度、角点、纹理还是光流,所有的图像特征都足局部的。所谓局部性就是指图像上某一点的特征只取决于这一点所在的邻域,而与物体的形状无关;但是人们对物体的认识主要是来自于其外形轮廓。如何将两者有效地融合在一起,正足Snakes模型的长处。Snakes模型的轮廓线承载了上层知识,而轮廓线与图像的匹配又融合了底层特征。这两项分别表示为Snakes模型中能量函数的部力和图像力。正是因为Snakes模型有这样深刻的理论背景,它一经提出就成为计算机视觉领域研究的热点。10多年来,不仅针对Snakes模型本身的能量函数构造和求解算法作了很大改进,更在其基础上衍生出了许多新模型。它们有些在形式上已经与Snakes相去甚远,而且也要复杂得多,但其指导思想却是一脉相承的。本文将对Snakes这个大家族做一梳理,着重对新成果进行介绍。4.1 基本Snakes 模型Kass等提出的原始Snakes模型由一组控制点 41 组成,这些点首尾以直线相连构成轮廓线。其中和分别表示每个控制点在图像中的坐标位置,s是以傅立叶变换形式描述边界的自变量。在Snakes的控制点上定义能晕函数 42其中第1项称为弹性能量,是v的一阶导数的模;第2项称为弯曲能量,是v的二阶导数的模;第3项是外部能量 ,在基本Snakes模型中一般只取控制点或连线所在位置的图像局部特征,例如梯度 43也称图像力。弹性能量和弯曲能量合称部能量,用于控制轮廓线的弹性形变。选取适当的参数和,将能量函数极小化,所对应的就是对物体的分割。在能量函数极小化过程中,弹性能量迅速把轮廓线压缩成一个光滑的圆;弯曲能量驱使轮廓线成为光滑曲线或直线;而图像力则使轮廓线向图像的高梯度位置靠拢。基本Snakes模型就是在这3个力的联合作用下工作的。在实际应用中,一般先在物体周围手动点出控制点,作为Snakes模型的起始位置,然后对能量函数迭代求解。具体过程如图:4.2 模型力的改进 SnakesKass等提出的基本Snakes模型,在没有图像力平衡的条件下,部力将把所有控制点收缩为一点或一条直线。也就是说,被分割物体必须完全包含在Snakes的初始位置之,否则陷在部的控制点将无法回到物体的边界。造成问题的原因在于离散化的数值求解过程。在部力的平衡下,最终只有少数梯度很大的图像点才能影响Snakes的形变,而绝对值不很大的边界点将不起任何作用。为了克服这个缺点,Cohen等提出归一化的外部力,使得不论图像梯度绝对值的大或小,对轮廓线都有相同的影响。Snakes模型的部力只能把轮廓线压缩成一个点或者一条直线。Cohen等引入一个膨胀的外部力,综合在一起成为 44这样轮廓线可以像气球一样膨胀,具有更强的动态行为能力。其中,ns是轮廓线上挖制点vs的单位法向量,是膨胀力的幅值,取正值或者负值就可以使轮廓线具有膨胀或者收缩的行为能力。一般选取k略大于,使得边界点刚好可以抵消膨胀力。GVF SnakesKass等提出的基本Snakes模型在工程应用中有两个难点: 轮廓线的初始位置必须离真实边界很近,否则难以得到正确的分割结果。为了解决这个问题,人们提出了multiresolution方法、增加外部压力和距离势能等多种改进方法,它们的基本思想都是提高外部力的作用围,从而引导轮廓线趋向真实边界; 基本Snakes模型对无法捕获凹陷边界,尽管也有很多改进方法,但效果都不理想。Xu Chenyang等提出的GVF Snake很好地解决了这些问题。GVF Snake的创新在于将传统Snakes的图像力用扩散方程进行处理,得到整个图像域的梯度向场作为外部力。经过扩散方程处理后的GVF比edge map更加有序、更能体现物体边界的宏观走势。 由于GVF不是一个表达式,无法用能量函数的形式求解,因此GVF Snake是利用力的平衡条件进行优化。GVF Snakes具有更大的搜索围,对轮廓线初始位置不敏感。可以分割凹陷的边界,对梯度绝对值的大小乃至噪声具有更好的鲁棒性。而且它还不必预先知道轮廓线是要膨胀还是收缩。4.3 算法改进通过求解欧拉方程的数值算法存在一些难以克服的缺点,比如不易得到全局最优解、需要计算高阶导数、加入硬约束后缺乏稳定性。为了极小化Snakes模型的能量函数, Amini等提出基于动态规划的算法,从而开启了Snakes模型组合优化之先河,也使得Snakes模型在计弭机视频领域得以广泛应用。它对Snakes模型的个控制点的m邻域,组合而成的所有备选变形位置,通过动态规划求得其中某个组合的能量函数相对最小,由此迭代计算,最终使轮廓线收敛到物体边界。另一种更加常用的组合优化方法是贪婪算法。动态规划的每一步要移动n个节点,而贪婪算法仅移动一个1了点,通过轮流移动n个节点最终得到一个解。以上是Snakes模型最常用的3个能量函数极小化算法。数值算法形式规,每一步迭代步长较大,计算速度比较快。但对参数太敏感,且不易增加新约束;动态规划算法不仅容易增加各种约束,而且能够得到最优解。但是计算速度慢,且最终轮廓会趋向物体的强特征部分,使节点间距不均匀;贪婪算法实现简单,速度快,容易加入新约束,最终结点分布比较均匀,但无法得到最优解。4.4 贪婪算法4.4.1 算法介绍在Kass算法中,需要用变分法来求解该动态方程,它要求外力必须是可微的,而且这种方法在迭代过程中需要求逆矩阵,同时在进化过程中,矩阵会随着蛇点变化而变化,就需要不断地执行求逆操作,非常费时。1988年,Amini等人提出了动态规划法又叫时间延迟法,虽然引入强制力,放宽外力可微的限制,但运算仍缓慢,为O,n、m分别为轮廓线上控制点数和一个点在一次迭代中可能移动的位置数。1992年Williams又提出了一种贪婪算法,降低了时间复杂度,变成了O。他认为轮廓曲线上的各控制点在计算能量时,与其它各点均不相关,也就是说,认为此时其它各点均处在最佳位置,以计算当前控制点的可能位置,且计算每一个控制点就更新其位置,不像Amini的动态规划法也是一种交互获取边缘方法,主要通过规划能量函数,而不是通过迭代求取出能量函数:需整个Snake计算完毕才更新各控制点的可能位置。由于此算法的简便性过于贪婪Greety,叫贪婪算法。4.4.2 算法过程具体介绍离散的贪婪算法的具体过程如下: 设蛇点为,则能量方程可以离散化为: 式5-9中的winsize为搜索窗口的大小,代表第i个蛇点或其位置。为第i个蛇点在搜索窗口中j处的点,j的围在除去蛇点所在位置搜索窗所有点。、分别对应于连续性能量continuity、弯曲能量、图像能量image。前两种属于部能量,后一项属于外部能量有时还包括约束constraint能量。、为相应的权值。相应的离散值为: 式47中的为蛇点间的平均距离,上式使得接近平均距离的蛇点能量值较小,这样蛇点分布较为均匀。大小为: 式48和49为图像的曲线能和图像能。其中为第i蛇点对应窗口中j位置的灰度值,、为窗口中最小和最大的灰度值。4.4.3 算法结果采用矩形框架初始化蛇点,并使用,经过处理,就可以得到图像410和图像411。 图410 原图像 图411 Snake处理图从结果可以看出:传统Snake蛇形的蛇点的初始化必须在图像的边缘处才可以收缩到真正图像的边缘。同时,在凹形框图像没有向下的力量,故它收缩不到真正的凹坑。第五章 Greed蛇形分割算法设计snake算法又称Active Contour算法,广泛应用于图像分割与计算机视觉的边界检测。这种算法需要首先给出初始的轮廓,然后进行迭代,使轮廓沿能量降低的方向靠近,最后即得到一个优化的边界。这里能量函数包括外力两方面,如边界曲率和梯度。Snake模型有两个主要特点:一方面,它将目标轮廓的初始估计、曲线性质、图像信息和先验知识融于一个统一的过程;另一方面,它在分割目标边缘的过程中寻找能量泛函的局部极小点,而非全局极小点。当snake的能量最小化后,部和外部能量趋于平衡,系统snake能量达到一个稳定的状态。5.1 整体设计在对程序进行设计之前首先要对设计任务有一个清晰的认识,对程序的整体框架有一个蓝图,才便于我们在对后续各个程序进行分块设计的时候有一个总体的把握和方向,对设计所要达到的设计指标有更深刻的理解。程序流程图如图 。可以看出在整个程序中有载入图像部分、灰度处理部分、能量计算部分、图像分割部分。这四部分的设计是整个程序设计的关键。载入图像和灰度处理是算法设计的前提,能量计算是算法程序设计的关键部分。图像分割主要借助VC+和Opencv来实现。概括来说就是利用Greed蛇形分割算法原理,基于VC+和Opencv实现对任何图像的分割处理,使之收敛到图像的边缘。5.2 载入图像载入图像即读取图像,这是对图像处理的准备。说到读取图像,就应该清楚关于所载入图像的一系列特征,例如是彩色图,灰度图还是二值图。函数: cvLoadImage功能:从指定文件读入图像,返回读入图像的指针程序语句如下:IplImage*cvLoadImageconst char* filename, int flags=CV_LOAD_IMAGE_
展开阅读全文