不同大小的OpenCV矩阵

时间:2013-06-27 05:15:10

标签: opencv image-processing matrix

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

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

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

现在,对于训练矩阵,所有特征必须在训练矩阵中而不是训练。现在,正如您所看到的那样,SIFT和ORB的2矩阵具有不同的大小。如何将它们组合成一个矩阵?

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

请给我一些提示。

1 个答案:

答案 0 :(得分: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:我没有编译这段代码,所以请仔细检查拼写错误和语法。

相关问题