文档详情

SVM处理问题实例讲解.pdf

发布:2017-05-19约1.04万字共8页下载文档
文本预览下载声明
第一个 支持向量机(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
显示全部
相似文档