VLFeat中的词袋(BOW)

时间:2014-04-16 09:05:26

标签: matlab image-processing computer-vision vlfeat

使用VLFeat库构建项目使用视觉词袋(BoVW)进行图像分类。 BoVW管道包括:

  1. SIFT
  2. k-means
  3. 构建直方图
  4. SVM分类
  5. 我可以将vl_siftvl_kmeans用于(1)和(2),但我不知道如何构建直方图功能并在SVM中使用它们。

1 个答案:

答案 0 :(得分:0)

鉴于你已经拥有"字典"来自vl_kmeans:

[centers] = vl_kmeans(data, numClusters); 

为了构建图像I的直方图,您需要使用vl_sift获取该图像的128-D描述符:

[~,D] = vl_sift(I)  

D的每一列是图像I中一个兴趣点(或帧)的描述符。现在,您需要根据D和字典centers构建I的直方图。最简单的方法是使用for循环:

H = zeros(1,numClusters);
for i=1:size(D,2)
  [~, k] = min(vl_alldist(D(:,i), centers)) ;
  H(k) = H(k) + 1;
end

现在由您决定是否将直方图H标准化,然后再将其传递给SVM。请注意,可能有一种更快的方法来构建不需要循环的直方图;但我认为我的代码(在Matlab中)足够清楚,可以解释算法。