opencv - 如何使用词袋进行训练和预测?

标签 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);

这都是基于BOW documentation .

我想在这个阶段我的系统已经训练好了。下一步是预测。

这是我不知道该做什么的地方。如果我使用 SVMNormalBayesClassifier 它们都使用术语训练和预测。

在此之后我该如何预测和训练?任何指导将不胜感激。如何将分类器的训练连接到我的“bowDE”函数?

最佳答案

您的下一步是提取实际的单词描述符包。您可以使用 BOWImgDescriptorExtractor 中的 compute 函数来执行此操作。有点像

 bowDE.compute(img, keypoints, bow_descriptor);

使用此函数,您可以创建描述符,然后将其收集到一个矩阵中,该矩阵用作分类器函数的输入。也许this教程可以为您提供一些指导。

我想提的另一件事是,对于分类,您通常至少需要 2 个类。因此,您还需要一些不包含汽车的图像来训练分类器。

关于opencv - 如何使用词袋进行训练和预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689666/

相关文章:

python - 具有归一化混淆矩阵的 Matplotlib 图的颜色条不会更新值

r - 如何在 R 中实现保留验证

c++ - OpenCV 中的自定义 SIFT 检测器

iphone - OpenCV iOS 阻止 Crash

python - TensorFlow 随机森林与深度学习

android - 尝试训练 SVM 时出错(无法正确初始化标签)

python - 有没有办法更快地运行 OpenCV 的 SIFT?

c++ - 从 SIFT 的 OpenCV 匹配中获取关键点的坐标

image - 检测纸质目标的圆圈和射击

opencv - 使用 opencv 跟踪模式,使每个节点仅访问一次(欧拉路径)