[問題] opencv KNN分類器

看板C_and_CPP作者 (RICO)時間14年前 (2011/12/06 21:42), 編輯推噓0(0014)
留言14則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OPENCV2.1 問題(Question): 有關KNN分類器的 訓練問題 與 分類結果 餵入的資料(Input): 三維DATA 預期的正確結果(Expected Output): 分類的類別 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) const int K = 10; int i, j, k, accuracy; float response; float _sample[3]; CvMat sample = cvMat( 1, 3, CV_32FC1, _sample ); CvMat trainData1, trainData2, trainClasses1, trainClasses2, trainClasses3; CvMat* Mysample=cvCreateMat(10,3,CV_32FC1); CvMat* MytrainClasses = cvCreateMat( 10, 1, CV_32FC1 ); //train for(int i=0;i<3;i++) { CV_MAT_ELEM(*Mysample,float,i,0)=0.0; CV_MAT_ELEM(*Mysample,float,i,1)=9.0; CV_MAT_ELEM(*Mysample,float,i,2)=9.0; } for(int i=3;i<8;i++) { CV_MAT_ELEM(*Mysample,float,i,0)=9.0; CV_MAT_ELEM(*Mysample,float,i,1)=0.0; CV_MAT_ELEM(*Mysample,float,i,2)=6.0; } for(int i=8;i<10;i++) { CV_MAT_ELEM(*Mysample,float,i,0)=4.0; CV_MAT_ELEM(*Mysample,float,i,1)=7.0; CV_MAT_ELEM(*Mysample,float,i,2)=0.8; } cvGetRows( MytrainClasses, &trainClasses1, 0, 3 ); cvSet( &trainClasses1, cvScalar(1) ); cvGetRows( MytrainClasses, &trainClasses2, 3, 8 ); cvSet( &trainClasses2, cvScalar(2) ); cvGetRows( MytrainClasses, &trainClasses3, 8, 10 ); cvSet( &trainClasses3, cvScalar(3) ); CvKNearest knn( Mysample, MytrainClasses, 0, false, K ); CvMat* nearests = cvCreateMat( 1, K, CV_32FC1); //test data sample.data.fl[0] = (float)4.0; sample.data.fl[1] = (float)0.0; sample.data.fl[2] = (float)8.0; response = knn.find_nearest(&sample,K,0,0,nearests,0); for( k = 0, accuracy = 0; k < K; k++ ) { if( nearests->data.fl[k] == response) accuracy++; } printf("%f\n",response); 補充說明(Supplement): 這是我自己做簡單的TEST 結果都只會輸出2(response) 1.會不會因為我訓練的資料量太少? 2.我去看了sample code(2D case)不過還是不太懂它如何得到分類的結果! 謝謝您耐心的看完 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.197.247 ※ 編輯: laevatain103 來自: 118.160.197.247 (12/06 21:49)

12/06 21:55, , 1F
!! 我不知道OpenCV 連 machine-learn-algorithm 都有.
12/06 21:55, 1F

12/06 21:59, , 2F
另外knn是非監督式學習,不需訓練範本.
12/06 21:59, 2F

12/06 22:02, , 3F
我現在才知道...看來可以大革命了
12/06 22:02, 3F

12/06 22:09, , 4F
我是從他的範例改的,可是他有先training
12/06 22:09, 4F

12/06 22:15, , 5F
sorry,我記錯了,knn是要tranning 沒錯 Orz.
12/06 22:15, 5F

12/06 22:19, , 6F
12/06 22:19, 6F

12/06 22:21, , 7F
12/06 22:21, 7F

12/06 22:24, , 8F
Orz.. 我有點奧悔用C砍完一半 machine-learing-alg.
12/06 22:24, 8F

12/06 22:26, , 9F
之前也自己硬刻NN都快吐血了...
12/06 22:26, 9F

12/06 22:26, , 10F
總比改別人寫的嬰兒程式好多了
12/06 22:26, 10F

12/06 22:26, , 11F
OPENCV提供的應該有一定的水準吧?
12/06 22:26, 11F

12/06 22:34, , 12F
沒用過不確定,但關鍵應是效率,不知opencv有沒有用到
12/06 22:34, 12F

12/06 22:34, , 13F
TCFP 做加速。
12/06 22:34, 13F

12/06 22:36, , 14F
不知道說~_~這學期正在學NN還沒研究到那...
12/06 22:36, 14F
文章代碼(AID): #1EtXl6rl (C_and_CPP)