MATLAB中matchFeatures函数解析
matchFeatures函数
功能:⽤于特征点匹配,是matlab中图像匹配中常⽤的函数之⼀
常⽤的调⽤格式有以下⼏种:
indexPairs = matchFeatures(features1,features2);
[indexPairs,matchmetric] = matchFeatures(features1,feature2);
[indexPairs,matchmetric]=matchFeatures(features1,feature2,Name,Value);
其中,features1,features2是提取出的特征描述⼦;indexPairs为nx2的向量,即互相匹配的n对点所对应的坐标索引;matchmetric为匹配后的特征描述⼦之间的测度值;Name为⽤⼀对单引号包含的字符串,Value为对应Name的值。
false是什么函数Name&Value参数
Name Value
‘Method’默认值为’NearestNeighborRatio’,表⽰进⾏匹配时所⽤⽅法,详细见“Method及其含义"表
‘MatchThreshold’对于2-值型特征向量,默认值为10.0,对于⾮2-值型特征向量,默认值为1.0,范围(0,100),为百分⽐值,表⽰选择最强的匹配的百分⽐,取较⼤值时,返回更多的匹配对
’Metric’仅对输⼊⾮2-值型特征向量有⽤,表⽰特征匹配的测度,默认值为SSD(差的平⽅和),还可以取值为SAD(绝对差之和)和normcorr(归⼀化交叉相关)注:对于2-值型特征向量,默认使⽤Hamming距离作为测度
‘Prenormalized’仅对输⼊⾮2-值型特征向量有⽤,默认值为false,若置为true,表⽰在进⾏特征匹配前特征都进⾏归⼀化(如果输⼊的没有进⾏归⼀化,匹配结果可能出错),若置为false,函数进⾏归⼀化后再进⾏匹配。
’MaxRatio’默认值为0.6,范围为(0,1],配合‘Method’取‘NearestNeighborRatio’使⽤,消除匹配模糊Method及其含义
Method含义
‘Threshold’仅使⽤匹配阈值,可能导致⼀个特征有多个匹配特征
’NearestNeighborSymmetric’结合匹配阈值,产⽣⼀⼀对应的匹配结果
‘NearestNeighborRatio’结合匹配阈值消除匹配模糊(匹配模糊定义为:如果第⼀个匹配的特征不能明显优于第⼆个匹配特征时),那么如下定义额⽐值测试(the ratio test)⽤于决策:
1. 计算features1和feaures2中任意两个特征之间的最近距离: D
2. 计算feature1中相同特征到feature2特征空间之间的第⼆近距离: d
3.如果两个距离的⽐值D/d⼤于MaxRaio时,可以消除匹配模糊。
注:这个⽅法可以产⽣更加鲁棒性的匹配,同时,如果图像中存在重复模式(repeating patterns),该⽅法为了消除匹配模糊,可能会消除合理的匹配特征
⽰例
close all;
clear all;
clc;
I1 = rgb2gray(imread('viprectification_deskLeft.png'));
I2 = rgb2gray(imread('viprectification_deskRight.png'));
points1 = detectHarrisFeatures(I1);
points2 = detectHarrisFeatures(I2);
[features1,valid_points1] = extractFeatures(I1,points1); [features2,valid_points2] = extractFeatures(I2,points2);
indexPairs = matchFeatures(features1,features2);
matchedPoints1 = valid_points1(indexPairs(:,1)); matchedPoints2 = valid_points2(indexPairs(:,2));
figure;
showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2);