ipu*_*hed 14 opencv machine-learning sift feature-detection
我从各个角度都有一个汽车图像文件夹.我想用一袋文字的方法训练系统识别汽车.一旦完成训练,我希望如果给出该车的图像,它应该能够识别它.
我一直在尝试在opencv中学习BOW功能,以便完成这项工作并达到我现在不知道该做什么的水平,并且一些指导将不胜感激.
这是我用来制作文字包的代码:
Ptr<FeatureDetector> features = FeatureDetector::create("SIFT");
Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("SIFT");
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");
//defining terms for bowkmeans trainer
TermCriteria tc(MAX_ITER + EPS, 10, 0.001);
int dictionarySize = 1000;
int retries = 1;
int flags = KMEANS_PP_CENTERS;
BOWKMeansTrainer bowTrainer(dictionarySize, tc, retries, flags);
BOWImgDescriptorExtractor bowDE(descriptors, matcher);
//training data now
Mat features;
Mat img = imread("c:\\1.jpg", 0);
Mat img2 = imread("c:\\2.jpg", 0);
vector<KeyPoint> keypoints, keypoints2;
features->detect(img, keypoints);
features->detect(img2,keypoints2);
descriptor->compute(img, keypoints, features);
Mat features2;
descripto->compute(img2, keypoints2, features2);
bowTrainer.add(features);
bowTrainer.add(features2);
Mat dictionary = bowTrainer.cluster();
bowDE.setVocabulary(dictionary);
Run Code Online (Sandbox Code Playgroud)
这完全基于BOW文档.
我想在这个阶段我的系统是训练有素的.下一步是预测.
这是我不知道该怎么做的地方.如果我使用SVM
或NormalBayesClassifier
他们都使用术语训练和预测.
我如何预测和训练?任何指导将不胜感激.如何将分类器的训练连接到我的`bowDE``函数?
sie*_*hie 15
下一步是提取实际的单词描述符包.您可以使用compute
BOWImgDescriptorExtractor中的函数执行此操作.就像是
bowDE.compute(img, keypoints, bow_descriptor);
Run Code Online (Sandbox Code Playgroud)
使用此函数可以创建描述符,然后将其收集到矩阵中,该矩阵用作分类器函数的输入.也许这个教程可以指导你一点点.
我想提到的另一件事是,对于分类,你通常需要至少2个班级.因此,您还需要一些不包含汽车的图像来训练分类器.
归档时间: |
|
查看次数: |
18061 次 |
最近记录: |