基于支持向量机的图像分割程序实现_第1页
基于支持向量机的图像分割程序实现_第2页
基于支持向量机的图像分割程序实现_第3页
基于支持向量机的图像分割程序实现_第4页
基于支持向量机的图像分割程序实现_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学院(部)数学科学院题 目基于支持向量机的图像分割程序实现基于支持向量机的图像分割程序实现目录摘要3Abstract4第一章 背景资料51.1研究的动机和目的51.2研究的背景和现状51.2.1支持向量机51.2.2支持向量机的应用61.3研究内容61) MATLAB编程实现基于SVM的真彩色图像切割62) MATLAB GUI制作交互界面6第二章 系统理论72.1支持向量机72.1.1定义72.1.2线性支持向量机72.1.3非线性分类92.1.4计算支持向量机分类器92.1.5经验风险最小化122.1.6分类模型的VC维与可学习性132.2 libsvm工具箱142.3 图像分割的定义14

2、2.3 MATLAB用户图形界面(GUI)152.3.1人机交互界面152.3.2 MATLAB GUI152.3.3 MATLAB GUIDE152.3.4 函数句柄152.3.4 回调函数16第三章 需求分析173.1需求分析的任务173.2程序功能分析171) 用户读入jpg或rgb格式的图像172) 用户使用鼠标操作在读入的图像上选取前景和背景样本点确定训练集173) 建立支持向量机进行图像分割174) 友好的用户界面173.4程序功能模块设计171) 读图模块172) 选取样本模块173) 建立支持向量机进行图像分割模块174) 用户界面模块173.5程序功能调用图183.6程序功能

3、设计说明18第四章 详细设计与软件展示及课题展望194.1详细设计与软件展示194.1.1读图模块194.1.2选取样本模块204.1.3建立支持向量机并进行图像分割模块234.1.4用户界面模块264.2设计缺陷与课题展望:31第五章 总结32参考文献33致 谢34附录351.1 程序功能351.2 开发测试环境351.3 运行环境351.4 使用说明35摘要本论文主要介绍了应用MATLAB编程,开发简易的图像分割软件,实行基于支持向量机实行真彩色图像的分割。其中图像分割模块使用MATLAB的LIBSVM包实现主要算法,与用户交互的界面使用MATLAB GUI达到自由输入图像进行切割的目的。

4、其中用支持向量机作图像分割是我这个项目主要的工作,大致流程是读入图像,训练选取样本点确定训练集,建立支持向量机进行图像切割。此外,我用MATLAB的GUI功能制作了一个用户交互界面,这样使得上面的代码可以更加方便的达到效果。关键字:图像分割;支持向量机;LIBSVM包;MATLAB GUIAbstractThis dissertation mainly presents a simple method for developing an image-segmentation application based on SVM by MATLAB programme. In this paper,

5、 the prominent algorithm is achieved by the application of LIBSVM package in the image segmentation part. And the User Interface is accomplished with MATLAB GUI for the goal of cutting randomly inputted images. My main work in this project is using SVM (Support Vector Machine) to segment an image, g

6、eneral process of which is to input a piece of true color image, then train the sample points selected from it, finally build a SVM to do image segmentation.Also, I make a user interface using the GUI function of MATLAB, in this way its more convenient for me to achieve the outcome of the above code

7、.Keywords: Image segmentation; Support Vector Machine; LIBSVM package; MATLAB GUI. 第一章 背景资料1.1研究的动机和目的视觉作为人们认识、了解、体会大自然和社会的基本且重要的途径之一,图像又是视觉的物理基础。自近现代以来,随着第二次工业革命,电视机、相机发明以来,数字图像就开始进入人类的生活,随着第三次科技革命,显示屏、摄像头、计算机的问世与应用普及,数字图像成为了经济、产业、生活等诸多领域的感知手段。当今大数据、人工智能等领域的持续火爆又推动对它的研究和应用。因此,数字图像处理成为了一项重要的科学技术,在科研

