visual-c++ - 使用 SIFT 和 ORB 特征在 OpenCV 中训练 SVM 分类器

标签 visual-c++ opencv svm sift

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

非常感谢您的帮助!

我解决了描述符的问题,将它们全部放在同一行中。但是,我发现大多数描述符的值为 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

最佳答案

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

关于visual-c++ - 使用 SIFT 和 ORB 特征在 OpenCV 中训练 SVM 分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12599554/

相关文章:

c++ - C++中可重用的成员函数

c++ - 如何在opencv中绘制带有蒙版图像的矩形?

python - scikit-learn:支持向量机。精度和/或准确度?

c++ - Visual C++ 2012 似乎不尊重 lambda 中的默认捕获

c++ - 在 VC++ 中从网络摄像头捕获视频

c++ - 错误C2679二进制 '<<' : no operator found which takes a right-hand operand of type 'T'

c++ - 对于简单的 StereoBM 算法,为什么我的代码比 opencv 慢得多?

python - Tensorflow:Mac OS摄像头已打开但视频在屏幕上不可见

machine-learning - SVM中的决策边界计算

machine-learning - RBF 和 SVM 多项式内核的参数选择 - 两个内核的最佳 'c'(成本参数)是否相同?