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的行数与描述符的几何形状
不匹配
有人可以帮帮我吗? 我是以正确的方式做到的吗? 提前谢谢。
答案 0 :(得分:0)
问题出在
行h3 = vl_plotsiftdescriptor(f(:,s),d(:,s)) ;
f(:,s)
和d(:,s)
,您正在加载s
和f
的{{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);
个数字并丢弃大部分数字。