SURF描述符的值是什么?

时间:2013-10-26 18:54:45

标签: opencv image-processing computer-vision

我正在使用以下简单的行从图像中提取SURF描述符:

Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create("SURF");
    descriptor->compute(im1, kp, desc1);

现在,当我“观察”变量desc1.data时,它包含0到255范围内的整数值。

但是,当我使用代码调查值时:

for (int j=0;j<desc1.cols; j++){
            float a=desc1.at<float>(0,j);

它包含介于-1和1之间的值。这怎么可能? SURF不应该像SIFT一样返回整数值吗?

1 个答案:

答案 0 :(得分:1)

我不确定OpenCV会发生什么,但到目前为止,这是SURF所做的。 SURF描述符将小图像块划分为4x4子区域,并以巧妙的方式计算每个子区域的小波响应。基本上它是一个4元组的描述符&lt; sum(dx),sum(dy),sum(| dx |),sum(| dy |)&gt ;,其中dx,dy是每个子区域中的小波响应。通过连接所有响应并规范化幅度来构造描述符,这导致64维描述符。从描述中可以清楚地看出,归一化的sum(dx)和sum(dy)值将介于-1和1之间,而sum(| dx |)和sum(| dy |)将介于0和1之间。如果你看到128维描述符,dx和| dx |的总和为dx&gt; = 0和dy&lt;分别计算0,它使64维描述符的大小加倍。