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

vl_dsift trying to get a feature vector at every pixel

我正在尝试使用 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)

恐怕您无法提取图像中所有像素的特征向量。

从下面的图'Dense SIFT descriptor geometry'可以看出link(http://www.vlfeat.org/api/dsift.html)dense sift从4×4window中提取特征。由于此框不能移出图像,因此 4×4 window 的左上角 bin 可以是第一个像素,即 (1,1)。因此,在这种情况下(假设您的 bin 大小为 1),4×4 window 的中心位于 (2.5, 2.5),换句话说,在 x 和 y 方向上的第 2 和第 3 个像素之间。请注意,在这种情况下,4×4 window 覆盖了 16 个像素,即 [1,4] x [1,4] 像素。

现在说出您的图片大小为 n×m。 以相同的方式,当 4×4 window 的右下角是最后一个像素(n,m 处的像素)时,4×4 window 的中心将位于 [n -1.5,m-1.5]。在您的情况下,您的功能将从 2.5 x 2.5 的像素开始,并以 190.5 x 166.5

结束

所以底线是 4×4 window 的中心在 X 方向上从 'XMIN + 3/2 * SIZE' 移动到 'MAX - 3/2 * SIZE'步长 'STEP'。其中 XMIN 和 XMAX 分别是 X 方向的第一个和最后一个像素。 Y 轴相同(参见 link http://www.vlfeat.org/matlab/vl_dsift.html 处的底部段落 'FURTHER DETAILS ON THE GEOMETRY')。结果,4×4 window 遍历了整个图像。