Matlab CV ToolBox的使用之matchFeatures
2016-05-18 20:41
671 查看
Matlab的自带说明:
matchFeatures Find matching featuresINDEX_PAIRS = matchFeatures(FEATURES1, FEATURES2)
返回INDEX_PAIRS为[P,2]数组,包含最可能相关的特征点的数组。FEATURES1为[M1,N]的数组,FEATURES2为[M2,N]的数组,都可以是由FREAK描述子产生的二值特征。
[INDEX_PAIRS, MATCH_METRIC] = matchFeatures(FEATURES1, FEATURES2, ...)
除了上述返回值,还返回和INDEX_PAIRS相关的度量值MATCH_METRIC,他是[P,1]的数组。
[INDEX_PAIRS, MATCH_METRIC] = matchFeatures(...,Name, Value) specifies
附加name-value可以为:
'Method' 两个特征向量之间的距离小于MatchThreshold设置的阈值时他们为匹配的。有三种:
‘Threshold’:只是用匹配阈值。每个特征点能返回多个匹配点。
‘NearestNeighborSymmetric’:使用匹配阈值且只返回一个匹配点。只选择最近邻的匹配点。
'NearestNeighborRatio':使用匹配且消除了模糊匹配。只有当两特征点之间的最近距离满足一定比率,才符合。比率为特征点到第一个最近邻和到第二个最近邻之间的比值。
Default: 'NearestNeighborRatio'
‘MatchThreshold’ 0 < T <= 100。大于百分之T的特征点确定为匹配点。减小T可获得更多匹配。
Default: 10.0 for binary feature vectors (二分特征向量)
1.0 otherwise
'MaxRatio' 0 < R <= 1,较小R能得到更多匹配点。只能和'NearestNeighborRatio' method一起使用。
Default: 0.6
'Metric' 字符串,当FEATURES1和FEATURES2是binaryFeatures式不可用。
'SAD' : Sum of absolute differences
'SSD' : Sum of squared differences
'normxcorr' : Normalized cross-correlation
Default: 'SSD'
注意:当FATURES1和FEATURES2是binaryFeatures时,使用Hamming 距离来计算相似的度量。
'Prenormalized' 逻辑标量。TRUE表示FEATURES1和FEATURES2在匹配前已经正规化到单元向量。设置FALSE会导致FEATURES1和FEATURES2的正规化。注意,如果匹配前没有正规化将产生错误结果。FEATURES1和FEATURES2是binaryFeature的时候,参数不可用。
Default: false
注意:
% Notes
% -----
% The range of values of MATCH_METRIC varies as a function of the feature
% matching metric being used. Prior to computation of SAD and SSD
% metrics, the feature vectors are normalized to unit vectors. The table
% below summarizes the metric ranges and perfect match values:
%
% Metric Range Perfect Match Value
% ---------- ------------------------------- -------------------
% SAD [0, 2*sqrt(size(FEATURES1, 1))] 0
% SSD [0, 4] 0
% normxcorr [-1, 1] 1
%
% Hamming [0, FEATURES1.NumBits] 0
%
matlab:函数文档
%matchFeatures Find matching features
% INDEX_PAIRS = matchFeatures(FEATURES1, FEATURES2) returns a P-by-2
% matrix, INDEX_PAIRS, containing indices to the features most likely to
% correspond between the two input feature matrices. The function takes
% two inputs, FEATURES1, an M1-by-N matrix, and FEATURES2, an M2-by-N
% matrix. FEATURES1 and FEATURES2 can also be binaryFeatures objects in
% the case of binary descriptors produced by the FREAK descriptor.
%
% [INDEX_PAIRS, MATCH_METRIC] = matchFeatures(FEATURES1, FEATURES2, ...)
% also returns the metric values that correspond to the associated
% features indexed by INDEX_PAIRS in a P-by-1 matrix MATCH_METRIC.
%
% [INDEX_PAIRS, MATCH_METRIC] = matchFeatures(...,Name, Value) specifies
% additional name-value pairs described below:
%
% 'Method' A string used to specify the matching strategy. All
% three methods use the match threshold. Two feature
% vectors match when the distance between them is less
% than the threshold set by the MatchThreshold
% parameter. Set the method to one of the following:
%
% 'Threshold': Only uses the match threshold. This
% method can return more than one match for each
% feature.
%
% 'NearestNeighborSymmetric': Only returns unique
% matches in addition to using the match threshold.
% A feature vector only matches to its nearest
% neighbor in the other feature set.
%
% 'NearestNeighborRatio': Eliminates ambiguous matches
% in addition to using the match threshold. A
% feature vector is matched to its nearest neighbor
% in the other feature set, when the nearest
% neighbor satisfies a ratio test. The ratio test
% compares the distances from the feature vector to
% its first and second nearest neighbors in the
% other feature set.
%
% Default: 'NearestNeighborRatio'
%
% 'MatchThreshold' A scalar T, 0 < T <= 100, specifying a threshold
% for selecting the strongest matches. Matches having
% metrics more than T percent from a perfect match
% are rejected. Increase T to return more matches.
%
% Default: 10.0 for binary feature vectors
% 1.0 otherwise
%
% 'MaxRatio' A scalar R, 0 < R <= 1, specifying a ratio threshold
% for rejecting ambiguous matches. Increase R to return
% more matches. This parameter is used only with
% 'NearestNeighborRatio' method.
%
% Default: 0.6
%
% 'Metric' A string used to specify the feature matching
% metric. This parameter is not applicable when
% FEATURES1 and FEATURES2 are binaryFeatures objects.
% Possible values are:
% 'SAD' : Sum of absolute differences
% 'SSD' : Sum of squared differences
% 'normxcorr' : Normalized cross-correlation
%
% Default: 'SSD'
%
% Note: When FEATURES1 and FEATURES2 are binaryFeatures
% objects, Hamming distance is used to compute
% the similarity metric.
%
% 'Prenormalized' A logical scalar. Use true to indicate that FEATURES1
% and FEATURES2 are already normalized to unit vectors
% prior to matching. Setting this flag to false will
% result in normalizing FEATURES1 and FEATURES2. Note
% that setting this flag to true when features are not
% normalized in advance will produce wrong results.
% This parameter is not applicable when FEATURES1 and
% FEATURES2 are binaryFeatures objects.
%
% Default: false
%
% Notes
% -----
% The range of values of MATCH_METRIC varies as a function of the feature
% matching metric being used. Prior to computation of SAD and SSD
% metrics, the feature vectors are normalized to unit vectors. The table
% below summarizes the metric ranges and perfect match values:
%
% Metric Range Perfect Match Value
% ---------- ------------------------------- -------------------
% SAD [0, 2*sqrt(size(FEATURES1, 1))] 0
% SSD [0, 4] 0
% normxcorr [-1, 1] 1
%
% Hamming [0, FEATURES1.NumBits] 0
%
% This function changed in the release R2012b. Previous versions
% used a different matching strategy. If you need the same results
% produced by the previous implementation, use
% matchFeatures(FEATURES1, FEATURES2, 'Method', 'NearestNeighbor_old',...).
%
% Class Support
% -------------
% FEATURES1 and FEATURES2 can be logical, int8, uint8, int16, uint16,
% int32, uint32, single, double, or binaryFeatures object.
%
% The output class of INDEX_PAIRS is uint32. MATCH_METRIC is double when
% FEATURES1 and FEATURES2 are double. Otherwise, it is single.
%
% [matchLoc1 matchLoc2] = siftMatch(img1, img2) % 初匹配用Matlab自带的函数:matchFeatures(feature1,feature2,Name,Value); % % This function reads two images, finds their SIFT features, and % displays lines connecting the matched keypoints. A match is accepted % only if its distance is less than distRatio times the distance to the % second closest match. % It returns the matched points of both images, matchLoc1 = [x1,y1;x2,y2;...] % % Example: match('scene.pgm','book.pgm'); function [matchLoc1,matchLoc2] = siftMatch(img1, img2) % load matchdata % load img1data % load img2data %{, % Find SIFT keypoints for each image [des1, loc1] = sift(img1); [des2, loc2] = sift(img2); % save img1data des1 loc1,des是特征算子,loc是坐标和~ % save img2data des2 loc2 % 'Prenormalized' desPairs = matchFeatures(des1,des2,... 'MaxRatio',0.601,... 'MatchThreshold',11,... 'Prenormalized',true); matched1Points = loc1(desPairs(:,1),:); matched2Points = loc2(desPairs(:,2),:); figure; showMatchedFeatures(img1, img2, matched1Points(:,1:1:2), ... matched2Points(:,1:1:2), 'montage'); title('Putatively Matched Points (Including Outliers)'); x1 = matched1Points(:,2); x2 = matched2Points(:,2); y1 = matched1Points(:,1); y2 = matched2Points(:,1); matchLoc1 = [x1,y1]; matchLoc2 = [x2,y2]; %% 对这一段代码进行修改 % % For efficiency in Matlab, it is cheaper to compute dot products between % % unit vectors rather than Euclidean distances. Note that the ratio of % % angles (acos of dot products of unit vectors) is a close approximation % % to the ratio of Euclidean distances for small angles. % %在Matlab中,dot的运算比欧几里德的减法运算的效率更高。 % % distRatio: Only keep matches in which the ratio of vector angles from the % % nearest to second nearest neighbor is less than distRatio. % distRatio = 0.6; % % % For each descriptor in the first image, select its match to second image. % %在image1中寻找与image2相匹配的点 % des2t = des2'; % Precompute matrix transpose % matchTable = zeros(1,size(des1,1)); % for i = 1 : size(des1,1) % dotprods = des1(i,:) * des2t; % Computes vector of dot products % [vals,indx] = sort(acos(dotprods)); % Take inverse cosine and sort results % %采用反余弦和结果排序,vals是结果排序的值,index是反余弦的值 % % % Check if nearest neighbor has angle less than distRatio times 2nd. % if (vals(1) < distRatio * vals(2)) % matchTable(i) = indx(1); % else % matchTable(i) = 0; % end % end % % save matchdata matchTable % %} % % % Create a new image showing the two images side by side. % %创建一个新的图像,把两张图片都放在其中 % img3 = appendimages(img1,img2); % % % Show a figure with lines joining the accepted matches. % figure('Position', [100 100 size(img3,2) size(img3,1)]); % colormap('gray'); % imagesc(img3); % hold on; % cols1 = size(img1,2); % for i = 1: size(des1,1) % if (matchTable(i) > 0) % line([loc1(i,2) loc2(matchTable(i),2)+cols1], ... % [loc1(i,1) loc2(matchTable(i),1)], 'Color', 'c'); % end % end % hold off; % num = sum(matchTable > 0); % fprintf('Found %d matches.\n', num); % % idx1 = find(matchTable); % idx2 = matchTable(idx1); % x1 = loc1(idx1,2); % x2 = loc2(idx2,2); % y1 = loc1(idx1,1); % y2 = loc2(idx2,1); % % matchLoc1 = [x1,y1]; % matchLoc2 = [x2,y2]; end
相关文章推荐
- Matlab显示图像问题,double处理后,图像变白
- matlab膨胀和腐蚀的案例详解
- 膨胀和腐蚀在MATLAB中
- fileparts使用,切分文件得到路径及后缀
- MATLAB曲线平滑的办法
- 【转载】matlab中将数据输出保存为txt格式文件的方法
- matlab中title引入变量 [转载]
- MATLAB句柄图形对象的创建函数与函数描述
- 小游戏:用MATLAB编程验证——投掷硬币那“0.5”
- 如何让matlab用mex与C连接使用有例子
- MATLAB_2015b installation on Ubuntu 16.04
- 在win8系统下,装matlab7.0成功后运行时出现runtime error的错误怎么解决?
- 最新 VS2008 和 MatlabR2015a 混合编程
- 文章投稿时常用到的matlab作图命问题
- matlab自带princomp(PCA降维方式)
- 【MATLAB 学习笔记】 SimMechanics 流程攻略 (2)
- ubuntu 11.04上安装matlab r2011b
- matlab 设置绘图的大小,字号,线宽,字体--按投稿要求
- Matlab中凸优化工具包CVX的使用
- matlab常用代码