OpenCV机器学习SVM支持向量机的分类程序

1. //利用SVM解决2维空间向量的3级分类问题   
2.    
3. #include "stdafx.h"   
4.    
5. 产品诉求#include "cv.h"   
6. #include "highgui.h"   
7.    
8. #include <ML.H>   
9. #include <TIME.H>   
10.    
11. #include <CTYPE.H>   
12.    
13. #include <IOSTREAM>   
14. using namespace std;   
15.    
16. int main(int argc, char **argv)   
17. {   
18.     int size = 400;         //图像的长度和宽度   
19.     const int s = 100;          //试验点个数(可更改!!)   
20.     int i, j, sv_num;   
21.     IplImage *img;   
22.     CvSVM svm = CvSVM();    //★★★   
23.     CvSVMParams param;   
24.     CvTermCriteria criteria;//停止迭代的标准   
25.     CvRNG rng = cvRNG(time(NULL));   
26.     CvPoint pts[s];         //定义1000个点   
27.     float data[s*2];        //点的坐标   
28.     int res[s];             //点的所属类   
29. 刘天华简介    CvMat data_mat, res_mat;   
30.     CvScalar rcolor;   
31.     const float *support;   
32.     // (1)图像区域的确保和初始化   
33.     img= cvCreateImage(cvSize(size, size), IPL_DEPTH_8U, 3);   
34.     cvZero(img);   石岛实验小学
35.     //确保画像区域,并清0(用黑作初始化处理)。   
36.    
37.     // (2)学习数据的生成   
38.     for (i= 0; i< s; i++) {   
39.         pts[i].x= cvRandInt(&rng) % size;   //用随机整数赋值   
40.         pts[i].y= cvRandInt(&rng) % size;   
41.         if (pts[i].y> 50 * cos(pts[i].x* CV_PI/ 100) + 200) {   
42.             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));   
43.             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));   
44.             res[i] = 1;   
45.         }   
46.         else {   
47.             if (pts[i].x> 200) {   
48.                 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));   
49.                 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));   
50.                 res[i] = 2;   
51.             }   
52.             else {   
53.                 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));   
54.                 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));   注塑机螺杆的选择
55.                 res[i] = 3;   
56.             }   
57.         }   
58.     }   
59.     //生成2维随机训练数据,并将其值放在CvPoint数据类型的数组pts[ ]中。   
60.    
61.     // (3)学习数据的显示   
62.     cvNamedWindow("SVM", CV_WINDOW_AUTOSIZE);   
63.     cvShowImage("SVM", img);   
64.     cvWaitKey(0);   
65.    
66.     // (4)学习参数的生成   
67.     for (i= 0; i< s; i++) {   
68.         data[i* 2] = float (pts[i].x) / size;   
69.         data[i* 2 + 1] = float (pts[i].y) / size;   
70.     }   
71.     cvInitMatHeader(&data_mat, s, 2, CV_32FC1, data);   
72.     cvInitMatHeader(&res_mat, s, 1, CV_32SC1, res);   
73.     criteria= cvTermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON);   
74.     param= CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1, NULL, criteria);   黎祥
75.     /*  
76.         SVM种类:CvSVM::C_SVC  
77.         Kernel的种类:CvSVM::RBF  
78.         degree:10.0(此次不使用)  
79.         gamma:8.0  
80.         coef0:1.0(此次不使用)  
81.         C:10.0  
82.         nu:0.5(此次不使用)  
83.         p:0.1(此次不使用) 延胡索酸 
84.         然后对训练数据正规化处理,并放在CvMat型的数组里。  
85.                                                             */   
86.    
87.    
88.     //☆☆☆☆☆☆☆☆☆(5)SVM学习☆☆☆☆☆☆☆☆☆☆☆☆   
89.     ain(&data_mat, &res_mat, NULL, NULL, param);//   
90.     //☆☆利用训练数据和确定的学习参数,进行SVM学习☆☆☆☆       
91.    
92.     // (6)学习结果的绘图   
93.     for (i= 0; i< size; i++) {   
94.         for (j= 0; j< size; j++) {   
95.             CvMat m;   
96.             float ret = 0.0;   
97.             float a[] = { float (j) / size, float (i) / size };   
98.             cvInitMatHeader(&m, 1, 2, CV_32FC1, a);   
99.             ret= svm.predict(&m);   
100.             switch ((int) ret) {   
101.                 case 1:   
102.                     rcolor= CV_RGB(100, 0, 0);   
103.                     break;   
104.                 case 2:   
105.                     rcolor= CV_RGB(0, 100, 0);   
106.                     break;   
107.                 case 3:   
108.                     rcolor= CV_RGB(0, 0, 100);   
109.                     break;   
110.             }   
111.             cvSet2D(img, i, j, rcolor);   
112.         }   
113.     }   
114.     //为了显示学习结果,通过输入图像区域的所有像素(特征向量)并进行分类。然后对输入像素用所属等级的颜绘图。   
115.    
116.     // (7)训练数据的再绘制   
117.     for (i= 0; i< s; i++) {   
118.         CvScalar rcolor;   
119.         switch (res[i]) {   
120.             case 1:   
121.                 rcolor= CV_RGB(255, 0, 0);   
122.                 break;   
123.             case 2:   

本文发布于:2024-09-22 03:39:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/569957.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:学习   数据   图像
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议