Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

how to use centers generated by kmeans in svm training in opencv ?

$
0
0
I define initial centers and use some data, than perform kmeans. I also print new centers , they are different from my initial centers. Here, I added code of that. I want to use these centers in svm training. Give me idea or add example code for that. For data set, I have text files, in those data are 512 x 512. I create data from text files with this dimension (262144 (row) x 2 (cols) ). int N=train_data.rows; //number of data points // int K=5; //number of labels RNG rng((unsigned)time(NULL)); RNG rng_center(20); Mat labelsMat(N,1,CV_32SC1); Mat labelsMatKMeans; int clusterCount=K; int sampleCount = N; Mat centers(5,cl,CV_32FC1); readCenters(centers,"centers.txt"); Point center; center.x = 0;//rng_center.uniform(0, height); center.y = 0;//rng_center.uniform(0, width); // Set up training data /* generate random labeld sample from multigaussian distribution */ for( int k = 0; k < clusterCount; ++k ) { Mat pointChunk = train_data.rowRange(k*sampleCount/clusterCount, k == clusterCount - 1 ? sampleCount : (k+1)*sampleCount/clusterCount); rng.fill(pointChunk, CV_RAND_NORMAL, Scalar(center.x, center.y), Scalar(width*0.05, height*0.05)); Mat repeat_center; repeat(centers.row(k),pointChunk.rows,1,repeat_center); ////cout<(i,0)= cvCeil(train_data.at(i,0)); train_data.at(i,1)= cvCeil(train_data.at(i,1)); // train_data.at(i,2)= cvCeil(train_data.at(i,2)); labelsMat.at(i)= cvCeil(labelsMat.at(i)); } printDim(labelsMat,"labelMat"); train_data=abs(train_data); //absdiff(testDataMat,Scalar::all(0),testDataMat); vector colors_region; vector colors_data; //generate random colors for each label for(int i=0;i>8)&255, (icolor>>16)&255 )); icolor=(unsigned)rng; colors_data.push_back( Vec3b( icolor&255, (icolor>>8)&255, (icolor>>16)&255 )); } //draw k-means output kmeans(train_data, clusterCount, labelsMatKMeans, TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0), 3, KMEANS_PP_CENTERS, centers); // cout << "M = "<< endl << " " << labelsMatKMeans << endl << endl; cout<< "Final center :"<>row>>col ) { centers.at(i,0)=row; centers.at(i,1)=col; i++; cout<<"center "<< i <<": ("<< row <<","<< col << ")" <(i); //cout << "C_ID : " << labelsMatKMeans.at(i); //cout << "C_ID : " << clusterIdx<< endl; Point ipt ; ipt.x= (int)train_data.at(i,0); ipt.y=(int)train_data.at(i,1); circle( img_kmeans, ipt, 5, Scalar(colors_data[clusterIdx]), -1, 8 ); } imshow("K-Means clustering", img_kmeans); imwrite("k_means.png",img_kmeans);

Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>