百当下载:绿色免费软件下载站! 软件分类|软件专题|安卓下载|资讯教程

您当前所在位置:首页 > 软件分类 > 编程开发 > 编程工具 > OpenCV SVM训练分类器 v3.4.1官方版

OpenCV SVM训练分类器v3.4.1官方版

计算机视觉库开发工具

  • 软件大小:289.62MB
  • 软件语言:简体中文
  • 软件类型:国产软件
  • 软件授权:免费版
  • 更新时间:2018-05-01 12:21:47
  • 软件类别:编程工具
  • 软件官网:
  • 应用平台:xp/win7/win8/win10
软件星级

软件介绍其它版本相关专题相关文章网友评论下载地址

OpenCV是一款视觉库开发工具,OpenCV 3使您能够将您的智能手机摄像头成为一个先进的摄影和计算机视觉工具。用于分析和转换大量的图像数据,甚至在实时和移动设备上。允许开发人员理解计算机视觉原理,并根据他们的需要快速扩展或定制项目。

OpenCV

软件特色

高动态范围成像

如今大多数数字图像和成像装置使用每通道8位,因此将装置的动态范围限制为两个数量级(实际上256个级别),而人眼可适应变化十个数量级的照明条件。当我们拍摄真实世界场景的照片时,明亮区域可能曝光过度,而暗区域可能曝光不足,因此我们无法使用单次曝光拍摄所有细节。HDR成像适用于每通道使用多达8位(通常为32位浮点值)的图像,允许更宽的动态范围

iOS应用程序开发与OpenCV 3使您能够将您的智能手机摄像头成为一个先进的摄影和计算机视觉工具。使用高度优化的OpenCV库,您将实时处理高分辨率图像。您将定位和分类对象,并创建其几何的模型。在开发照片和增强现实应用程序时,您将大致了解iOS框架和开发人员工具,以及对相机和图像API的更深入了解。

OpenCV 3.0计算机视觉与Java是一个实用的教程指南,解释计算机视觉的基本任务,同时专注于Java开发。本书将教你如何设置OpenCV for Java和使用图像处理的基本操作(如过滤和图像转换)处理矩阵。它还将帮助您学习如何使用哈尔级联跟踪面部,并检测前景和背景区域与Kinect设备的帮助。它甚至会给你洞察服务器端OpenCV。每章都有几个准备使用的项目。这些项目的功能可以在许多类中找到,这些类允许开发人员理解计算机视觉原理,并根据他们的需要快速扩展或定制项目。

OpenCV是一个着名的计算机视觉库,用于分析和转换大量的图像数据,甚至在实时和移动设备上。

本书重点介绍利用移动平台构建交互式和有用的应用程序。本书首先介绍OpenCV和Android,以及它们如何使用OpenCV的Java API进行交互。在了解如何构建更复杂的应用程序(如对象检测,图像拼接和面部检测)之前,您还将发现基本的图像处理技术,例如图像的侵蚀和扩张。随着您的进步,您将被介绍到OpenCV的机器学习框架,使您能够使您的应用程序更聪明。

这本书结束了一个简短的章节,涵盖了有用的Android提示和技巧,以及一些人们在构建应用程序时可能面临的常见错误和解决方案。到本书结束时,读者将获得更多的专业知识,为Android平台构建自己的OpenCV项目,并将OpenCV应用程序编程集成到现有项目中。

功能特点

使用受欢迎的Swing GUI窗口小部件工具包,为面板,滚动窗格,单选按钮,滑块,窗口和鼠标交互创建功能强大的GUI

拉伸,收缩,扭曲和旋转图像,以及应用图像变换来找到边缘,线和圆,甚至使用离散傅里叶变换(DFT)

检测前景或背景区域,并使用Kinect设备处理深度图像

了解如何将计算机视觉功能添加到坚实的Java Web应用程序中,从而允许您上传照片并创建惊人的效果

跟踪面孔并应用混合现实效果,如向上传的照片添加虚拟帽子

过滤噪声图像,使用形态运算符,使用洪水填充和阈值图像的重要区域

打开和处理来自网络摄像头或视频文件的视频流

Opencv中SVM样本训练、归类流程及实现

支持向量机(SVM)中最核心的是什么?个人理解就是前4个字——“支持向量”,一旦在两类或多累样本集中定位到某些特定的点作为支持向量,就可以依据这些支持向量计算出来分类超平面,再依据超平面对类别进行归类划分就是水到渠成的事了。有必要回顾一下什么是支持向量机中的支持向量。

OpenCV