8、和工业领域的需求越来越大。对于一个图像,我们通常只对它的某一部分感兴趣,需要将它从整个图像中提取出来,这种过程叫做图像分割或图像切割。作为计算机视觉和图像处理中的热点问题,无数种不同的图像分割方法已经被提出,许多经典算法比如基于各种算子以及小波变换的边缘检测法,直线提取与边界跟踪法,各种阈值分割法,区域生长与合并法,区域处理法。5传统的方法都在解决某些特定的图像分割问题中有良好的价值,但是它们又都有局限性,所以目前还没有一种可以广泛适用于各种图像的优秀切割方法。由于图像的复杂性,要想使分割出来的图像看起来完美,有令人满意的研究价值,经常需要操作人员在图像特征提取的阶段作大量的工作确保图像的不同

9、特征被发掘出来。根据数理统计学中的渐近理论,样本越大得到的结果越与真实的情况接近。传统的图像切割方法正是基于此理论。但是它们难以在特征维度高、样本容量小的问题中取得理想的效果。2支持向量机的提出有望解决这一问题。支持向量机是基于万尼普克(Vapnik)提出的统计学习理论,有别于一般统计学理论,该理论能够在有限样本的条件下对事物进行非原理分析。该方法很有可能通过小样本就得到不错的分类结果,从而得到良好的分割,所以它不失为图像分割一个很好的选择。本文就是要着重探讨支持向量机以及如何利用它编程实现简单的真彩色图像切割。91.2研究的背景和现状1.2.1支持向量机在机器学习中,支持向量机是一种有关联学

10、习算法的监督学习模型,用来分析被用于分类和回归分析的数据。给定一组训练的例子,每个都被标记为属于两个类别中的一个或另一个,一个支持向量机训练算法建立一个模型,分配新例子到其中一或另一个类别中,使得该模型成为一个非概率二进制线性分类器(虽然存在使用概率分类设置状态下的支持向量机的方法,比如普拉特扩展)。一个支持向量机模型是将例子作为空间中的点的映射的展示,这样不同类别的例子被一个清晰的分界线尽可能明显地分开。然后新的例子被映射到相同的空间中并根据它落到分界线的哪一侧预测其所属的类别。除了执行线性分类,支持向量机能够使用核技巧有效地执行非线性分类,核技巧隐性地把输入的数据映射到高维特征空间中去。当

11、数据没有被标类时,监督学习就没有成效了,这时我们需要非监督学习方法,该方法尝试着寻找原始聚类,把它们划分到组中,然后把新的数据映射到这些组中。支持向量簇类算法应用支持向量的统计方法来分类非标签数据,是目前业界最广泛应用的簇类算法。最初的支持向量机算法是由弗拉基米尔N.万普尼克(Vladimir N. Vapnik )和阿利克谢.雅(Alexey Ya. Chervonenkis)于1963年发明。Bernhard E. Boser,Isabelle M. Guyon和Vladimir N. Vapnik于1992年提出了通过把核函数运用到最大间隔超平面来创建非线性分类器的方法。当前的

12、标准的典型(软间隔)是由Corinna Cortes和Vapnik在1993年提出并于1995年公布的。91.2.2支持向量机的应用1.SVM在文本和超文本分类中很有帮助因为他们的应用可以在标准归纳和转换设置中显著减少对标签训练例子的需求。92.图像的分类也可以使用SVM实施。试验表明实验结果表明,在经过3 - 4轮相关反馈后,支持向量机的搜索精度明显高于传统的查询细化方案。对图像分割系统这个结论也同样适合,包括那些使用修改版的由万普尼克提出的优先方法的支持向量机。93.使用支持向量机识别出手写字体的特征。94.SVM算法已经被广泛应用于生物和其它科学领域。它们已经被用来对蛋白质进行分类,其中

13、高达90%的化合物分类正确。91.3研究内容1) MATLAB编程实现基于SVM的真彩色图像切割2) MATLAB GUI制作交互界面第二章 系统理论2.1支持向量机2.1.1定义更常见的是,一个支持向量机在一个高维或无限维的空间建立一个或一系列超平面,这些超平面可以被用于分类、回归或其它任务比如异常值检验。直观地来说,一个好的分离是通过一个合格的超平面得到的,该超平面必须是对任何类中的最近的训练点集有着最大的距离(这就是所谓的函数间隔),因为通常来说间隔越大,分类器的泛化误差越小。虽然原始的问题可以在有限维空间中被表述,但是经常会出现要区分的数据集在有限维空间不是线性可分的情况。正是这个原因

