基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx

上传人:李司机 文档编号:7002699 上传时间:2024-04-05 格式:DOCX 页数:41 大小:311.59KB
返回 下载 相关 举报
基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx_第1页
第1页 / 共41页
基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx_第2页
第2页 / 共41页
基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx_第3页
第3页 / 共41页
基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx_第4页
第4页 / 共41页
基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx》由会员分享,可在线阅读,更多相关《基于支持向量机的图像分割程序实现分析研究计算机科学与技术专业.docx(41页珍藏版)》请在三一办公上搜索。

1、基于支持向量机的图像分割程序实现目录摘要3Abstract4第一章背景资料51.1 研究的动机和目的51.2 研究的背景和现状5121支持向量机51.2.2支持向量机的应用61.3 研究内容61) MATLAB编程实现基于SVM的真彩色图像切割62) MATLABGUl制作交互界面6第二章系统理论72.1 支持向量机71.1.2 义71.1.3 线性支持向量机71.1.4 非线性分类91.1.5 计算支持向量机分类器91.1.6 经验风险最小化121.1.7 分类模型的VC维与可学习性132.2Iibsvm工具箱142.3图像分割的定义142.3MATLAB用户图形界面(GUI)152.3.1

2、 人机交互界面152.3.2 Matlabguiis2.3.3 MATLABGUIDE152.3.4 函数句柄152.3.5 回调函数16第三章需求分析173.1 需求分析的任务173.2 程序功能分析171)用户读入jpg或rgb格式的图像172)用户使用鼠标操作在读入的图像上选取前景和背景样本点确定训练集173)建立支持向量机进行图像分割174)友好的用户界面173.4 程序功能模块设计17D读图模块172)选取样本模块173)建立支持向量机进行图像分割模块174)用户界面模块173.5 程序功能调用图183.6 程序功能设计说明18第四章详细设计与软件展示及课题展望194.1 详细设计与

3、软件展示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包实现主要算法,与用户交互的界面使用MATLABGUI达到自由输入图像进行切割的目的。其中用支持向量机作图像分割是我这个项目主要的工作,大致流程是读入图

4、像,训练选取样本点确定训练集,建立支持向量机进行图像切割。此外,我用MATLAB的GIJl功能制作了一个用户交互界面,这样使得上面的代码可以更加方便的达到效果。关键字:图像分割;支持向量机;LlBSVM包;MATLABGUIAbstractThisdissertationmainlypresentsasimplemethodfordevelopinganimage-segmentationapplicationbasedonSVMbyMATLABprogramme.Inthispaper,theprominentalgorithmisachievedbytheapplicationofLIBS

5、VMpackageintheimagesegmentationpart.AndtheUserInterfaceisaccomplishedwithMATLABGUIforthegoalofcuttingrandomlyinputtedimages.MymainworkinthisprojectisusingSVM(SupportVectorMachine)tosegmentanimage,generalprocessofwhichistoinputapieceoftruecolorimage,thentrainthesamplepointsselectedfromit,finallybuild

6、aSVMtodoimagesegmentation.Also,ImakeauserinterfaceusingtheGUIfunctionofMATLAB,inthiswayitsmoreconvenientformetoachievetheoutcomeoftheabovecode.Keywords:Imagesegmentation;SupportVectorMachine;LIBSVMpackage;MATLABGUL第一章背景资料1.1 研究的动机和目的视觉作为人们认识、了解、体会大自然和社会的基本且重要的途径之一,图像又是视觉的物理基础。自近现代以来,随着第二次工业革命,电视机、相机

7、发明以来,数字图像就开始进入人类的生活,随着第三次科技革命,显示屏、摄像头、计算机的问世与应用普及,数字图像成为了经济、产业、生活等诸多领域的感知手段。当今大数据、人工智能等领域的持续火爆又推动对它的研究和应用。因此,数字图像处理成为了一项重要的科学技术,在科研和工业领域的需求越来越大。对于一个图像,我们通常只对它的某一部分感兴趣,需要将它从整个图像中提取出来,这种过程叫做图像分割或图像切割。作为计算机视觉和图像处理中的热点问题,无数种不同的图像分割方法已经被提出,许多经典算法比如基于各种算子以及小波变换的边缘检测法,直线提取与边界跟踪法,各种阈值分割法,区域生长与合并法,区域处理法。5传统的

