基于局部视觉特征聚合的图像检索
2018-01-18 00:02
543 查看
基于局部视觉特征聚合的图像检索
1、算法实现
1、对所有20幅图像的sift描述子特征向量进行k-means聚类,聚为m类。代码如下:% 对每一段进行k-means聚类,k=16 [Idx,C] = kmeans(siftDescriptorTrain',16,'Options',opts);
2、将每张图像的sift描述子特征向量按VLAD方式聚合成一个维度为128*m维的长向量。具体步骤如下:对每个特征向量,找与它距离最近的聚类中心,具有相同聚类中心的归为一类。对每一类,计算该类中所有特征向量与对应聚类中心的向量差的和,得到m个128维的向量,将这m个向量归并为一个128*m维的长向量。存储空间由128*k降到128*m,k为每幅图像的特征向量数,代码如下:
v1 = cell(20,1); vlad = zeros(20 , 128*16); for i = 1 : 20 minposition = zeros(1,featNum(i)); % 判断待匹配图像的每一个特征点各属于哪一类(基于上述相应的codebook进行量化) for j =1 : featNum(i) tmpFeat = repmat(SiftFeat{i}(:,j),1,16); d1 = sum((tmpFeat - C).^2); % distance minposition(j) = find(d1==min(d1)); end v1{i} = zeros(128,16); for j =1 : featNum(i) v1{i}(:,minposition(j)) = v1{i}(:,minposition(j)) + SiftFeat{i}(:,j) - C(:,minposition(j)); end vlad(i,:) = reshape(v1{i},1,128*16); end
3、将每幅图像作为查询图像,计算与其余19幅图像的距离,计算距离的方法为计算两个128*m维向量的欧式距离。然后将距离从小到大排序,并计算检索精度(检索精度:在检索排序结果中,统计排在前4的图像中的相关图像的数目,计算该相关结果数的平均值(取值范围在[1, 4]))。计算复杂度由19*19*128*k降为19*19*128*m,k为每幅图像的特征向量数,代码如下:
% 将每幅图像作为查询图像,计算与其余19幅图像的距离 dist = zeros(20,20); for i = 1 : 20 for j = i+1 : 20 dist(i,j) = sum((vlad(i,:)-vlad(j,:)).^2); dist(j,i) = dist(i,j); end end v = zeros(20,20); ind = zeros(20,20); % 距离从小到大排序 [v(1 : 20,:), ind(1 : 20,:)] = sort(dist(1 : 20,:) , 2); % 取前4个 ind = ind(:,2:5); index = zeros(20,1); for i = 1 : 20 fndex{i} = fndex{i}(end-14 : end-10); index(i) = str2double(fndex{i}); end % 统计排在前4的图像中的相关图像的数目 count = zeros(20,1); for i = 1 : 20 tmp = floor(index(i)/4); for j = 1 : 4 if floor(index(ind(i,j))/4) == tmp count(i) = count(i) + 1; end end end % 算平均值 mean(count)
综上,存储空间由128*k降到128*m,计算复杂度由19*19*128*k降为19*19*128*m。
2、实验结果
次数 | 1 | 2 | 3 | 4 | 5 | 6 | 平均值 |
---|---|---|---|---|---|---|---|
检索精度 | 2.6500 | 2.5500 | 40002.6000 | 2.5500 | 2.5000 | 2.6500 | 2.5833 |
参考资料
http://www.cnblogs.com/mafuqiang/p/6909556.html源代码
http://download.csdn.net/download/jianwen_jiang/10211105相关文章推荐
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
- 图像检索:几种基于纹理特征的图像检索算法
- 【综述】樊彬老师-“局部图像特征描述概述” - CV研究探讨 视觉计算研究论坛 -
- 一种基于特征点匹配的图像检索方法的opencv实现
- 图像检索:基于形状特征的算法
- 基于C++和OpenCv的SIFT_图像局部特征检测算法代码的实现
- CBIR 基于内容的图像检索系统 纹理,形状,颜色和空间特征综合检索 VC++实现
- 基于一种改进的提取形状特征向量方法,实现图像检索
- 局部特征用于图像检索 Aggregating local features for Image Retrieval
- 基于Gist特征的相似图像检索
- 基于图像内容的图像检索技术——sift特征
- 图像检索:几种基于纹理特征的图像检索算法
- 基于Hadoop批量图像特征提取和检索查询的思考
- 基于图像特征的视觉跟踪系统(Feature-based visual tracking systems)--一篇综述
- 基于图像特征的检索
- CBIR: Colour Features 基于内容的图像检索:颜色特征
- 基于颜色特征的图像检索
- CBIR: Texture Features 基于内容的图像检索:纹理特征
- 基于内容的图像检索系统常用特征简介
- 局部特征与图像检索