14、,有人提出了将原始的有限维空间映射成一个维度更高的空间,认为这样可以使得划分更加容易。为了使运算量保持在合理的范围内,这种使用支持向量机方案的映射,通过定义适用于此问题的核函数,被设计成能保证原始空间中的变量的点积很容易被算出来。在更高维空间的超平面被定义为与该空间某向量的点积是常数的点的集合。这些定义超平面的向量可以被选为出现在数据基中的特征向量的图像参数。通过这种超平面的选择,特征向量中被映射到超平面的点由以下关系式定义:。注意,如果随着远离增长,变小,和式中的每一个项度量了测试点离相应的数据基的点的相近程度。在这种情况下,上面内核的和式可以用来度量每一个测试点离另一个来自待区分集合的数据

15、点的相对接近程度。注意到一个事实,就是被映射到任何超平面的点的集合最终会慢慢变复杂,使得在初始空间一点也不复杂的的集合的划分会变得很复杂。92.1.2线性支持向量机我们给定如下n个点的训练集,的值是1或-1,每一个都表明了点所属的类,每个是一个p维实矩阵。我们想找到“最大间隔超平面”,该平面将标签为1和-1的点分成两组。它被如此定义因为超平面与每个组中的点的最近距离得最大。每个超平面可以写成满足的点的集合,这里(不一定规范化)是超平面的法向量。这个式子非常像黑塞标准形,除了不一定是一个单位向量。参数决定了超平面沿着法向量相对原点的偏移。9硬间隔如果训练数据是线性可分的,我们可以选择两个能够分开

16、两类数据的平行的超平面,这样它们之间的距离会尽可能大了。被两个超平面围成的区域被称为“间隔”,那么最大间隔超平面就位于它们正中间与它们平行。通过正确的数据集重新调节,这些超平面可以被描述为下面的式子: (任何在该边界或其上方的点是一类,用标签1表示) (任何在该边界或其下方的点是一类,用标签-1表示)从几何角度出发,两个超平面之间的距离是,为了最大化距离我们想要最小化。这个距离是用点到平面的距离方程算出来的。我们也必须防止数据点掉到间隔中,我们增加了如下约束:对于每个如果满足时,如果,两个式子中的任一个。这些约束阐明每个数据点必须在间隔正确的一边。上面两项也可以写成,其中。我们可以把这些东西结

17、合起来得到优化问题: 在的条件下,解决该问题的和决定了我们的分类器:一个显而易见但是非常重要的几何描述的结论:最大间隔超平面完全被那些离它最近的点 决定。这些被称为支持向量。9软间隔为了把SVM扩展到非线性可分的情况,我们引入铰链损失函数,如果满足(1)的约束条件,换句话说,如果在间隔正确的一边,这个函数就为0。对于在错误的一边的数据,该函数的值与离间隔的距离成正比。接下来我们希望最小化式子,参数在这里权衡了增加间隔尺寸和确保落在正确的一边。因此,对于值显著小的情况,如果输入的数据是线性可分的,此SVM的分类效果等同于硬间隔SVM。但不管分类规则可行与否,分类器都会学习。92.1.3非线性分类

18、最初的最大间隔分类器算法是建立线性分类器。1992年科学家提出了把核技巧运用到最大超平面构建的非线性分类器方法。由此产生的算法形式上相似,除了所有点积被一个非线性核函数取代。这就使得该算法能在转换后的特征空间拟合最大超平面。该转换可能是非线性的并且转换后的空间是高维的。尽管分类器在转换后的特征空间是一个超平面,它在最初输入数据的空间可能是非线性的。值得注意的是尽管给定足够多样本算法任然执行得很好,在一个更高维的特征空间工作增加了支持向量机的推广误差。一些常见的核函数包括:多项式(均匀):多项式(非均匀):高斯径向基底函数:对双曲正切:,部分并且内核与式子的转换相关。值也在转换后的空间中,用表示