8、方法都在解决某些特定的图像分割问题中有良好的价值,但是它们又都有局限性,所以目前还没有一种可以广泛适用于各种图像的优秀切割方法。由于图像的复杂性,要想使分割出来的图像看起来完美,有令人满意的研究价值,经常需要操作人员在图像特征提取的阶段作大量的工作确保图像的不同特征被发掘出来。根据数理统计学中的渐近理论,样本越大得到的结果越与真实的情况接近。传统的图像切割方法正是基于此理论。但是它们难以在特征维度高、样本容量小的问题中取得理想的效果。2支持向量机的提出有望解决这一问题。支持向量机是基于万尼普克(Vapnik)提出的统计学习理论,有别于一般统计学理论,该理论能够在有限样本的条件下对事物进行非原理

9、分析。该方法很有可能通过小样本就得到不错的分类结果,从而得到良好的分割,所以它不失为图像分割一个很好的选择。本文就是要着重探讨支持向量机以及如何利用它编程实现简单的真彩色图像切割。91.2 研究的背景和现状1.3 支持向量机在机器学习中,支持向量机是一种有关联学习算法的监督学习模型,用来分析被用于分类和回归分析的数据。给定一组训练的例子,每个都被标记为属于两个类别中的一个或另一个,一个支持向量机训练算法建立一个模型,分配新例子到其中一或另一个类别中,使得该模型成为一个非概率二进制线性分类器(虽然存在使用概率分类设置状态下的支持向量机的方法,比如普拉特扩展)O一个支持向量机模型是将例子作为空间中

10、的点的映射的展示,这样不同类别的例子被一个清晰的分界线尽可能明显地分开。然后新的例子被映射到相同的空间中并根据它落到分界线的哪一侧预测其所属的类别。除了执行线性分类,支持向量机能够使用核技巧有效地执行非线性分类,核技巧隐性地把输入的数据映射到高维特征空间中去。当数据没有被标类时,监督学习就没有成效了,这时我们需要非监督学习方法,该方法尝试着寻找原始聚类,把它们划分到组中,然后把新的数据映射到这些组中。支持向量簇类算法应用支持向量的统计方法来分类非标签数据,是目前业界最广泛应用的簇类算法。最初的支持向量机算法是由弗拉基米尔N.万普尼克(VladimirN.Vapnik)和阿利克谢.雅(Alexe

11、yYa.Chervonenkis)于1963年发明。BernhardE.Boser,IsabelleM.GUyon和VIadinIirN.Vapnik于1992年提出了通过把核函数运用到最大间隔超平面来创建非线性分类器的方法。当前的标准的典型(软间隔)是由CorinnaCorteS和VaPnik在1993年提出并于1995年公布的。91.2.2支持向量机的应用1.SVM在文本和超文本分类中很有帮助因为他们的应用可以在标准归纳和转换设置中显著减少对标签训练例子的需求。92 .图像的分类也可以使用SVM实施。试验表明实验结果表明,在经过3-4轮相关反馈后,支持向量机的搜索精度明显高于传统的查询细化

12、方案。对图像分割系统这个结论也同样适合,包括那些使用修改版的由万普尼克提出的优先方法的支持向量机。93 .使用支持向量机识别出手写字体的特征。94 .SVM算法已经被广泛应用于生物和其它科学领域。它们已经被用来对蛋白质进行分类,其中高达90%的化合物分类正确。91.3研究内容DMATLAB编程实现基于SVM的真彩色图像切割2) MATLABGUI制作交互界面第二章系统理论2.1 支持向量机2.1.1 定义更常见的是,一个支持向量机在一个高维或无限维的空间建立一个或一系列超平面,这些超平面可以被用于分类、回归或其它任务比如异常值检验。直观地来说,一个好的分离是通过一个合格的超平面得到的,该超平面

13、必须是对任何类中的最近的训练点集有着最大的距离(这就是所谓的函数间隔),因为通常来说间隔越大,分类器的泛化误差越小。虽然原始的问题可以在有限维空间中被表述,但是经常会出现要区分的数据集在有限维空间不是线性可分的情况。正是这个原因,有人提出了将原始的有限维空间映射成一个维度更高的空间,认为这样可以使得划分更加容易。为了使运算量保持在合理的范围内,这种使用支持向量机方案的映射,通过定义适用于此问题的核函数M,y),被设计成能保证原始空间中的变量的点积很容易被算出来。在更高维空间的超平面被定义为与该空间某向量的点积是常数的点的集合。这些定义超平面的向量可以被选为出现在数据基中的特征向量W的图像参数以

