使用vl_feat工具箱进行特征提取

时间:2016-11-16 18:45:31

标签: matlab computer-vision feature-extraction sift vlfeat

imshow(imread(a));
img = single(imread(a));
[f,d] = vl_phow(img);
perm = randperm(size(f,2)) ;
s = perm(1:50)
h1= vl_plotframe(f(:,s));
h2= vl_plotframe(f(:,s));
set(h1,'color','k','linewidth',3) ;
set(h2,'color','y','linewidth',2) ;
h3 = vl_plotsiftdescriptor(f(:,s),d(:,s)) ;
set(h3,'color','g') ;

但是当我尝试使用vl_plotsiftdescriptors绘制它们时,它会出错。

  

卫生组织   d 128x3692 uint8
  f 4x3692双

错误是:

  

D的行数与描述符的几何形状

不匹配

有人可以帮帮我吗? 我是以正确的方式做到的吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题出在

h3 = vl_plotsiftdescriptor(f(:,s),d(:,s)) ;

f(:,s)d(:,s),您正在加载sf的{​​{1}} - ,而VLFeat documentation表示,

  

s的每一列都是D中相应帧的描述符。

因此,要在索引F处提取描述符,您必须调用

s

-

其他评论:使用randperm的第二个参数(h3 = vl_plotsiftdescriptor(f(s,:),d(s,:)) ; ),您可以替换

k

通过

perm = randperm(size(f,2)) ;
s = perm(1:50);

应该更快,因为您只生成50个随机数,而不是生成s = randperm(size(f,2), 50); 个数字并丢弃大部分数字。