0

Mat在 OpenCV 中遇到了一些问题。我使用 SIFT 对 SVM 进行图像分类。现在我意识到真阳性率很低,所以我决定在 SIFT 之上添加 ORB 特征检测器。我的问题是,例如一张图片:

SIFT 描述符:Mat大小 [128 x 250]

ORB 描述符:Mat大小 [32 x 400]

现在,对于训练矩阵,所有特征都必须在训练矩阵中并且经过训练。现在,如您所见,SIFT 和 ORB 的 2 矩阵大小不同。如何将它们组合成一个矩阵?

我是否必须将第二个矩阵附加(添加)到第一个矩阵的末尾,因为目前我将它分配给单独的列。

请给我一些提示。

4

1 回答 1

1

根据您的解决方案提取特征有两个部分。第一部分是检测关键点,第二部分是描述它们。目前,您正在使用 SIFT 和 ORB 进行这两个阶段,并提出不同大小的矩阵。相反,请使用以下框架:

// Construct detectors
cv::FeatureDetector siftDetector, orbDetector;
siftDetector.create("SIFT");
orbDetector.create("ORB");

// Detect keypoints
std::vector<cv::Keypoint> siftPoints, orbPoints;
siftDetector.detect(img, siftPoints);
orbDetector.detect(img, orbPoints);

// Concantenate the vectors
siftPoints.insert(siftPoints.end(), orbPoints.begin(), orbPoints.end());

// Construct descriptor (SIFT used as example)
cv::FeatureDescriptor siftDescriptor;
siftDescriptor.create("SIFT");

// Compute descriptors
cv::Mat descriptors;
siftDescriptor.compute(img, siftPoints, descriptors);

您现在拥有所有检测到的关键点的 SIFT 描述。

PS:我还没有编译这段代码,所以请仔细检查拼写错误和语法。

于 2013-06-27T09:17:56.140 回答