14、。通过这种超平面的选择,特征向量中被映射到超平面的点X由以下关系式定义:Zaikxi,x)=Constanto注意,如果随着y远离X增长,HX,力变小,和式中的每一个项度量了测试点/离相应的数据基的点项的相近程度。在这种情况下,上面内核的和式可以用来度量每一个测试点离另一个来自待区分集合的数据点的相对接近程度。注意到一个事实,就是被映射到任何超平面的点的集合最终会慢慢变复杂,使得在初始空间一点也不复杂的的集合的划分会变得很复杂。92.1.2 线性支持向量机我们给定如下n个点的训练集伍,乂),(,y“),、的值是1或-1,每一个都表明了点用所属的类,每个芯是一个P维实矩阵。我们想找到“最大间隔超

15、平面”,该平面将标签为1和-1的点分成两组。它被如此定义因为超平面与每个组中的点的最近距离得最大。每个超平面可以写成满足而元-匕=0的点用的集合,这里R(不一定规范化)是超平面的法向量。这个式子非常像黑塞标准形,除了由不一定是一个单位向量。参数刍决定了超Fll平面沿着法向量勿相对原点的偏移。9硬间隔如果训练数据是线性可分的,我们可以选择两个能够分开两类数据的平行的超平面,这样它们之间的距离会尽可能大了。被两个超平面围成的区域被称为“间隔”,那么最大间隔超平面就位于它们正中间与它们平行。通过正确的数据集重新调节,这些超平面可以被描述为下面的式子:x-b=(任何在该边界或其上方的点是一类,用标签1

16、表示)x-b=-l(任何在该边界或其下方的点是一类,用标签1表示)2从几何角度出发,两个超平面之间的距离是同,为了最大化距离我们想要最小化I同I。这个距离是用点到平面的距离方程算出来的。我们也必须防止数据点掉到间隔中,我们增加了如下约束:对于每个i如果满足H=I时,xi-bl,如果M=T,而芯bT两个式子中的任一个。这些约束阐明每个数据点必须在间隔正确的一边。上面两项也可以写成yi(x-b),其中li九。我们可以把这些东西结合起来得到优化问题:在y(一.一1,、=L,.的条件下,min.解决该问题的切和。决定了我们的分类器:无sgn(分工一。)一个显而易见但是非常重要的几何描述的结论:最大间隔

17、超平面完全被那些离它最近的点司决定。这些司被称为支持向量。9软间隔为了把SVM扩展到非线性可分的情况,我们引入钱链损失函数,max(分工-劭,如果满足(1)的约束条件,换句话说,如果弓在间隔正确的一边,这个函数就为0。对于在错误的一边的数据,该函数的值与离间隔的距离成正比。1n接下来我们希望最小化式子LZmaX(0,1-丫0用-劝)+0,左伉,玛)=exp-xy-xy|2)双曲正切:,Xy)=tanh(xzxj+c),部分0并且CVO内核与式子KErK)=双耳)夕伍)的转换9伉)相关。值0也在转换后的空间中,用Zajyje伉)表示。用进行分类的点积可以再用核技巧来计算分d)=Z%/H芯。92.

