我在OpenCV中遇到Mat
的问题。我使用SIFT进行SVM图像分类。现在我意识到真阳性率很低,所以我决定在SIFT上添加ORB特征检测器。我的问题是,例如对于一张图片:
SIFT描述符:Mat
大小[128 x 250]
ORB描述符:Mat
大小[32 x 400]
现在,对于训练矩阵,所有特征必须在训练矩阵中而不是训练。现在,正如您所看到的那样,SIFT和ORB的2矩阵具有不同的大小。如何将它们组合成一个矩阵?
我是否必须将第二个矩阵附加(添加)到第一个矩阵的末尾,因为目前我将其分配给不同的列。
请给我一些提示。
答案 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:我没有编译这段代码,所以请仔细检查拼写错误和语法。