SIFT检测到0个关键点?

时间:2016-07-20 02:49:08

标签: c++ opencv image-processing computer-vision push-back

我正在使用OpenCV创建n图像数据集的视觉直方图(遵循Bag of Visual Words模型)。

这是代码:

    std::vector<std::string> fileList;
    std::unique_ptr<cv::BOWImgDescriptorExtractor> bowDE;
    cv::Mat vocabulary;//will be filled through KMeans
    ...
    bowDE->setVocabulary(vocabulary);
    cv::Ptr<cv::Feature2D> featureDetectorDescriptor = cv::xfeatures2d::SIFT::create(0,3,0.04,10,1.6);;
    for(size_t i=0;i<n;i++) {
        cv::UMat img;
        cv::Mat word;
        imread(fileList[i], cv::IMREAD_GRAYSCALE).copyTo(img);
        std::vector<cv::KeyPoint> keyPoints;
        featureDetectorDescriptor->detect(img, keyPoints);
        bowDE->compute(img, keyPoints, word);
        histograms.push_back(word);
        assert(histograms.rows==(i+1));//this is for testing
    }

问题是在插入4625图像后,assert条件为false。我测试了keypoints.size(),结果为0,没有检测到关键点!

我尝试删除创建错误的图像,但另一个创建了相同的错误(因此错误似乎不依赖于图像)。

为什么会这样?

更新:实际上我发现错误与图像有关。似乎使用默认参数cv::SIFT检测到来自Caltech101的此图像的0个关键点:

enter image description here

0 个答案:

没有答案