19、。用进行分类的点积可以再用核技巧来计算。92.1.4计算支持向量机分类器计算(软间隔)支持向量机等同于把下面形式的表达式最小化 (2) 我们重点关注软间隔支持向量机,因为上面提过,如果显著小,那么就可以看做处理线性可分数据的硬间隔支持向量机。下面将先介绍一些经典的解决方法,这些方法是把(2)式降为一个二次规划问题,详细如下:原始方法最小化(2)式可以被写成下面一个可微目标函数的约束优化问题对每个,我们引入一个变量。注意是满足的最小非负数。因此我们可以把优化问题写成如下形式:其中并且对,这就是原始问题。对偶法通过解决上面问题的拉格朗日对偶型,我们得到了简化的问题满足 并且对所有这被称作对偶问题。

20、因为对偶最大化问题是一个具有线性约束的的二次函数,它可以通过二次规划算法高效地求解。这里,仅当在正确的一边时,并且当落在间隔边界上时。接下来可以写成支持向量的线性组合。偏移可以通过在间隔边界找到一个并且求解 得到。核方法假设现在我们想学习一个非线性分类规则,它对应于一个转换后的数据点的线性分类规则。此外,我们给出一个满足的核函数。我们知道在转换空间的分类向量满足,可以通过解如下优化问题得到:在且对所有,的条件下, 系数可以使用二次规划求解,就像之前那样。接下来,我们可以找到这样序号,满足,这样在转换空间的间隔边界上,接下来解决 最后,新的点可以通过计算来分类。9现代方法最近的寻找SVM分类器的

21、算法有次梯度下降法和坐标下降法。但处理大型稀疏数据集时这两种技术都被证明比传统方法更有优势。其中次梯度方法在当训练例子很多时尤其有效,而坐标下降法在当特征空间的维数高的时候非常有用。次梯度下降算法SVM的次梯度下降算法由如下表达式为形式运行的:注意到是一个和凸函数。因此,可以采用传统的梯度下降法,而不是在函数梯度的方向上采取步骤,可以从函数的次梯度选择的一个向量的方向采取步骤。这种方法对于特定的实施有优势,就是迭代的次数并不是以为规模的,是数据点的个数。9坐标下降法SVM的坐标下降算法是从对偶问题中得来的:在并且对所有的条件下,对于每个,系数迭代地沿着的方向调整。然后,生成的系数向量被投射到满

22、足给定约束的最近的系数向量上。(通常用欧式距离。)该过程会一直重复直到得到一个系数最近优化向量。生成的算法在实践中非常快,尽管证明有很少的性能保证。92.1.5经验风险最小化支持向量机属于为统计推断的一个自然类算法,它的许多独特特征是由于铰链损失的行为。上述软间隔支持向量机就是一个铰链损失的经验风险最小化的例子。这个观点可以为我们进一步了解支持向量机如何并且怎样工作提供更好的解释,并使我们更好地分析他们的统计学性质。9风险最小化在监督学习中,我们给定一组标签为的训练例子,并且希望用给定的来预测。为了这样做我们形成一个假设,是的一个好的拟合。一个好的拟合通常在损失函数的帮助下定义,该函数说明了作

23、为的一个拟合,它的拟合有多差。我们希望选择一个使期望风险最小化的假设:在大多是的情况下,我们不知道的联合分布。在这些案例里,一个常见的策略是选择能使经验风险最小化的假设:。在随机变量的序列的特定假设下,如果考虑的假设集足够小,随着n增大,经验风险的最小化与期望风险的最小化更接近。这种方法就叫做经验风险最小化。正规化和稳定性:为了使最小化问题有一个明确定义的方案,我们必须给考虑的假设集合约束。如果是一个赋范空间,一个特别有效的技术是考虑仅仅的那些假设。这等同于加了一个正规惩罚,并且解决了新的优化问题。这种方法叫做吉洪诺夫正则化。更普遍的是,可以成为假设的复杂性的测度,所以偏好更简化的假设。2.1

