BOW / visual codebook /在openCV中使用RGB图像的功能包?

时间:2014-02-01 19:19:19

标签: opencv svm

我可以使用灰度图像创建BOW /可视码本。我稍后使用此BOW进行SVM分类。但我也希望保留颜色信息。所以,我想创建3D BOW,即所有频道。但我怎么能这样做?

//Obtain the set of bags of features.

char * filename = new char[100];        
Mat input;    

vector<KeyPoint> keypoints;
Mat descriptor;

Mat featuresUnclustered;
//The SIFT feature extractor and descriptor
SiftDescriptorExtractor detector;    

//feature descriptors and build the vocabulary
for(int f=0;f<999;f+=50){        
    sprintf(filename,"G:\\testimages\\image\\%i.jpg",f);

    input = imread(filename, CV_LOAD_IMAGE_GRAYSCALE); //Load as grayscale                
    //detect feature points
    detector.detect(input, keypoints);
    //compute the descriptors for each keypoint
    detector.compute(input, keypoints,descriptor);        
    //put the all feature descriptors in a single Mat object 
    featuresUnclustered.push_back(descriptor);        
    //print the percentage
    printf("%i percent done\n",f/10);
}        

//Construct BOWKMeansTrainer
//the number of bags
int dictionarySize=200;
//define Term Criteria
TermCriteria tc(CV_TERMCRIT_ITER,100,0.001);
//retries number
int retries=1;
//necessary flags
int flags=KMEANS_PP_CENTERS;
//Create the BoW (or BoF) trainer
BOWKMeansTrainer bowTrainer(dictionarySize,tc,retries,flags);
//cluster the feature vectors
Mat dictionary=bowTrainer.cluster(featuresUnclustered);    
//store the vocabulary
FileStorage fs("dictionary.yml", FileStorage::WRITE);
fs << "vocabulary" << dictionary;
fs.release();

0 个答案:

没有答案
相关问题