如何为所有图像制作相同大小的描述符

时间:2013-08-25 07:51:00

标签: c++ opencv computer-vision svm surf

任何人都可以告诉我如何使描述符具有固定大小?因为我们可能会从不同的图像中获得不同数量的描述符 For example 如果我有450 * 550的图像并且我在其上应用冲浪功能,那么冲浪从中提取关键点并从中提取描述符,例如,它从10 descriptors中提取关键点的450*550 image,比它再次读取一个图像及其大小750 * 880,所以冲浪从它和描述符中提取关键点,例如这次它从这个图像中提取20 descriptors,现在我想要做的是,我希望无论图像的大小如何,描述符的大小都应该相同,就像它应该从两个图像中获取10个描述符一样,因此在许多图像的情况下,它应该选择描述符的最小大小并从所有图像中仅提取描述符并留下其他图像,或者我定义大小,它忽略描述符低于或高于该大小的图像

extractor.compute( tmplate_img, keypoints, descriptors);
my_img=descriptors.reshape(1,1);

当我通过循环运行时,我希望为所有图像制作相同大小的描述符,并且描述符的大小对于获得更好的结果更好,描述符是MAT。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码来保留响应最大的前M个关键点:

bool compareFunction(KeyPoint p1, KeyPoint p2) {return p1.response>p2.response;}
//The function retains the stongest M keypoints in kp
void RetainBestKeypoints(vector<KeyPoint>  &kp, int M)
{
    vector<KeyPoint>  sortedkp;

    sort(kp.begin(),kp.end(),compareFunction);
    if (kp.size()>M)
            kp.erase(kp.begin()+M,kp.end());
}