18、1.4 计算支持向量机分类器计算(软间隔)支持向量机等同于把下面形式的表达式最小化-max(,l-J.(xi-Z?)+2同-n/=,-J(2)我们重点关注软间隔支持向量机,因为上面提过,如果显著小,那么就可以看做处理线性可分数据的硬间隔支持向量机。下面将先介绍一些经典的解决方法,这些方法是把(2)式降为一个二次规划问题,详细如下:原始方法最小化(2)式可以被写成下面一个可微目标函数的约束优化问题对每个il,我们引入一个变量A=ImX(O,Jy(。芭.一。注意多是满足yi(xi-b)-i的最小非负数。因此我们可以把优化问题写成如下形式:min-+4d2nZ=I其中yi(xi-b)-i并且对WiK

19、O,这就是原始问题。对偶法通过解决上面问题的拉格朗日对偶型,我们得到了简化的问题maxf(ci,.,)=-yici(ij)yicif1=1L1=17=1满足fqy=O并且对所有i,OqJ-,=I2n这被称作对偶问题。因为对偶最大化问题是一个具有线性约束的Cj的二次函数,它可以通过二次规划算法高效地求解。这里,仅当用在正确的一边时Ci=0,并且当吊落在间隔边界上时OVCj(2丸尸。接下来而可以写成支持向量的线性组合。偏移匕可以通过在间隔边界找到一个用并且求解yl(xi-b)=06=分用一M得到。核方法假设现在我们想学习一个非线性分类规则,它对应于一个转换后的数据点8(用)的线性分类规则。此外,我

20、们给出一个满足KE,帚)=*(元)9亿)的核函数2o我们知道在转换空间的分类向量而满足豆=之C:.),#(.),.可以通过解如下优化问题得/=1到:在之q=且对所有-!的条件下,/.12nmax(c1,.,cJ=-这力(夕伉)夕(再)及Cj/=1L1=1j=c*(%,E)S/=1ZI=IJ=I系数q可以使用二次规划求解,就像之前那样。接下来,我们可以找到这样序号i,满足0-,这样E)在转换空间的间隔边界上,接下来解决2nb=(xi)-yi4”以用)夕伉)一X_*=|.=ZqMH%,芯)一片=1_最后,新的点可以通过计算Nsgn(由dN)-)=sgn(Wqy/(用,乞)-b来分类。9现代方法最近

21、的寻找SVM分类器的算法有次梯度下降法和坐标下降法。但处理大型稀疏数据集时这两种技术都被证明比传统方法更有优势。其中次梯度方法在当训练例子很多时尤其有效,而坐标下降法在当特征空间的维数高的时候非常有用。次梯度下降算法SVM的次梯度下降算法由如下表达式为形式运行的:f(,b)=,Xmax(j-yi(coxi-Z?)+4网_nf=l_注意到/是一个5和匕凸函数。因此,可以采用传统的梯度下降法,而不是在函数梯度的方向上采取步骤,可以从函数的次梯度选择的一个向量的方向采取步骤。这种方法对于特定的实施有优势,就是迭代的次数并不是以曾为规模的,是数据点的个数。9坐标下降法SVM的坐标下降算法是从对偶问题中

22、得来的:在S=0并且对所有/,0-的条件下,=2nmaxf(q)=q-空丑XG(xixj)yjcj,i=Li=j=对于每个il,系数q迭代地沿着%的方向调整。然后,生成的系数向量(仇,g)被投射到满足给定约束的最近的系数向量上。(通常用欧式距离。)该过程会一直重复直到得到一个系数最近优化向量。生成的算法在实践中非常快,尽管证明有很少的性能保证。92.1.5经验风险最小化支持向量机属于为统计推断的一个自然类算法,它的许多独特特征是由于钱链损失的行为。上述软间隔支持向量机就是一个较链损失的经验风险最小化的例子。这个观点可以为我们进一步了解支持向量机如何并且怎样工作提供更好的解释,并使我们更好地分析

23、他们的统计学性质。9风险最小化在监督学习中,我们给定一组标签为K),的训练例子X并且希望用给定的XN来预测y向。为了这样做我们形成一个假设/,/(XN)是丁川的一个好的拟合。一个好的拟合通常在损失函数4乂Z)的帮助下定义,该函数说明了作为y的一个拟合z,它的拟合有多差。我们希望选择一个使期望风险最小化的假设:()=E+1,f(Xw+1)J在大多是的情况下,我们不知道X用的联合分布。在这些案例里,一个常见的策略是选择能使经验风险最小化的假设:1(力=用心(xj)。在随机变量X,九的序列的特定假设下,如果考虑的假设集足够小,随着n增大,经验风险的最小化与期望风险的最小化更接近。这种方法就叫做经验风

24、险最小化。正规化和稳定性:为了使最小化问题有一个明确定义的方案,我们必须给考虑的假设集合约束。如果”是一个赋范空间,一个特别有效的技术是考虑仅仅hk的那些假设/。这等同于加了一个正规惩罚R()=4fH,并且解决了新的优化问题=argminC()+R()fwH这种方法叫做吉洪诺夫正则化。更普遍的是,Ror)可以成为假设/的复杂性的测度,所以偏好更简化的假设。2.1.6分类模型的VC维与可学习性VC维在Vapnik-Chervonenkis的理论中,VC维是一个可以被统计学习算法学习的函数空间能力的测度,该能力包含复杂性,表现力、丰富性、灵活性。它定义为算法可以打散的最大点集的基数。如果对于所有这

