基于乘积量化的快速特征匹配
2018-01-17 23:43
411 查看
基于乘积量化的快速特征匹配
1、算法实现
不使用乘积量化的特征匹配方法
假设有两张图片p1、p2,分别有k1、k2个128维的sift描述子特征向量,该方法算出p1中每一个特征向量与p2中的每一个特征向量的欧式距离,距离最短的那一对特征向量构成一组匹配。该方法的计算复杂度:k1*k2*128。存储空间为:k1*128+k2*128。基于乘积量化的快速特征匹配法
1、训练码本。将待训练的图片p1、p2、p3……的每个sift描述子特征向量分为m段,将属于同一段的所有128/m维特征向量用k-means方法聚类成n个聚类中心,得到m段包含n个聚类中心的码本。对每段的聚类结果,计算任意两个聚类中心之间距离,生成一个大小为n*n的距离矩阵,共有m个这样的距离矩阵。代码如下:% 将用于训练的sift描述子向量均分为16段,每段8维 sub_vector = cell(16,1); for i = 1 : 16 sub_vector{i} = siftDescriptorTrain((i-1)*8+1:8*i,:); end C = cell(16,1); Idx = cell(16,1); opts = statset('MaxIter',300); % 对每一段进行k-means聚类,k=64 for i = 1 : 16 [Idx{i} , C{i}] = kmeans(sub_vector{i}',64,'Options',opts); end dist = cell(16,1); for i = 1 : 16 dist{i} = zeros(64,64); end % 生成16个distance matrix for i = 1 : 16 for j = 1 : 64 tmpFeat = repmat(C{i}(j,:), 64, 1); dist{i}(j,:) = (sum((tmpFeat - C{i}).^2,2))'; end end
2、将待匹配图像p1、p2的k1、k2个特征向量进行乘积量化。将每个特征向量分为m段,每段基于已经训练好的码本进行量化。量化的方法:计算该段与码本中对应段中每个聚类中心的距离,用距离最短的那个聚类中心的索引代替该段向量。对待匹配图像进行乘积量化的计算复杂度:(k1*m*n*128/m + k2*m*n*128/m) = k1*n*128 + k2*n*128。代码如下:
%% 将第一张待匹配图像的sift特征向量分为16段 feat1_vector = cell(16,1); for i = 1 : 16 feat1_vector{i} = SiftFeat_1((i-1)*8+1:8*i,:); end %% 判断待匹配图像的每个特征向量的每一段各属于哪一类 minposition = zeros(16, featNum_1); for i = 1 : 16 for j =1 : featNum_1 tmpFeat = repmat(feat1_vector{i}(:,j),1,64); d1 = sum((tmpFeat - C{i}').^2); % distance minposition(i,j) = find(d1==min(d1)); end end
3、计算p1的每个特征向量的每一段与p2的每个特征向量的对应段的距离,计算方法:根据第2步中每段的索引,在距离矩阵中找对应的两个聚类中心的距离。然后将每段距离加起来,即为特征向量间的距离。算出p1中每一个特征向量与p2中的每一个特征向量的距离,距离最短的那一对特征向量构成一组匹配。计算复杂度:k1*k2*m。代码如下:
%% 在feat2中找离feat1的距离满足一定条件的特征,构成匹配 matchInd = zeros(featNum_1, 1); matchDis = zeros(featNum_1, 1); for i = 1 : featNum_1 d = zeros(1,featNum_2); for k = 1 : 16 d(1 : featNum_2) = d(1 : featNum_2) +dist{k}( minposition(k,i) , minposition2(k,1 : featNum_2) ); end matchDis(i) = min(d); [v, ind] = sort(d); if v(1) / v(2) <= 0.64 matchInd(i) = ind(1); end end
综上,总的计算复杂度为:(k1+k2)*n*128 + k1*k2*m,当k1、k2足够大时,第一项忽略不计,则计算复杂度近似为:k1*k2*m,为不使用乘积量化的特征匹配方法的m/128。存储空间为:k1*m+k2*m。
2、实验结果
源代码
http://download.csdn.net/download/jianwen_jiang/10211051相关文章推荐
- 基于网格的运动统计,用于快速、超鲁棒的特征匹配
- 【论文】CVPR 2017论文:基于网格的运动统计,用于快速、超鲁棒的特征匹配(附代码)
- CVPR 2017论文:基于网格的运动统计,用于快速、超鲁棒的特征匹配(附大神解读)
- 9.4 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 图像特征点检测与匹配评价——量化
- 基于redis快速通讯录匹配策略
- 图像处理之积分图应用三(基于NCC快速相似度匹配算法)
- 快速字符串模糊匹配--基于Horspool的模糊匹配算法
- [置顶] 基于opencv-3.4.0的图像特征点提取及图像匹配(Java 版)
- 基于特征点匹配的车辆跟踪
- 基于尺度不变特征变换的图像匹配研究
- OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 基于Harris的特征检测与匹配
- 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- OpenCV学习笔记之二――基于Haar-like特征的层叠推进分类器快速
- 一套基于模板匹配的语音识别技术。提取语音的特征,并建立模板库,可以将语音识别技术应用于机器人
- ransac算法–基于几何关系的图像特征匹配点对提纯 ransac算法–基于几何关系的图像特征匹配点对提纯
- ransac算法–基于几何关系的图像特征匹配点对提纯
- 基于Matlab平台的视觉特征匹配与显示