上图中需要对红色和蓝色的两类训练样本进行区分,实现绿线是决策面(超平面),最靠近决策面的2个实心红色样本和1个实心蓝色样本分别是两类训练样本的支持向量,决策面所在的位置是使得两类支持向量与决策面之间的间隔都达到最大时决策面所处的位置。一般情况下,训练样本都会存在噪声,这就导致其中一类样本的一个或多个样本跑到了决策面的另一边,掺杂到另一类样本中。针对这种情况,SVM加入了松弛变量(惩罚变量)来应对,确保这些噪声样本不会被作为支持向量,而不管它们离超平面的距离有多近。包括SVM中的另一个重要概念“核函数”,也是为训练样本支持向量的确定提供支持的。

1. 获取训练样本

SVM是一种有监督的学习分类方法,所以对于给出的训练样本,要明确每个样本的归类是0还是1,即每个样本都需要标注一个确切的类别标签,提供给SVM训练使用。对于样本的特征,以及特征的维度,SVM并没有限定,可以使用如Haar、角点、Sift、Surf、直方图等各种特征作为训练样本的表述参与SVM的训练。Opencv要求训练数据存储在float类型的Mat结构中。最简单的情况下,假定有两类训练样本,样本的维度是二维,每类包含3个样本,可以定义如下:

[cpp] view plain copyfloat labels[4] = {1.0, -1.0, -1.0, -1.0}; //样本数据

Mat labelsMat(3, 1, CV_32FC1, labels); //样本标签

float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} }; //Mat结构特征数据

Mat trainingDataMat(3, 2, CV_32FC1, trainingData); //Mat结构标签

2. 设置SVM参数

Opencv中SVM的参数设置在CvSVMParams类中,常用的设置包括SVM的类型,核函数类型和算法的终止条件,松弛变量等。可以按如下设置:

[cpp] view plain copyCvSVMParams params;

params.svm_type = CvSVM::C_SVC;

params.kernel_type = CvSVM::LINEAR;

params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);

CVSVM::C_SVC类型是SVM中最常被用到的类型,它的重要特征是可以处理非完美分类的问题(即训练数据不可以被线性分割),包括线性可分割和不可分割。

核函数的目的是为了将训练样本映射到更有利于线性分割的样本集中。映射的结果是增加了样本向量的维度。这一过程通过核函数来完成。若设置核函数的类型是CvSVM::LINEAR表示不需要进行高维空间映射。

算法终止条件,SVM训练的过程是一个通过迭代方式解决约束条件下的二次优化问题,可以设定一个最大迭代次数和容许误差的组合,以允许算法在适当的条件下停止计算。

3. 训练支持向量

通过Opencv中的CvSVM::train函数对训练样本进行训练,并建立SVM模型。

[cpp] view plain copyCvSVM SVM;

SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);

4. 不同训练样本区域分割

函数CvSVM::predict可以运用之前建立的支持向量机的模型来判断测试样本空间中样本所属的类别,一种比较直观的方式是对不同类别样本所在的空间进行涂色,如下代码把两类样本空间分别图上绿色和蓝色,以示区分:

[cpp] view plain copyVec3b green(0,255,0), blue (255,0,0);

// Show the decision regions given by the SVM

for (int i = 0; i < image.rows; ++i)

for (int j = 0; j < image.cols; ++j)

{

Mat sampleMat = (Mat_(1,2) << i,j);

float response = SVM.predict(sampleMat);

if (response == 1)

image.at(j, i) = green;

else if (response == -1)

image.at(j, i) = blue;

}

样本区域分割效果,蓝色和绿色区域代表不同的样本空间,两者交界处就是分类超平面位置:

OpenCV

5. 绘制支持向量

函数SVM.get_support_vector_count 可以获取到支持向量的数量信息,函数SVM.get_support_vector根据输入支持向量的索引号来获取指定位置的支持向量,如下代码获取支持向量的数量,并在样本空间中用红色小圆圈逐个标识出来:

[cpp] view plain copythickness = 2;

lineType = 8;

int c = SVM.get_support_vector_count();

for (int i = 0; i < c; ++i)

{

const float* v = SVM.get_support_vector(i);

circle( image, Point( (int) v[0], (int) v[1]), 6, Scalar(0, 0, 255), thickness, lineType);

}

OpenCV

以上就是OpenCV中SVM样本训练以及归类的详细流程,无论是线性可分割还是线性不可分割都可以按照这5个基本步骤进行。

其他版本下载

相关文章

下载地址

  • OpenCV SVM训练分类器v3.4.1官方版

网友评论