25、些点的标签的任意分配,存在一个。使得模型/对点集(xrx2乙)的评估没有出错,那么我们说一个参数向量为。的分类模型/可以用来打散一个点集当乙),一个模型的VC维是该模型可以打散的最大样本数。更正式的说,它是最大的基数。,基数为。的点集可以被/打散。8所谓打散我们可以这样理解,假设一个二维空间有3个点,现在要用正负标签给这3个点标号,然后用一条直线把这三个点正确分类。那么如果这三个点共线,并且同一直线上中间的点和两边的点的标签不一样,那么就无法用一条直线来把它们正确分类,那么这二维空间的三个点是不可打散的。依次类推,二维空间中的点大于3的情况也显然是不可打散的,那么二维空间的VC维就是20可学习

26、性对VC维概念的理解使得我们研究可学习性成为了可能,而可学习性决定了我们训练的样本数的大小。一般情况下,学习所需的训练样本数随着VC维的增加而增加,这也是我们避免使用高阶多项式作为分类器的原因。7Iibsvm工具箱1.IBSVM是一个受欢迎的开源机器学习库,是由国立台湾大学开发的,通过C语言的应用程序编程接口用C+写的。LIBSVM实现了面向内核支持向量机的SMO算法,它能支持分类和回归。它的库中的支持向量机学习代码经常在其它开源的机器学习工具箱被应用。对于许多语言比如JAVA,MATLAB,R都与LIBSVM绑定。5在该设计中,我们通过调用它里面的训练和预测函数完成核心功能。2.2 图像分割

27、的定义所谓图像分割,是将某图像的某一或某几个部分分割出来,并且分割出来的部分之间互相不重叠,与未分割出来的部分也不重叠。这个分割不是随意的,它必须根据图像的特点或特征集来分割。一个图像中同一区域的特征(比如灰度、色彩、形状、纹理、密集度)具有某种共性,而不同的区域的这些特征具有个性,区域和区域之间的特点会产生突变。I从集合的角度来说,对于一个理想的分割我们有如下一些结论:2假设把一个图像E分割成n小块区域的一致程度用C表示,C的取值范围设为M对于不同的下标i,j,E=Ck.。这个很好理解。对于不同的下标i,j,eiej=o这个说明了分割后的原图像不同的部位互不相交。对于不同的下标i,j,C(j

28、.)0o表明不同区域的一致程度很低,理想的情况下应该是0,实际上难以做到精度100斩所以现实中一个比较成功的分割两个不同分割区域的并的一致性应该是很低的,无限趋于0。C()lo同一区域的一致程度是非常高的,所以它的C值无限趋于L2.3MATLAB用户图形界面(GUI)2.3.1 人机交互界面用户界面是人和机器或程序交互的物理工具或方法。键盘、鼠标、操作杆、按钮等都可以成为交互的接口。常见的用户操作界面有直接操作界面,比如WindOWS系统,用户可以很容易理解桌面上的应用程序是干什么的,根据固有常识去操作计算机。图形用户界面,这是当今社会应用最广泛的交互方式,比如大量的便携式电子产品(手机、平板

29、、MP4),依赖视觉和手动控制参与操作。目前比较新兴的还有虚拟现实技术,让人有深入其境的感觉,人能够在虚拟现实环境里依靠自己更加自然的、本能的反应操作机器,随着科技的进步,这项技术的应用会越来越广泛。在该设计中,我使用的是图形用户界面来实现人对程序的控制与操作。2.3.2 MATLABGUI图形用户界面(GUl)提供了对应用软件或程序指向和点击控制,这种指向和点击控制减少了学习一门语言或者为了运行应用程序而打字输入指令的需要。MATLAB应用软件自动包含了具有GUI前端的MATLAB程序,这些程序能够用自动化一个任务或计算。这个GUl通常含有控制元件比如菜单、工具条、按钮和滑动条。许多MATL

