matlab中的sift函数,matlab - 用Matlab从VLFeat中的SIFT描述符中提取VLAD - 堆栈内存溢出...

首先,您需要获得一个视觉单词词典,或更具体地说:使用k -means聚类对所有图像的SIFT特征进行聚类。 在[1]中,推荐使用例如64或256个群集的粗略群集。

为此,我们必须将所有描述符连接到一个矩阵中,然后可以将其传递给vl_kmeans函数。 此外,我们将描述符从uint8转换为single ,因为vl_kmeans函数要求输入为single或double 。

all_descr = single([sift_descr{:}]);

centroids = vl_kmeans(all_descr, 64);

其次,您必须创建一个分配矩阵,该矩阵的尺寸为NumberOfClusters-by-NumberOfDescriptors ,该矩阵将每个描述符分配给一个群集。 在创建此分配矩阵时,您具有很大的灵活性:您可以进行软分配或硬分配,可以随意使用简单的最近邻居搜索或kd树或其他近似或分层的最近邻居方案。

在本教程中,他们使用kd-tree,因此请坚持以下步骤:首先,必须构建kd-tree。 在找到centroids之后,此操作即centroids :

kdtree = vl_kdtreebuild(centroids);

然后,我们准备为每个图像构建VLAD向量。 因此,我们必须再次浏览所有图像,并独立计算其VLAD向量。 首先,我们完全按照本教程中的描述创建分配矩阵。 然后,我们可以使用vl_vlad函数对SIFT描述符进行编码。 所得的VLAD向量将具有NumberOfClusters * SiftDescriptorSize的大小,即在我们的示例中为64 * 128。

enc = zeros(64*128, numel(sift_descr));

for k=1:numel(sift_descr)

% Create assignment matrix

nn = vl_kdtreequery(kdtree, centroids, single(sift_descr{k}));

assignments = zeros(64, numel(nn), 'single');

assignments(sub2ind(size(assignments)), nn, 1:numel(nn))) = 1;

% Encode using VLAD

enc(:, k) = vl_vlad(single(sift_descr{k}), centroids, assignments);

end

最后,我们为数据库中的所有图像提供了高维VLAD向量。 通常,您将需要降低VLAD描述符的维数,例如使用PCA。

现在,赋予了新的形象这是不是在数据库中,你可以提取SIFT特征使用vl_sift ,创建具有分配矩阵vl_kdtreequery ,并创建使用该图像的VLAD矢量vl_vlad 。 因此,您不必查找新的质心或创建新的kd树:

% Load image and extract SIFT features

new_image = imread('filename.jpg');

new_image = single(rgb2gray(new_image));

[~, new_sift] = vl_sift(new_image);

% Create assignment matrix

nn = vl_kdtreequery(kdtree, centroids, single(new_sift));

assignments = zeros(64, numel(nn), 'single');

assignments(sub2ind(size(assignments)), nn, 1:numel(nn))) = 1;

% Encode using VLAD

new_vlad = vl_vlad(single(new_sift), centroids, assignments);

[1] Arandjelovic,R.和Zisserman,A.(2013)。 所有关于VLAD。 IEEE计算机视觉和模式识别会议(CVPR),1578年至1585年。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值