24、.6分类模型的VC维与可学习性VC维在 VapnikChervonenkis的理论中,VC维是一个可以被统计学习算法学习的函数空间能力的测度,该能力包含复杂性,表现力、丰富性、灵活性。它定义为算法可以打散的最大点集的基数。如果对于所有这些点的标签的任意分配,存在一个使得模型对点集的评估没有出错,那么我们说一个参数向量为的分类模型可以用来打散一个点集,一个模型的VC维是该模型可以打散的最大样本数。更正式的说,它是最大的基数,基数为的点集可以被打散。8所谓打散我们可以这样理解,假设一个二维空间有3个点,现在要用正负标签给这3个点标号,然后用一条直线把这三个点正确分类。那么如果这三个点共线,并且同一

25、直线上中间的点和两边的点的标签不一样,那么就无法用一条直线来把它们正确分类,那么这二维空间的三个点是不可打散的。依次类推,二维空间中的点大于3的情况也显然是不可打散的,那么二维空间的VC维就是2。可学习性对VC维概念的理解使得我们研究可学习性成为了可能,而可学习性决定了我们训练的样本数的大小。一般情况下,学习所需的训练样本数随着VC维的增加而增加,这也是我们避免使用高阶多项式作为分类器的原因。72.2 libsvm工具箱LIBSVM是一个受欢迎的开源机器学习库,是由国立台湾大学开发的,通过C语言的应用程序编程接口用C+写的。LIBSVM实现了面向内核支持向量机的SMO算法,它能支持分类和回归。

26、它的库中的支持向量机学习代码经常在其它开源的机器学习工具箱被应用。对于许多语言比如JAVA,MATLAB,R都与LIBSVM绑定。5在该设计中,我们通过调用它里面的训练和预测函数完成核心功能。2.3 图像分割的定义所谓图像分割,是将某图像的某一或某几个部分分割出来,并且分割出来的部分之间互相不重叠,与未分割出来的部分也不重叠。这个分割不是随意的,它必须根据图像的特点或特征集来分割。一个图像中同一区域的特征(比如灰度、色彩、形状、纹理、密集度)具有某种共性,而不同的区域的这些特征具有个性,区域和区域之间的特点会产生突变。从集合的角度来说,对于一个理想的分割我们有如下一些结论:2假设把一个图像E分

27、割成n小块,区域的一致程度用表示,的取值范围设为对于不同的下标i,j,。这个很好理解。对于不同的下标i,j,。这个说明了分割后的原图像不同的部位互不相交。对于不同的下标i,j,。表明不同区域的一致程度很低,理想的情况下应该是0,实际上难以做到精度100%,所以现实中一个比较成功的分割两个不同分割区域的并的一致性应该是很低的,无限趋于0。同一区域的一致程度是非常高的,所以它的值无限趋于1。2.3 MATLAB用户图形界面(GUI)2.3.1人机交互界面用户界面是人和机器或程序交互的物理工具或方法。键盘、鼠标、操作杆、按钮等都可以成为交互的接口。常见的用户操作界面有直接操作界面,比如windows

28、系统,用户可以很容易理解桌面上的应用程序是干什么的,根据固有常识去操作计算机。图形用户界面,这是当今社会应用最广泛的交互方式,比如大量的便携式电子产品(手机、平板、MP4),依赖视觉和手动控制参与操作。目前比较新兴的还有虚拟现实技术,让人有深入其境的感觉,人能够在虚拟现实环境里依靠自己更加自然的、本能的反应操作机器,随着科技的进步,这项技术的应用会越来越广泛。在该设计中,我使用的是图形用户界面来实现人对程序的控制与操作。2.3.2 MATLAB GUI图形用户界面(GUI)提供了对应用软件或程序指向和点击控制,这种指向和点击控制减少了学习一门语言或者为了运行应用程序而打字输入指令的需要。MAT

29、LAB应用软件自动包含了具有GUI前端的MATLAB程序,这些程序能够用自动化一个任务或计算。这个GUI通常含有控制元件比如菜单、工具条、按钮和滑动条。许多MATLAB产品比如曲线拟合工具包,信号处理工具包、和控制系统工具包有具有自定义用户界面的应用程序。你也可以创建你自己的自定义应用程序以及它们相对应的用户界面给别人使用。52.3.3 MATLAB GUIDEGUIDE是MathWorks开发的数学软件MATLAB GUI开发环境,它为人提供自定义app设计用户界面的工具。通过使用GUIDE版面编辑器,你可以形象地设计你的用户界面。然后GUIDE会自动产生MATLAB代码来建立这个用户界面,

