void Build_Vocabulary::doKmeansAll(String postFix){ clock_t start, finish; double elapsed_time; start = time(NULL); cout << "Loading Descriptor Files..." << endl; FileStorage fs("training_descriptors_bike_" +postFix+ ".txt", FileStorage::READ); Mat training_descriptors_bike; fs["training_descriptors"] >> training_descriptors_bike; fs.release(); FileStorage fs1("training_descriptors_cars_" +postFix+ ".txt", FileStorage::READ); Mat training_descriptors_cars; fs1["training_descriptors"] >> training_descriptors_cars; fs1.release(); FileStorage fs2("training_descriptors_person_" +postFix+ ".txt", FileStorage::READ); Mat training_descriptors_person; fs2["training_descriptors"] >> training_descriptors_person; fs2.release(); FileStorage fs3("training_descriptors_none_" +postFix+ ".txt", FileStorage::READ); Mat training_descriptors_none; fs3["training_descriptors"] >> training_descriptors_none; fs3.release(); /* */ BOWKMeansTrainer bowtrainer(1000); //num clusters bowtrainer.add(training_descriptors_bike); bowtrainer.add(training_descriptors_person); bowtrainer.add(training_descriptors_cars); bowtrainer.add(training_descriptors_none); cout << "Clustering Bag-of-Words features..." << endl; Mat vocabulary = bowtrainer.cluster(); FileStorage fs4("vocabulary_1000_" +postFix+ ".txt", FileStorage::WRITE); fs4 << "vocabulary" << vocabulary; fs4.release(); /* */ finish=time(NULL); elapsed_time = finish-start; int hours = (int) elapsed_time / 3600; int minutes = (int) (elapsed_time - hours * 3600) / 60; int seconds = (int) elapsed_time - hours * 3600 - minutes * 60; cout << "Elapsed Time for Clustering: " << hours << ":" << minutes << ":" << seconds << endl << endl; cout << "------- Finished Build Vocabulary ---------\n" << endl; }
void Build_Vocabulary::doKmeans(String filename, String itemname){ clock_t start, finish; double elapsed_time; start = time(NULL); cout << "Loading Descriptor Files..." << endl; FileStorage fs("training_descriptors_" + filename + ".txt", FileStorage::READ); Mat training_descriptors; fs["training_descriptors"] >> training_descriptors; fs.release(); /* */ BOWKMeansTrainer bowtrainer(1000); //num clusters bowtrainer.add(training_descriptors); cout << "Clustering Bag-of-Words features..." << endl; Mat vocabulary = bowtrainer.cluster(); FileStorage fs1("vocabulary_" + filename + "_1000.txt", FileStorage::WRITE); fs1 << "vocabulary" << vocabulary; fs1.release(); /* Mat Label, kMeanCenter; TermCriteria KmeanTerm(CV_TERMCRIT_EPS, 100, 0.001); kmeans(training_descriptors, 1000, Label , KmeanTerm, 2, KMEANS_PP_CENTERS, kMeanCenter); */ /* FileStorage fs2("kMeans_1000.txt", FileStorage::WRITE); fs2 << "label" << Label; fs2 << "kMeanCenter" << kMeanCenter; fs2.release(); */ /* */ finish=time(NULL); elapsed_time = finish-start; int hours = (int) elapsed_time / 3600; int minutes = (int) (elapsed_time - hours * 3600) / 60; int seconds = (int) elapsed_time - hours * 3600 - minutes * 60; cout << "Elapsed Time for Clustering: " << hours << ":" << minutes << ":" << seconds << endl << endl; cout << "------- Finished Build Vocabulary ---------\n" << endl; }
void VisualBOW::createVocabulary(Mat &descriptors) { BOWKMeansTrainer bowtrainer(1000); vocabulary = bowtrainer.cluster(descriptors); }
int main(int argc, char** argv) { string dir = "foodcamimages/TRAIN", filepath; DIR *dp; struct dirent *dirp; struct stat filestat; dp = opendir( dir.c_str() ); // detecting keypoints SurfFeatureDetector detector(400); //FastFeatureDetector detector(1,true); vector<KeyPoint> keypoints; // computing descriptors //Ptr<DescriptorExtractor > extractor(new SurfDescriptorExtractor());// extractor; Ptr<DescriptorExtractor > extractor( new OpponentColorDescriptorExtractor( Ptr<DescriptorExtractor>(new SurfDescriptorExtractor()) ) ); Mat descriptors; Mat training_descriptors(1,extractor->descriptorSize(),extractor->descriptorType()); Mat img; cout << "------- build vocabulary ---------\n"; cout << "extract descriptors.."<<endl; //int count = 0; Rect clipping_rect = Rect(0,120,640,480-120); Mat bg_ = imread("background.png")(clipping_rect), img_fg; while (dirp = readdir( dp )) { // count++; filepath = dir + "/" + dirp->d_name; // If the file is a directory (or is in some way invalid) we'll skip it if (stat( filepath.c_str(), &filestat )) continue; if (S_ISDIR( filestat.st_mode )) continue; img = imread(filepath); if (!img.data) { continue; } img = img(clipping_rect); img_fg = img - bg_; detector.detect(img_fg, keypoints); // { // Mat out; //img_fg.copyTo(out); // drawKeypoints(img, keypoints, out, Scalar(255)); // imshow("fg",img_fg); // imshow("keypoints", out); // waitKey(0); // } extractor->compute(img, keypoints, descriptors); training_descriptors.push_back(descriptors); cout << "."; } cout << endl; closedir( dp ); cout << "Total descriptors: " << training_descriptors.rows << endl; FileStorage fs("training_descriptors.yml", FileStorage::WRITE); fs << "training_descriptors" << training_descriptors; fs.release(); BOWKMeansTrainer bowtrainer(1000); //num clusters bowtrainer.add(training_descriptors); cout << "cluster BOW features" << endl; Mat vocabulary = bowtrainer.cluster(); FileStorage fs1("vocabulary_color_1000.yml", FileStorage::WRITE); fs1 << "vocabulary" << vocabulary; fs1.release(); }