现在的位置: 首页 > 综合 > 正文

OpenCV–支持向量机使用(一)

2014年01月03日 ⁄ 综合 ⁄ 共 1375字 ⁄ 字号 评论关闭

 

1.原理及基础理论(以最直白的方法简述)


支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出

许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题。
对于SVM,有几个重要的概念和基础理论,在使用它之前,一定要弄清楚:
支持向量:用线性可分的情况来加以说明就是那些把可分区域区分开来的点向量,不仅仅这么简单,这些点向量分布在可分区域的边缘,
把所有的样本区分开来。同时,不同区域的这些点向量之间的距离,几何间隔决定了区分误差。几何间隔越大,误差越小,精度越高。训练的
目的即是获得这些点向量,它们使得不同样本区域的几何间隔最大化。这些样本点,即是我们真正需要的样本点,叫做支持(撑)向量。

核函数:“可分?还是不可分?——支持向量机。”当处理非线性、高维问题时,简单的线性分类的方法已经无法满足要求。核函数,即是

用来使样本线性可分的变化函数。它使得样本空间向高维空间映射,趋向于线性可分。

举个简单的例子,一个二维空间中的一条直线,只有一段连续部分属于A类,其余属于B,那么一条简单的直线无法做到分别它们,但是如果

给出一条抛物线,问题就解决了。

使用支持向量机来解决问题过程,以本人通俗的大闹,通俗的这么理解:首先,对你的目标提取合适的具有较高可分度的参数;其次,对目

标提取这些参数,构成一个涵盖所有目标各个类别的合适大小的样本空间;再次,选择合适的核函数,训练,获得支持向量;最后,用这些获得

的支持向量预测,做你想做的事情。至于效果,暂且不论。

 

2.可直接体验的支持向量机(libsvm)


libsvm是台湾的林智仁教授开发的一套支持向量机库。最新的版本已经到达libsvm3.0,大家可以百度“libsvm”。相信大多数人已经有

了这个函数库,再次不再多叙述。如果是第一次使用,记得搜索它的使用方法。CSDN里就有很多牛人写过这方面的东西,包括源程序的构架

分析及注释等。

这里只是想讨论下OpenCV里的支持向量机,下面开始正题咯,啰嗦了这么久。

 

3.OpenCV--SVM(傻瓜操作)


首先,据广大的机器视觉爱好者的介绍,OpenCV机器视觉库里头的SVM,其实现方法来源于libsvm。libsvm库里头有可以直接使用的放缩、训练、预测、参数优选等工具(很强大,本文的后续文章将会讲到,使用它来帮助你优选参数等)。但是,libsvm源程序实现方法还是用了C++,本人愚钝,只会C语言,没有冲动和欲望来研究这段代码。为了使用C语言在OpenCV里头调用函数,就可以使用支持向量机,于是就有了大家眼前的这篇文章...

配置环境及准备工作:

  • OpenCV2.0及以上版本;
  • 在开发环境CodeBlocks/VC/VC++ visual studio中配置好链接路径和搜索路径(具体方法:http://www.opencv.org.cn/index.php/Template:Install 来源于OpenCV 中文论坛);
  • libsvm库;
  • 与libsvm相关的需要下载python,和gnuplot(绘图工具,优选参数用到);

 

准备好这些之后,可以先让你的OpenCV程序跑起来,确保配置正确。下面一节将叙述一段网上流传的OpenCV-svm代码(C语言)。

 

 

 

 

 

 

 

 

 

 

 


抱歉!评论已关闭.