30、你可以这些被生成的代码对你的应用程序的行为来编程。52.3.4 函数句柄一个函数句柄是一个将关联存储到函数中的一个数据容器。你可以使用一个函数句柄来建立匿名函数或者指定回调函数。你也可以使用一个函数句柄来把一个函数传递到另一个函数中去,或者从主函数外面调用一个本地函数。62.3.4 回调函数当一个图形对象要发生特定的事件时,GUI传递要执行的子函数名到M文件中,该子函数称为回调函数。用户只需要对一些控制元件操作,比如点击某个按钮,控制元件会自动对此操作响应,然后启动其所对应的回调函数。该函数不会主动运行,只有被触发才会执行。6第3章 需求分析3.1需求分析的任务通过对软件(程序)操作者的要求分

31、析,从而了解到软件需要具备的功能,然后将这些需求或功能抽象化,将它们细化为系统功能模块。103.2程序功能分析1) 用户读入jpg或rgb格式的图像2) 用户使用鼠标操作在读入的图像上选取前景和背景样本点确定训练集3) 建立支持向量机进行图像分割4) 友好的用户界面3.4程序功能模块设计 根据系统功能的要求,可将系统分解成以下几个功能模块来分别设计:1) 读图模块2) 选取样本模块3) 建立支持向量机进行图像分割模块4) 用户界面模块选择图片文件按钮模块(包含读取图像、选取样本功能) 输出图形模块(包含建立支持向量机切割以及输出切割后的图像)3.5程序功能调用图3.6程序功能设计说明我在设计时

32、先是把前三个模块做出来,形成一个独立的基于支持向量机的能进行真彩色图形图像切割的程序。然后再单独设计用户界面模块,将前三段程序进行部分的修改后,嵌入到GUI对象的函数中,实现其功能。第四章 详细设计与软件展示及课题展望4.1详细设计与软件展示4.1.1读图模块结构流程图:具体实现:将位于某路径下的文件littleduck.jpg用image.read函数读取。用矩阵pic来存放读入的图片,查看矩阵pic的大小和类型,显示结果如下:Name Size Bytes Class Attributes pic 439x600x3 790200 uint8 结果说明:读入的图像数据pic是一个439行、

33、600列、3页的三维矩阵,数据类型为8位无符号整形。接下来规定图像显示的窗口的属性,然后将读入的图形在窗口中显示出来。 4.1.2选取样本模块实现目标:本模块要实现合理选取背景和前景样本点确定训练集,选取样本阶段是关键的一个环节,因为样本的好坏决定了你分类的效果。结构流程图:具体实现:使用MATLAB中的ginput函数来提取前景和背景样本点作为训练的样本,实现过程如下:用zeros函数生成两个20*3零矩阵TrainData_background和TrainData_foreground分别表示背景图像样本集和前景图像样本集。这两个矩阵存放的数值类型是double型。接下来实施背景采样,先用

34、msgbox函数创建一个对话框,执行到该步骤时该对话框会自动弹出,告诉你在背景区域采集20个背景样本点,点击OK后按任意键继续。对话框结束后,用pause语句来实现一个暂停功能,按任意键后执行下面的程序。%使用ginput函数,这样可以用光标在屏幕上输入,构建循环输入。for run = 1:20 x,y = ginput(1); hold on;plot(x,y,'r*');%将鼠标输入的点的坐标转换成uint8格式 x = uint8(x);y = uint8(y);%存放图像信息的矩阵是三维的,三个维度分别表示分辨率红、黄、蓝三原色的数值大小 TrainData_back

35、ground(run,1) = pic(x,y,1); TrainData_background(run,2) = pic(x,y,2); TrainData_background(run,3) = pic(x,y,3);End 1需要说明的是,选取训练点时有一个需要注意的地方,应该选取有代表性的点作为训练点,拿此列来说,比如选取鸭子眼睛或鸭子边缘部位的点作为样本点。最初选取的训练点可能导致图片分割不是很完美,例如鸭子后面溅起的水花被分割成鸭子区域,这时候可以对错分的水花区域添加一两个典型到湖面区域,一般尝试几次后就可以将鸭子图像从整个图像中分割出来了。前景采样阶段也遵循上面的步骤。运行结果:

