учитывая, что у вас уже есть "словарь" от vl_kmeans:
[centers] = vl_kmeans(data, numClusters);
Чтобы построить гистограмму изображения I, вам нужно получить дескрипторы 128-D этого изображения, используя vl_sift:
[~,D] = vl_sift(I)
Каждый столбец D является дескриптором одной точки интереса (или кадра) на изображении I. Теперь вам нужно построить гистограмму I на основе D
и словаря 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) достаточно ясен, чтобы объяснить алгоритм.
person
Tu Bui
schedule
29.04.2014