我试图用Matlab中的vl_feat实现提取SIFT特征,然后计算GMM模型以及Fisher Vector。我有来自DTD Dataset的两个子集训练和测试图像。
我的问题是我在步骤2中不知道如何转换每个图像的特征值以适应vl_gmm和vl_fisher。
这是我的代码:
%% SIFT Feature Extraction
FV_train = cell(size(train_name, 1), 1);
FV_test = cell(size(test_name, 1), 1);
parfor_progress(size(train_name, 1));
parfor n = 1:size(train_name, 1)
[~, FV_train{n}] = vl_sift(single(histeq(imresize(rgb2gray(imread(strcat(pwd, '/DTD/images', '/', train_name{n}))), [512 512]))));
[~, FV_test{n}] = vl_sift(single(histeq(imresize(rgb2gray(imread(strcat(pwd, '/DTD/images', '/', test_name{n}))), [512 512]))));
parfor_progress;
end
parfor_progress(0);
FV_train = FV_train(~cellfun('isempty',FV_train));
FV_test = FV_test(~cellfun('isempty',FV_test));
FV_train = adaptFV(FV_train);
FV_test = adaptFV(FV_test);
parfor n = 1:size(FV_train, 1)
FV_train{n} = double(reshape(FV_train{n},1,size(FV_train{n},2)*size(FV_train{n},1)));
FV_test{n} = double(reshape(FV_test{n},1,size(FV_test{n},2)*size(FV_test{n},1)));
end
还存在另外两个问题:
有人认为SIFT在某些图片上失败,因此我拒绝了
由于SIFT功能的不同维度,我采用了最长的一个,并用零填充其他的1xN特征向量。