最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

利用SVM解決2維空間向量的3級分類問題

來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 15:29:22
文檔

利用SVM解決2維空間向量的3級分類問題

利用SVM解決2維空間向量的3級分類問題:【原文:http://blog.csdn.net/firefight/article/details/6400060】 為了學習OPENCV SVM分類器, 參考網(wǎng)上的 利用SVM解決2維空間向量的分類問題 實現(xiàn)并改為C代碼,僅供參考 環(huán)境:OPENCV2.2 VS2008 步驟: 1,生成隨機的點,并按一定的空
推薦度:
導讀利用SVM解決2維空間向量的3級分類問題:【原文:http://blog.csdn.net/firefight/article/details/6400060】 為了學習OPENCV SVM分類器, 參考網(wǎng)上的 利用SVM解決2維空間向量的分類問題 實現(xiàn)并改為C代碼,僅供參考 環(huán)境:OPENCV2.2 VS2008 步驟: 1,生成隨機的點,并按一定的空

【原文:http://blog.csdn.net/firefight/article/details/6400060】 為了學習OPENCV SVM分類器, 參考網(wǎng)上的 利用SVM解決2維空間向量的分類問題 實現(xiàn)并改為C代碼,僅供參考 環(huán)境:OPENCV2.2 VS2008 步驟: 1,生成隨機的點,并按一定的空間分布將其歸類 2,

【原文:http://blog.csdn.net/firefight/article/details/6400060】

為了學習OPENCV SVM分類器, 參考網(wǎng)上的"利用SVM解決2維空間向量的分類問題"實現(xiàn)并改為C++代碼,僅供參考

環(huán)境:OPENCV2.2 + VS2008

步驟:
1,生成隨機的點,并按一定的空間分布將其歸類
2,創(chuàng)建SVM并利用隨機點樣本進行訓練
3,將整個空間按SVM分類結(jié)果進行劃分,并顯示支持向量

[cpp] view plaincopy

  1. #include "stdafx.h"
  2. #include
  3. void drawCross(Mat &img, Point center, Scalar color)
  4. {
  5. int col = center.x > 2 ? center.x : 2;
  6. int row = center.y> 2 ? center.y : 2;
  7. line(img, Point(col -2, row - 2), Point(col + 2, row + 2), color);
  8. line(img, Point(col + 2, row - 2), Point(col - 2, row + 2), color);
  9. }
  10. int newSvmTest(int rows, int cols, int testCount)
  11. {
  12. if(testCount > rows * cols)
  13. return 0;
  14. Mat img = Mat::zeros(rows, cols, CV_8UC3);
  15. Mat testPoint = Mat::zeros(rows, cols, CV_8UC1);
  16. Mat data = Mat::zeros(testCount, 2, CV_32FC1);
  17. Mat res = Mat::zeros(testCount, 1, CV_32SC1);
  18. //Create random test points
  19. for (int i= 0; i< testCount; i++)
  20. {
  21. int row = rand() % rows;
  22. int col = rand() % cols;
  23. if(testPoint.at(row, col) == 0)
  24. {
  25. testPoint.at(row, col) = 1;
  26. data.at(i, 0) = float (col) / cols;
  27. data.at(i, 1) = float (row) / rows;
  28. }
  29. else
  30. {
  31. i--;
  32. continue;
  33. }
  34. if (row > ( 50 * cos(col * CV_PI/ 100) + 200) )
  35. {
  36. drawCross(img, Point(col, row), CV_RGB(255, 0, 0));
  37. res.at(i, 0) = 1;
  38. }
  39. else
  40. {
  41. if (col > 200)
  42. {
  43. drawCross(img, Point(col, row), CV_RGB(0, 255, 0));
  44. res.at(i, 0) = 2;
  45. }
  46. else
  47. {
  48. drawCross(img, Point(col, row), CV_RGB(0, 0, 255));
  49. res.at(i, 0) = 3;
  50. }
  51. }
  52. }
  53. //Show test points
  54. imshow("dst", img);
  55. waitKey(0);
  56. /////////////START SVM TRAINNING//////////////////
  57. CvSVM svm = CvSVM();
  58. CvSVMParams param;
  59. CvTermCriteria criteria;
  60. criteria= cvTermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
  61. /* SVM種類:CvSVM::C_SVC
    Kernel的種類:CvSVM::RBF
    degree:10.0(此次不使用)
    gamma:8.0
    coef0:1.0(此次不使用)
    C:10.0
    nu:0.5(此次不使用)
    p:0.1(此次不使用)
    然后對訓練數(shù)據(jù)正規(guī)化處理,并放在CvMat型的數(shù)組里。*/
  62. param= CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1, NULL, criteria);
  63. svm.train(data, res, Mat(), Mat(), param);
  64. for (int i= 0; i< rows; i++)
  65. {
  66. for (int j= 0; j< cols; j++)
  67. {
  68. Mat m = Mat::zeros(1, 2, CV_32FC1);
  69. m.at(0,0) = float (j) / cols;
  70. m.at(0,1) = float (i) / rows;
  71. float ret = 0.0;
  72. ret = svm.predict(m);
  73. Scalar rcolor;
  74. switch ((int) ret)
  75. {
  76. case 1: rcolor= CV_RGB(100, 0, 0); break;
  77. case 2: rcolor= CV_RGB(0, 100, 0); break;
  78. case 3: rcolor= CV_RGB(0, 0, 100); break;
  79. }
  80. line(img, Point(j,i), Point(j,i), rcolor);
  81. }
  82. }
  83. imshow("dst", img);
  84. waitKey(0);
  85. //Show support vectors
  86. int sv_num= svm.get_support_vector_count();
  87. for (int i= 0; i< sv_num; i++)
  88. {
  89. const float* support = svm.get_support_vector(i);
  90. circle(img, Point((int) (support[0] * cols), (int) (support[1] * rows)), 5, CV_RGB(200, 200, 200));
  91. }
  92. imshow("dst", img);
  93. waitKey(0);
  94. return 0;
  95. }
  96. int main(int argc, char** argv)
  97. {
  98. return newSvmTest(400, 600, 100);
  99. }

學習樣本:

分類:

支持向量:

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

利用SVM解決2維空間向量的3級分類問題

利用SVM解決2維空間向量的3級分類問題:【原文:http://blog.csdn.net/firefight/article/details/6400060】 為了學習OPENCV SVM分類器, 參考網(wǎng)上的 利用SVM解決2維空間向量的分類問題 實現(xiàn)并改為C代碼,僅供參考 環(huán)境:OPENCV2.2 VS2008 步驟: 1,生成隨機的點,并按一定的空
推薦度:
標簽: 空間 利用 分類
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top