使用SIFT和ORB功能在OpenCV中训练SVM分类器

use*_*901 4 opencv svm sift visual-c++

我正在尝试训练SVM分类器来识别一组64x128图像中的行人.我已经使用HOG功能完成了这项工作,现在我需要使用SIFT和ORB实现相同的功能.对于HOG功能,我总是具有相同数量的功能(3780),因此列车的矩阵是image_number 3780.现在,使用SIFT提取器我得到不同大小的关键点.如何使用不同大小的关键点为分类器创建矩阵?

非常感谢您的帮助!

我解决了描述符的问题,将所有这些问题放在同一行.但是,我发现大多数desriptors都有0值,因此分类器不能正常工作.你知道我怎么解决这个问题?

这是一段代码:

DenseFeatureDetector detector;
SiftDescriptorExtractor descriptor;
vector<KeyPoint> keypoints;


//for every image I compute te SIFT
detector.detect(image, keypoints);
Mat desc;
descriptor.compute(image,keypoints, desc);
Mat v(1,30976,CV_32FC1);
    for (int j = 0; j<desc.rows; j++){
        for(int k = 0; k<desc.cols; k++){
            v.at<float>(0,128*j+k) = desc.at<float>(j,k);

        }
    } //now in vector v there are all the descriptors (the problem is that most of them have 0 value)

descriptormat.push_back(v);  //descriptormat is the cv::Mat that I use to train the SVM
Run Code Online (Sandbox Code Playgroud)

小智 5

通常,人们对SIFT或ORB特征进行矢量量化并构建直方图(词袋模型).这将为每个训练和测试图像提供固定大小的矢量.

  • @CengizFrostclaw参见[使用关键点包进行视觉分类](https://www.cs.cmu.edu/~efros/courses/AP06/Papers/csurka-eccv-04.pdf)的第2.3节,或者来自[视觉词歧义](http://staff.science.uva.nl/~jvgemert/pub/GemertTPAMI09Ambiguity.pdf).量化通常将128-D空间分成K个区域,每个区域由聚类中心定义.基于它们最接近的聚类中心来量化特征. (2认同)