30、AB产品比如曲线拟合工具包,信号处理工具包、和控制系统工具包有具有自定义用户界面的应用程序O你也可以创建你自己的自定义应用程序以及它们相对应的用户界面给别人使用。52.3.3 MATLABGUIDEGUIDE是MathWorks开发的数学软件MATLABGUI开发环境,它为人提供自定义app设计用户界面的工具。通过使用GUlDE版面编辑器,你可以形象地设计你的用户界面。然后GUIDE会自动产生MATLAB代码来建立这个用户界面,你可以这些被生成的代码对你的应用程序的行为来编程。52.3.4 函数句柄一个函数句柄是一个将关联存储到函数中的一个数据容器。你可以使用一个函数句柄来建立匿名函数或者指定

31、回调函数。你也可以使用一个函数句柄来把一个函数传递到另一个函数中去,或者从主函数外面调用一个本地函数。62.3.5 回调函数当一个图形对象要发生特定的事件时,GUI传递要执行的子函数名到M文件中,该子函数称为回调函数。用户只需要对一些控制元件操作,比如点击某个按钮,控制元件会自动对此操作响应,然后启动其所对应的回调函数。该函数不会主动运行,只有被触发才会执行。6第三章需求分析3.1 需求分析的任务通过对软件(程序)操作者的要求分析,从而了解到软件需要具备的功能,然后将这些需求或功能抽象化,将它们细化为系统功能模块。103.2 程序功能分析D用户读入jpg或rgb格式的图像2)用户使用鼠标操作在

32、读入的图像上选取前景和背景样本点确定训练集3)建立支持向量机进行图像分割4)友好的用户界面3.4 程序功能模块设计根据系统功能的要求,可将系统分解成以下几个功能模块来分别设计:1)读图模块2)选取样本模块3)建立支持向量机进行图像分割模块4)用户界面模块选择图片文件按钮模块(包含读取图像、选取样本功能)输出图形模块(包含建立支持向量机切割以及输出切割后的图像)3.5 程序功能调用图用户图形界面3.6 程序功能设计说明我在设计时先是把前三个模块做出来,形成一个独立的基于支持向量机的能进行真彩色图形图像切割的程序。然后再单独设计用户界面模块,将前三段程序进行部分的修改后,嵌入到GUl对象的函数中,

33、实现其功能。第四章详细设计与软件展示及课题展望4.1详细设计与软件展示4.L1读图模块结构流程图:读入图像文件查看图像大小和类型规定图像显示的窗口的属性显示图像具体实现:将位于某路径下的文件littleduck.jpg用image,read函数读取。用矩阵pic来存放读入的图片,查看矩阵PiC的大小和类型,显示结果如下:NameSizeBytesClassAttributespic439x600x3790200 Uint8结果说明:读入的图像数据PiC是一个439行、600歹I、3页的三维矩阵,数据类型为8位无符号整形。接下来规定图像显示的窗口的属性,然后将读入的图形在窗口中显示出来。4.1.

34、2选取样本模块实现目标:本模块要实现合理选取背景和前景样本点确定训练集,选取样本阶段是关键的一个环节,因为样本的好坏决定了你分类的效果。结构流程图:样本集初始化对话框具体实现:使用MATLAB中的ginput函数来提取前景和背景样本点作为训练的样本,实现过程如下:用zeros函数生成两个20*3零矩阵TrainData_background和TrainData_fOreground分别表示背景图像样本集和前景图像样本集。这两个矩阵存放的数值类型是double型。接下来实施背景采样,先用msgbox函数创建一个对话框,执行到该步骤时该对话框会自动弹出,告诉你在背景区域采集20个背景样本点,点击O

35、K后按任意键继续。对话框结束后,用PaUSe语句来实现一个暂停功能,按任意键后执行下面的程序。%使用ginput函数,这样可以用光标在屏幕上输入,构建循环输入。forrun=1:20fy=ginput(1);holdon;plot(x,y,r*,);%将鼠标输入的点的坐标转换成uint8格式X=uint8(x);y=uint8(y);%存放图像信息的矩阵是三维的,三个维度分别表示分辨率红、黄、蓝三原色的数值大小TrainData_background(run,1)=pic(xzy,1);TrainData_background(run,2)=pic(x,y,2);TrainData_backg

