vl_dsift尝试在每个像素处获取特征向量

时间:2015-10-22 19:21:10

标签: image matlab image-processing computer-vision sift

我正在尝试使用vl_dsift来获取每个像素的128 * 1特征向量。因此,我希望得到的矩阵具有大小

128 *(#OfPixels)

然而,当我在尺寸为(192 * 168)的图像上使用它时,结果描述符给出尺寸(128 * 31,185),其中binsize为1,放大系数为1。

I = imread('Faces\yaleB11_P00A-130E+20.pgm');
size(I)

figure
imshow(I)

binSize = 1 ;
magnif = 1 ;
Is = vl_imsmooth(single(I), sqrt((binSize/magnif)^2 - .25)) ;
[f, d] = vl_dsift(single(I), 'size', binSize) ;

size(f)
size(d)

1 个答案:

答案 0 :(得分:1)

我担心你无法提取图像中所有像素的特征向量。

从图中可以看出,Dense SIFT描述符几何'在以下链接(http://www.vlfeat.org/api/dsift.html)中,密集筛选从4乘4窗口中提取特征。由于该框不能移动到图像之外,因此4×4窗口的左上框可以是第一像素,即(1,1)。因此,在这种情况下(假设您的bin大小为1),4×4窗口的中心位于(2.5,2.5),换句话说,在x和y方向上的第2和第3像素之间。请注意,在这种情况下,4×4窗口覆盖16个像素,这些像素为[1,4] x [1,4]像素。

现在说出你的尺寸为n-by-m的图像。 以相同的方式,当4乘4窗口的右下方箱位于最后一个像素(n,m处的像素)时,4乘4窗口的中心将处于[n-1.5,m-1.5]。在您的情况下,您的功能将从2.5 x 2.5的像素开始,并将以190.5 x 166.5

结束

所以最重要的是,4乘4窗口的中心从X方向行进,从强XMIN + 3/2 * SIZE'到' MAX - 3/2 * SIZE'步骤大小' STEP' 。其中XMIN和XMAX分别是X方向的第一个和最后一个像素。对于Y轴也是如此(参见底部的段落'关于几何的更多细节'在链接http://www.vlfeat.org/matlab/vl_dsift.html)。结果,4乘4的窗口遍布整个图像。