36、 前景采样开始阶段背景和前景的样本点都选取完毕后的图像图片说明:由于我是将程序按段执行的,目的是为了展示每一段程序运行后的效果,所以前后图片上的样本点取点不一致。4.1.3建立支持向量机并进行图像分割模块实现目标:利用上面选取的样本点作为训练样本,将背景的标签设为0,前景的标签设为1,进行训练和预测。这里采用了一次多项式核函数(LIBSVM参数-t 1 -d 1)结构流程图:具体实现:建立向量机模型阶段:建立一个标签组,存放训练数据的背景标签矩阵和前景标签矩阵,属于背景的点记为0,属于前景的点记为1。用length函数算出背景和前景样本的长度(个数),然后用zeros函数将背景样本组初始化为2

37、0*1的零矩阵,用ones函数将前景样本组初始化为20*1的单位矩阵。代码如下:TrainLabel=zeros(length(TrainData_background),1);.ones(length(TrainData_foreground),1);建立一个训练数据组,它由背景和前景样本构成,代码如下:TrainData = TrainData_background;TrainData_foreground;使用LIBSVM中的svmtrain函数建立预测模型,参数设置为-t 1 -d 1表示核函数是依次多项式。代码如下:model = svmtrain(TrainLabel,double

38、(TrainData),'-t 1 -d 1');将标签组,训练数据组、建立的模型用svmpredict函数预测,其中训练数据得转换成double型,代码如下:preTrainLabel = svmpredict(TrainLabel,double(TrainData),model);预测结果如下:optimization finished, #iter = 23536nu = 0.873432obj = -34.914147, rho = -3.345745nSV = 37, nBSV = 33Total nSV = 37Accuracy = 57.5% (23/40) (c

39、lassification)预测精度不高。求三维矩阵pic的行数m,列数n,页数k。用reshape函数将三维矩阵pic转成行,k列的双精度二维矩阵,用TestData矩阵来表示转换后的pic。查看矩阵TestData的大小和类型,预测前景和背景标签 TestLabal = svmpredict(zeros(length(TestData),1),TestData,model);预测结果如下: Name Size Bytes Class Attributes TestData 263400x3 6321600 double Accuracy = 88.6393% (233476/263400)

40、 (classification)下面进入展示分割后的图像阶段:首先根据预测得到的前景和背景标签转换成三维矩阵形式从而对整个图像的像素点进行分类,进而达到图像分割的目的。用变量ind来表示:将变量ind的数值型数据转换成逻辑型数据,我们引入一个新变量pic_seg来存储图像矩阵pic,将pic_seg矩阵逻辑值为0的点都赋值为0,就达到分割的要求了,代码如下:ind = logical(ind);pic_seg = pic;pic_seg(ind) = 0;然后设置窗口属性,展示分割后的图像 1结果显示: 分割后的图像用sublot函数在图形窗口输出分割前后的图像,达到对比的目的。结果展示:

41、分割前后对比图结果说明:前景鸭子图像已经分割出来了,虽然不是十分完美,但是效果已经比较令人满意了。当然,对特征点的选取是影响支持向量机分割效果的关键因素。我如果取点的时候更加注意一点可能会获得更完美的图像。4.1.4用户界面模块设计目标:前面三个模块已经是该设计的核心了,但是为了更好地操作该程序,需要一个用户界面。该模块就是为了能够使用按钮操作,自由地选择图片然后在图片上取点,执行切割功能,展示切割后的图片。理想的目标是读入任何真彩色图片都能达到令人满意的切割效果。程序功能调用图:具体实现:我使用MATLAB的GUIDE建立GUI。我需要使用GUIDE完成两项工作,第一是进行图形页面布局,第二

