有什么方法可以将 OPENCV SURF 中的关键点数量限制为 100 个? 获取到的关键点会按照强度排序吗? 如何获取描述符的强度? 我正在使用 cpp 程序在 LINUX 系统中处理 OPENCV。
问候, 希克沙
我的代码是: int main( int argc, char** argv ) {
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 500;
SurfFeatureDetector detector( minHessian,1,2,false,true );
std::vector<KeyPoint> keypoints_1p;
std::vector<KeyPoint> keypoints_2p;
detector.detect( img_1, keypoints_1p );
detector.detect( img_2, keypoints_2p);
// computing descriptors
SurfDescriptorExtractor extractor(minHessian,1,1,1,0);
Mat descriptors1, descriptors2;
extractor.compute(img_1, keypoints_1p, descriptors1);
extractor.compute(img_2, keypoints_2p, descriptors2);
最佳答案
您最多可以获得 100 个。我可以想象没有 SIFT 描述符的图像(例如恒定图像)。有很多方法可以将关键点限制为 100。您的问题有简单的解决方案和困难的解决方案。您最多可以获得 100 个,从您获得的尽可能多的关键点中随机选择 100 个关键点。
没有关键点强度之类的东西。您将必须定义自己的力量概念。
原始的 Lowe 论文中有各种各样的参数可以过滤关键点(其中之一是它们与图像边缘不匹配,Lowe 论文的第 4.1 节)。还有 2 或 3 个其他参数。您需要以这样一种方式系统地调整参数,即您只能得到 100。如果您得到的值少于 100,您将过滤得更少;如果您得到的值大于 100,您将过滤得更多。
关于OPENCV SURF 特征描述符强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22705303/