资源简介
用matlab实现了基于乘积量化的快速sift特征匹配,相比于传统的特征比配方法,提高了匹配的速度。
代码片段和文件信息
clear;
close all;
clc;
% 加载用于训练的sift描述子向量
load siftTrain.mat;
% 将用于训练的sift描述子向量均分为16段,每段8维
sub_vector = cell(161);
for i = 1 : 16
sub_vector{i} = siftDescriptorTrain((i-1)*8+1:8*i:);
end
C = cell(161);
Idx = cell(161);
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(161);
for i = 1 : 16
dist{i} = zeros(6464);
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}).^22))‘;
end
end
%tic
%% Load two images and their SIFT features
src_1 = ‘./test images/ukbench00000.jpg‘;
src_2 = ‘./test images/ukbench00003.jpg‘;
ext1 = ‘.dsift‘; %‘.vsift_640‘; % extension name of SIFT file
ext2 = ‘.dsift‘; %‘.vsift_640‘; % extension name of SIFT file
siftDim = 128;
%% load image
im_1 = imread(src_1);
im_2 = imread(src_2);
%% 读取sift特征
featPath_1 = [src_1 ext1];
featPath_2 = [src_2 ext2];
fid_1 = fopen(featPath_1 ‘rb‘);
featNum_1 = fread(fid_1 1 ‘int32‘); % �ļ���SIFT��������Ŀ
SiftFeat_1 = zeros(siftDim featNum_1);
paraFeat_1 = zeros(4 featNum_1);
for i = 1 : featNum_1 % �����ȡSIFT����
SiftFeat_1(: i) = fread(fid_1 siftDim ‘uchar‘); %�ȶ���128ά������
paraFeat_1(: i) = fread(fid_1 4 ‘float32‘); %�ٶ���[x y scale orientation]��Ϣ
end
fclose(fid_1);
fid_2 = fopen(featPath_2 ‘rb‘);
featNum_2 = fread(fid_2 1 ‘int32‘); % �ļ���SIFT��������Ŀ
SiftFeat_2 = zeros(siftDim featNum_2);
paraFeat_2 = zeros(4 featNum_2);
for i = 1 : featNum_2 % �����ȡSIFT����
SiftFeat_2(: i) = fread(fid_2 siftDim ‘uchar‘); %�ȶ���128ά������
paraFeat_2(: i) = fread(fid_2 4 ‘float32‘); %�ٶ���[x y scale orientation]��Ϣ
end
fclose(fid_2);
%% 将第一张待匹配图像的sift特征向量分为16段
feat1_vector = cell(161);
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)164);
d1 = sum((tmpFeat - C{i}‘).^2); % distance
minposition(ij) = find(d1==min(d1));
end
end
%% 将第二张待匹配图像的sift特征向量分为16段
feat2_vector = cell(161);
for i = 1 : 16
feat2_vector{i} = SiftFeat_2((i-1)*8+1:8*i:);
end
%% 判断待匹配图像的每个特征向量的每一段各属于哪一类
minposition2 = zeros(16 featNum_2);
for i = 1 : 16
for j =1 : featNum_2
tmpFeat = repmat(feat2_vector{i}(:j)164);
d1 = sum((tmpFeat - C{i}‘).^2); % distance
minposition2(ij) = find(d1==min(d1));
end
end
%% 在feat2中找离feat1的距离满足一定条件的特征,构成匹配
matchInd = zeros(featNum_1 1);
matchDis = zeros(featNum_1 1);
for i = 1 : featNum_1
d = zeros(1featNum_2);
for k = 1 : 16
d(1 : featNum_2) = d(1 : featNum_2) +dist{k}( minposition(ki) minposition2(k1 : featNum_2) );
end
matchDis(i) = min(d);
[v ind] = sort(d);
if v(1) / v(2) <= 0.64
matchInd(i) = ind(1);
end
end
%% 可视化
[row col cn] = siz
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-11-15 15:42 test images\
文件 243673 2013-12-05 23:17 test images\ukbench00000.jpg
文件 696244 2014-03-16 05:45 test images\ukbench00000.jpg.dsift
文件 246526 2013-12-05 23:17 test images\ukbench00001.jpg
文件 545332 2014-03-16 05:45 test images\ukbench00001.jpg.dsift
文件 218653 2013-12-05 23:17 test images\ukbench00002.jpg
文件 741028 2014-03-16 05:45 test images\ukbench00002.jpg.dsift
文件 269422 2013-12-05 23:17 test images\ukbench00003.jpg
文件 674068 2014-03-16 05:46 test images\ukbench00003.jpg.dsift
文件 152703 2013-12-05 23:17 test images\ukbench00012.jpg
文件 154228 2014-03-16 05:46 test images\ukbench00012.jpg.dsift
文件 155830 2013-12-05 23:17 test images\ukbench00013.jpg
文件 154948 2014-03-16 05:46 test images\ukbench00013.jpg.dsift
文件 175983 2013-12-05 23:17 test images\ukbench00014.jpg
文件 103828 2014-03-16 05:46 test images\ukbench00014.jpg.dsift
文件 168753 2013-12-05 23:17 test images\ukbench00015.jpg
文件 107284 2014-03-16 05:46 test images\ukbench00015.jpg.dsift
文件 153642 2006-10-05 01:11 test images\ukbench00052.jpg
文件 140404 2014-03-16 05:47 test images\ukbench00052.jpg.dsift
文件 160703 2006-10-05 01:11 test images\ukbench00053.jpg
文件 149332 2014-03-16 05:47 test images\ukbench00053.jpg.dsift
文件 144807 2006-10-05 01:11 test images\ukbench00054.jpg
文件 153508 2014-03-16 05:47 test images\ukbench00054.jpg.dsift
文件 151801 2006-10-05 01:11 test images\ukbench00055.jpg
文件 139252 2014-03-16 05:47 test images\ukbench00055.jpg.dsift
文件 172114 2006-10-05 01:11 test images\ukbench00080.jpg
文件 114628 2014-03-16 05:48 test images\ukbench00080.jpg.dsift
文件 181878 2006-10-05 01:11 test images\ukbench00081.jpg
文件 135940 2014-03-16 05:48 test images\ukbench00081.jpg.dsift
文件 154145 2006-10-05 01:11 test images\ukbench00082.jpg
文件 162436 2014-03-16 05:48 test images\ukbench00082.jpg.dsift
............此处省略13个文件信息
- 上一篇:英语单词数据库从小学到大学
- 下一篇:MATLAB遗传算法工具箱及应用.zip
相关资源
- 三种sift的matlab代码
- Matlab实现SIFT三幅图像拼接
- SIFT程序实现
- matlab实现sift算法的图像拼接
- SIFT算法的MATLAB 代码,可直接运行
- sift特征检测的matlab程序实现
- matlab sift特征提取
- 改良的SIFT算法的Matlab代码
- 基于MATLAB的图像特征匹配
- SIFT算子MatLab实现源码及帮助文档
- SIFT matlab实现源码
- matlab实现的sift的图像拼接
- SIFT特征最经典的paper中文和英文总结
- SIFT tutorial(matlab版本的sift源码和详细
- SIFT复制粘贴篡改检测
- 基于sift和SVM算法实现的手势识别 MA
- 基于SIFT的超分辨率图像配准及MATLAB实
- sift图片拼接matlab
- SIFT算法的matlab实现
- SIFT特征提取
- FAST检测角点+SIFT特征描述符描述角点
- sift配准 matlab代码
- 基于SIFT特征的图像配准Matlab源代码
- matlab实现的基于颜色直方图的特征匹
- matlab实现sift提取特征点,SIFT算法的相
- 可运行的matlab-SIFT.zip
- 基于特征匹配和RANSAC的三维点云拼接
- sift特征点提取和两幅图像的特征点匹
- sift算法生成全景图matlab
- sift特征点检测及图像拼接
评论
共有 条评论