42、是进行GUI编程。实际上,只需要把之前写的代码略加修改嵌入到两个按钮对应的回调函数中就可以实现了。在命令行窗口输入guide,启动GUIDE。选择Blank GUI(default)。进入GUI编辑界面,GUI编辑界面主要包括GUI对象选择区、GUI工具栏、GUI布局区。选择一个Edit Text对象,两个Axes对象、两个Push Button对象。在.fig文件中对GUI对象属性进行设置和布局。结果展示:编写回调函数阶段:编写“选择图片”按钮的回调函数:设置全局变量 TrainData_background,TrainData_foreground,imgdata用下面的代码实现读入任何选

43、择的路径的功能:imgfilename imgpathname=uigetfile('*.jpg;*.png','选择图片');if imgfilenameimgdata=imread(imgpathname '' imgfilename);将读入的图片用imgdata来保存。在第一个坐标轴方框中显示出来,将文件名变量保存到handles结构体中handles.imgfilename中。将imgdata保存到handles结构体中,这样imgdata就成了全局变量,可以在回调函数间被传递。下面的步骤就是选取样本阶段的代码,只需要将pic替换为im

44、gdata。用guidata(hObject,handles)更新handles结构体,该阶段结束。16结果展示:编写转换按钮的回调函数:将 TrainData_background TrainData_foreground imgdata设置全局为变量对文件名变量进行判断是否非空,以确保文件已经读入。if isempty(handles.imgfilename)接下来参照建立支持向量机进行图像分割模块的思路过程,用imgoutput矩阵变量来存储分割后的图像的值,并放入句柄函数,在左边的坐标轴方框显示出来。代码如下:imgoutput = imgdata;imgoutput(ind) = 0

45、;handles.imgoutput = imgoutput;axes(handles.axes2);imshow(imgoutput);End 16结果展示:样本点个数为20的效果结果说明:该结果大致把前景图像从原图像中分离出来,但是有许多瑕疵,很多细节部分没有展现地很好。原因是取样本的图片小了很多,分辨率自然就低很多,同时取样本点很多细节处容易被忽略,所以难以得到之前的分割效果。改进措施:把坐标轴扩大,将背景和前景取样的个数增加到30个,这样能够更多地照顾到细节部分。结果展示: 样本点个数为30的效果结果说明:经过上面的改进,切割效果明显变好了,甚至比初始的程序做出来的效果都好,事实证明,

46、增加样本量是有利于提高分类的准确率,提高切割图像的效果的。为了测试该模块自由读取图片并切割的功能,我又进行了下面的测试。选取一个真彩色花朵的图片,把它的图像从周边的环境的图像分割出来。如下是原图:把它放入untitled.m文件操作。结果说明:选取的图像复杂性比鸭子图片的要高很多,所以相同样本数效果要相对差一点,但是大体上还是可以的,花朵的那一部分已经分割出来了。由图中可以看出,样本数越密集的区域,分割得越完整。4.2设计缺陷与课题展望:对于本次设计由于前景和背景图像的色彩单一且对比度大,可以达到好的效果,但是如果换一张更复杂的图片,它的效果就会非常差,甚至会出现一片黑色,究其原因还是模型太简

47、单了,一元多项式核函数不能适用于复杂的图像。并且在本次设计中,即便是那两张比较简单的图片,样本点选取不够多的情况下切割效果还有很多瑕疵,而增加样本点数后的效果就相当完美了,说明更多的样本数使得我们尽可能多地选择有代表性的图像特征,这也验证了机器学习中一条简单的经验法则,即训练样本数越多,学习分类器的效果越好。图像切割,在大数据、人工智能前景非常广阔的今天有着越来越热门和广泛的应用,与它相关的很多领域比如模式识别需要它发挥作用。一种优秀的算法,不仅仅能在解析图像阶段大大减少计算复杂度,还能得出很好的分割效果。2对图像切割的研究也已经不是一天两天的事情了,目前已经有成熟的理论方法。这些方法在不同的情况下有着不可或缺的作用,但是也都有局限。基于统计学习的支持向量机方法可以说是比较创新的技术。它能够应对快速地对图像特征进行分析,从而达到分割的目的。其最为可贵的是在图像切割的诸多算法中通用性相对比较强,但是,支持向量机的图像分割方法不是很容易理解的,对于不同的图像,它的核技巧是需要变化的,才能适应生活中千奇万变的问题。随着数学工具的引入,一种种

温馨提示

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

评论

0/150

提交评论