SVM处理问题实例讲解.pdf
文本预览下载声明
第一个 支持向量机(Support Vector Machine) CvSVM
利用SVM 解决2维空间向量的3级分类问题
#include cv.h
#include highgui.h
#include ml.h
#include time.h
int main(int argc, char **argv)
{
int size= 400; // 图像的长度和宽度
int s= 1000;
int i, j , sv_num;
IplImage *img;
CvSVM svm= CvSVM ();
CvSVMParams param;
CvTermCriteria criteria; //停止迭代的标准
CvRNG rng= cvRNG(time(NULL));
CvPoint pts[s]; //定义1000个点
float data[s* 2];
int res[s];
CvMat data_mat, res_mat;
CvScalar rcolor;
const float *support;
// (1) 图像区域的确保和初始化
img= cvCreateImage(cvSize(size, size), IPL_DEPTH_8U, 3);
cvZero(img);
// (1) 图像区域的确保和初始化
确保画像区域,并清0(用黑色作初始化处理) 。
// (2)学习数据的生成
for (i= 0; i s; i++) {
pts[i].x= cvRandInt(rng) % size; //用随机整数赋值
pts[i].y= cvRandInt(rng) % size;
if (pts[i].y 50 * cos(pts [i].x* CV_PI/ 100) + 200) {
cvLine(img, cvPoint(pts[i].x- 2, pts[i].y- 2), cvPoint(pts[i].x+ 2, pts[i].y+ 2), CV_RGB(255, 0,
0));
cvLine(img, cvPoint(pts[i].x+ 2, pts[i].y- 2), cvPoint(pts[i].x- 2, pts[i].y+ 2), CV_RGB(255, 0,
0));
res[i] = 1;
}
else {
if (pts[i].x 200) {
cvLine(img, cvPoint(pts[i].x- 2, pts[i].y- 2), cvPoint(pts[i].x+ 2, pts[i].y+ 2), CV_RGB(0,
255, 0));
cvLine(img, cvPoint(pts[i].x+ 2, pts[i].y- 2), cvPoint(pts[i].x- 2, pts[i].y+ 2), CV_RGB(0,
255, 0));
res[i] = 2;
}
else {
cvLine(img, cvPoint(pts[i].x- 2, pts[i].y- 2), cvPoint(pts[i].x+ 2, pts[i].y+ 2), CV_RGB(0, 0,
255));
cvLine(img, cvPoint(pts[i].x+ 2, pts[i].y- 2), cvPoint(pts[i].x- 2, pts[i].y+ 2), CV_RGB(0, 0,
255));
res[i] = 3;
}
}
}
// (2)训练数据的生成
生成2维随机训练数据,并将其值放在CvPoint 数据类型的数组pts[ ] 中。
// (3)学习数据的显示
cvNamedWindow(SVM, CV_WINDOW_AUTOSIZE);
cvShowImage(SVM, img);
cvWaitKey(0);
将生成的数据绘制在起初确保的图像区域里,并显示出来。如图1-3,用红,绿,蓝各色标记的
那样,直到等到某个键被按下。
// (4)学习参数的生成
for (i= 0; i s; i++) {
data[i* 2
显示全部