36、round(run,3)=pic(x,y,3);End1需要说明的是,选取训练点时有一个需要注意的地方,应该选取有代表性的点作为训练点,拿此列来说,比如选取鸭子眼睛或鸭子边缘部位的点作为样本点。最初选取的训练点可能导致图片分割不是很完美,例如鸭子后面溅起的水花被分割成鸭子区域,这时候可以对错分的水花区域添加一两个典型到湖面区域,一般尝试几次后就可以将鸭子图像从整个图像中分割出来了。前景采样阶段也遵循上面的步骤。运行结果:前景采样开始阶段文件(E),蚓MKy)插入O)TJlCDJOO(Q)Qtt)3(tD二U,Q入门3口因Q背景和前景的样本点都选取完毕后的图像对样本组进行情测分类前后图像对 比处

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

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

39、;将标签组,训练数据组、建立的模型用SVmPrediCt函数预测,其中训练数据得转换成double型,代码如下:PreTrainLabel=svmpredict(TrainLabel,double(TrainData),model);预测结果如下:optimizationfinished,#iter=23536nu=0.873432obj=-34.914147,rho=-3.345745nSV=37,nBSV=33TotalnSV=37Accuracy=57.5%(23/40)(classification)预测精度不高。求三维矩阵PiC的行数m,列数n,页数k。用reshape函数将三维矩阵

40、PiC转成mx行,k列的双精度二维矩阵,用TeStData矩阵来表示转换后的pic。查看矩阵TestData的大小和类型,预测前景和背景标签TestLabal=Svmpredict(zeros(length(TestData)z1),TestData,model);预测结果如下:NameSizeBytesClassAttributesTestData263400x36321600doubleAccuracy=88.6393%(233476/263400)(classification)下面进入展示分割后的图像阶段:首先根据预测得到的前景和背景标签转换成三维矩阵形式从而对整个图像的像素点进行分类

41、,进而达到图像分割的目的。用变量ind来表示:将变量ind的数值型数据转换成逻辑型数据,我们引入一个新变量pic_seg来存储图像矩阵Pic,将PijSeg矩阵逻辑值为0的点都赋值为0,就达到分割的要求了,代码如下:ind=logical(ind);pic_seg=pic;PijSeg(ind)=0;1然后设置窗口属性,展示分割后的图像结果显不:XFigUre2I,8J分割后的图像用sublot函数在图形窗口输出分割前后的图像,达到对比的目的。结果展示:分割前后对比图结果说明:前景鸭子图像已经分割出来了,虽然不是十分完美,但是效果已经比较令人满意了。当然,对特征点的选取是影响支持向量机分割效果

42、的关键因素。我如果取点的时候更加注意一点可能会获得更完美的图像。4.L4用户界面模块设计目标:前面三个模块已经是该设计的核心了,但是为了更好地操作该程序,需要一个用户界面。该模块就是为了能够使用按钮操作,自由地选择图片然后在图片上取点,执行切割功能,展示切割后的图片。理想的目标是读入任何真彩色图片都能达到令人满意的切割效果。程序功能调用图:用户图形界面“选择图片”按钮回调函数“转换”按钮回调困数建立支持向量机进行图 像切割模块具体实现:我使用MATLAB的GUIDE建立GUI。我需要使用GUIDE完成两项工作,第一是进行图形页面布局,第二是进行GUl编程。实际上,只需要把之前写的代码略加修改嵌

43、入到两个按钮对应的回调函数中就可以实现了。在命令行窗口输入guide,启动GUlDE。选择BIankGUI(default)0进入GUI编辑界面,GUI编辑界面主要包括GUI对象选择区、GUI工具栏、GUI布局区。选择一个EditTeXt对象,两个AXeS对象、两个PUShBUttOn对象。在.fig文件中对GUI对象属性进行设置和布局。结果展示:编写回调函数阶段:编写“选择图片”按钮的回调函数:设置全局变量TrainData_background,TrainData_foreground,imgdata用下面的代码实现读入任何选择的路径的功能:ImgfilenameImgpathnameJ=

44、Uigetfile(*.jpg;*.png),选择图片);ifiIngfilenameimgdata=imread(imgpathname,imgfiIename);将读入的图片用imgdata来保存。在第一个坐标轴方框中显示出来,将文件名变量保存到handles结构体中handles,imgfiIename中。将imgdata保存到handles结构体中,这样imgdata就成了全局变量,可以在回调函数间被传递。下面的步骤就是选取样本阶段的代码,只需要将pic替换为imgdata0用guidata(hbject,handles)更新handles结构体,该阶段结束。16结果展示:编写转换按钮的回调函数:将TrainData_backgroundTrainData_foregroundimgdata设置全局为变量对文件名变量进行判断是否非空,以确保文件已经读入。if*isempty(handles.Im

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号