0

我正在使用VLFeat库使用 Bag-of-Visual-Words (BoVW) 构建项目图像分类。BoVW 管道包括:

  1. k-均值
  2. 构建直方图
  3. 支持向量机分类

我可以将vl_siftandvl_kmeans用于 (1) 和 (2),但我不知道如何构建直方图特征并在 SVM 中使用它们。

4

1 回答 1

0

鉴于您已经拥有来自 vl_kmeans 的“字典”:

[centers] = vl_kmeans(data, numClusters); 

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

[~,D] = vl_sift(I)  

D 的每一列是图像 I 中一个兴趣点(或帧)的描述符。现在您需要根据D和字典构建 I 的直方图centers。最简单的方法是使用 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 中)足以解释算法。

于 2014-04-29T17:21:03.050 回答