OpenCV机器学习SVM支持向量机的分类程序.docx_第1页
OpenCV机器学习SVM支持向量机的分类程序.docx_第2页
OpenCV机器学习SVM支持向量机的分类程序.docx_第3页
OpenCV机器学习SVM支持向量机的分类程序.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. /利用SVM解决2维空间向量的3级分类问题 2. 3. #includestdafx.h 4. 5. #includecv.h 6. #includehighgui.h 7. 8. #include 9. #include 10. 11. #include 12. 13. #include 14. usingnamespacestd;15. 16. intmain(intargc,char*argv)17. 18. intsize=400;/图像的长度和宽度 19. constints=100;/试验点个数(可更改!) 20. inti,j,sv_num;21. IplImage*img;22. CvSVMsvm=CvSVM();/ 23. CvSVMParamsparam;24. CvTermCriteriacriteria;/停止迭代的标准 25. CvRNGrng=cvRNG(time(NULL);26. CvPointptss;/定义1000个点 27. floatdatas*2;/点的坐标 28. intress;/点的所属类 29. CvMatdata_mat,res_mat;30. CvScalarrcolor;31. constfloat*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;i50*cos(ptsi.x*CV_PI/100)+200)42. cvLine(img,cvPoint(ptsi.x-2,ptsi.y-2),cvPoint(ptsi.x+2,ptsi.y+2),CV_RGB(255,0,0);43. cvLine(img,cvPoint(ptsi.x+2,ptsi.y-2),cvPoint(ptsi.x-2,ptsi.y+2),CV_RGB(255,0,0);44. resi=1;45. 46. else47. if(ptsi.x200)48. cvLine(img,cvPoint(ptsi.x-2,ptsi.y-2),cvPoint(ptsi.x+2,ptsi.y+2),CV_RGB(0,255,0);49. cvLine(img,cvPoint(ptsi.x+2,ptsi.y-2),cvPoint(ptsi.x-2,ptsi.y+2),CV_RGB(0,255,0);50. resi=2;51. 52. else53. cvLine(img,cvPoint(ptsi.x-2,ptsi.y-2),cvPoint(ptsi.x+2,ptsi.y+2),CV_RGB(0,0,255);54. cvLine(img,cvPoint(ptsi.x+2,ptsi.y-2),cvPoint(ptsi.x-2,ptsi.y+2),CV_RGB(0,0,255);55. resi=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;is;i+)68. datai*2=float(ptsi.x)/size;69. datai*2+1=float(ptsi.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_SVC77. Kernel的种类:CvSVM:RBF78. degree:10.0(此次不使用)79. gamma:8.080. coef0:1.0(此次不使用)81. C:10.082. nu:0.5(此次不使用)83. p:0.1(此次不使用)84. 然后对训练数据正规化处理,并放在CvMat型的数组里。85. */86. 87. 88. /(5)SVM学习 89. svm.train(&data_mat,&res_mat,NULL,NULL,param);/ 90. /利用训练数据和确定的学习参数,进行SVM学习 91. 92. /(6)学习结果的绘图 93. for(i=0;isize;i+)94. for(j=0;jsize;j+)95. CvMatm;96. floatret=0.0;97. floata=float(j)/size,float(i)/size;98. cvInitMatHeader(&m,1,2,CV_32FC1,a);99. ret=svm.predict(&m);100. switch(int)ret)101. case1:102. rcolor=CV_RGB(100,0,0);103. break;104. case2:105. rcolor=CV_RGB(0,100,0);106. break;107. case3: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;is;i+)118. CvScalarrcolor;119. switch(resi)120. case1:121. rcolor=CV_RGB(255,0,0);122. break;123. case2:124. rcolor=CV_RGB(0,255,0);125. break;126. case3:127. rcolor=CV_RGB(0,0,255);128. break;129. 130. cvLine(img,cvPoint(ptsi.x-2,ptsi.y-2),cvPoint(ptsi.x+2,ptsi.y+2),rcolor);131. cvLine(img,cvPoint(ptsi.x+2,ptsi.y-2),cvPoint(ptsi.x-2,ptsi.y+2),rcolor);132. 133. /将训练数据在结果图像上重复的绘制出来。 134. 135. /(8)支持向量的绘制 136. sv_num=svm.get_support_vector_count();137. for(i=0;isv_num;i+)138. support=svm.get_support_vector(i);139. cvCircle(img,cvPoint(int)(support0*size),(int)(support1*size),5,CV_RGB(200,200,200);140. 141. /用白色的圆圈对支持向量作标记。 142. 143. /(9)图像的显示 144. cvNamedWin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论