主要内容

matchFeatures

找到匹配的特征

描述

例子

indexPairs= matchFeatures (features1features2返回两个输入特征集中匹配特征的索引。输入特征必须是其中之一binaryFeatures对象或矩阵。

indexPairsmatchmetric= matchFeatures(features1features2还返回匹配特征之间的距离,索引为indexPairs

indexPairsmatchmetric= matchFeatures(features1features2名称=值使用一个或多个名称-值参数以及以前语法中的参数组合指定选项。例如,matchFeatures(__、方法=“详尽”)将匹配方法设置为详尽的

例子

全部折叠

使用局部邻域和Harris算法在一对图像之间找到相应的兴趣点。

阅读立体图像。

I1 = im2gray(imread(“viprectification_deskLeft.png”));I2 = im2gray(imread(“viprectification_deskRight.png”));

找到角落。

points1 = detectHarrisFeatures(I1);points2 = detectHarrisFeatures(I2);

提取邻域特征。

[featres1,valid_points1] = extractFeatures(I1,points1);[featres2,valid_points2] = extractFeatures(I2,points2);

匹配功能。

indexPairs = matchFeatures(featres1, featres2);

检索每个图像对应点的位置。

matchedPoints1 = valid_points1(indexPairs(:,1),:);matchedPoints2 = valid_points2(indexPairs(:,2),:);

想象对应的点。您可以看到两个图像之间的转换效果,尽管有几个错误的匹配。

图;showMatchedFeatures (I1、I2 matchedPoints1 matchedPoints2);

图中包含一个轴对象。axis对象包含image、line等类型的4个对象。

读这两幅图。

I1 = imread(“cameraman.tif”);I2 = imresize(imrotate(I1,-20),1.2);

查找SURF特性。

points1 = detectsurffatures (I1);points2 = detectsurffatures (I2);

提取特征。

[f1,vpts1] = extractFeatures(I1,points1);[f2,vpts2] = extractFeatures(I2,points2);

检索匹配点的位置。

indexPairs = matchFeatures(f1,f2);matchedPoints1 = vpts1(indexPairs(:,1));matchedPoints2 = vpts2(indexPairs(:,2));

显示匹配点。数据仍然包含几个异常值,但是您可以看到旋转和缩放对匹配特征显示的影响。

图;showMatchedFeatures (I1、I2 matchedPoints1 matchedPoints2);传奇(“匹配点1”“匹配点2”);

图中包含一个轴对象。axis对象包含image、line等类型的4个对象。这些对象代表匹配点1,匹配点2。

输入参数

全部折叠

特征集1,指定为abinaryFeatures对象,一个1——- - - - - -N矩阵,或作为点特征之一的对象中所述点特征类型.矩阵包含1特性,N对应于每个特征向量的长度。您可以获取binaryFeatures对象使用extractFeatures函数使用快速视网膜关键点(FREAK),定向fast和旋转BRIEF (ORB),或二进制鲁棒不变可伸缩关键点(BRISK)描述符方法。

特征集1,指定为abinaryFeatures对象,一个1——- - - - - -N矩阵,或作为点特征之一的对象中所述点特征类型.矩阵包含1特性,N对应于每个特征向量的长度。您可以获取binaryFeatures对象使用extractFeatures函数使用快速视网膜关键点(FREAK),定向fast和旋转BRIEF (ORB),或二进制鲁棒不变可伸缩关键点(BRISK)描述符方法。

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:方法=“详尽”将匹配方法设置为详尽的

匹配方法,指定为“详尽”“近似”.该方法指定最近邻居之间的距离features1而且features2被发现。当两个特征向量之间的距离小于方法设置的阈值时,则两个特征向量匹配MatchThreshold参数。

“详尽”

计算特征向量之间的成对距离features1而且features2

“近似”

使用有效的近似最近邻搜索。将此方法用于大型特征集。[3]

匹配阈值,指定为范围(0,100)中的标量百分比值。默认值设置为任意一种10.0对于二进制特征向量或1.0对于非二元特征向量。可以使用匹配阈值来选择最强的匹配。阈值表示距离完美匹配距离的百分比。

当两个特征向量之间的距离小于所设置的阈值时,两个特征向量匹配MatchThreshold.的值时,函数拒绝匹配MatchThreshold.增加该值以返回更多匹配项。

输入是binaryFeatures对象通常需要较大的匹配阈值。的extractFeatures函数返回binaryFeatures对象在提取FREAK、ORB或BRISK描述符时。

比率阈值,指定为范围(0,1]中的标量比率值。使用max比例拒绝模糊匹配。增加此值以返回更多匹配项。

特征匹配度量,指定为“悲伤”“SSD”

“悲伤” 绝对差的和
“SSD” 差的平方和

当输入特征设置为:features1而且features2,都不是binaryFeatures对象。当您将特性指定为binaryFeatures对象,该函数使用汉明距离来计算相似度度量。

唯一匹配,指定为真正的.将此值设置为真正的仅返回between之间的唯一匹配项features1而且features2

当你设置独特的,函数返回between的所有匹配项features1而且features2.中的多个特性features1能匹配到一个功能吗features2

表示特征1的列,表项1和3圈起来,指向表示特征2的列的表项2

当你设置独特的真正的时,函数执行前后匹配来选择唯一的匹配。匹配后features1features2,它匹配features2features1并保持最好的匹配。

输出参数

全部折叠

两个输入特征集之间对应特征的索引,作为a返回P的-by-2矩阵P索引数。每个索引对对应于索引之间的匹配特征features1而且features2输入。第一个元素索引了其中的特征features1.第二个元素索引中匹配的特征features2

匹配特征之间的距离,返回为p1的向量。距离的值基于所选择的度量。每一个第Th元素matchmetric对应于第Th行indexPairs输出矩阵。当度规设置为悲伤的固态硬盘,计算前将特征向量归一化为单位向量。

度规 范围 完全匹配值
悲伤的 02√6大小features12)))。 0
固态硬盘 04 0
汉明 0, features1。NumBits 0

参考文献

[1]罗维,大卫·G。“来自比例不变关键点的独特图像特征。”国际计算机视觉杂志.第60卷第2期,第91-110页。

Muja M.和D. G. Lowe。“二进制特征的快速匹配”计算机与机器人视觉会议“,.CRV, 2012年。

Muja M.和D. G. Lowe。具有自动算法配置的快速近似最近邻计算机视觉理论与应用国际会议.VISAPP, 2009年。

[4] Rublee, E. V. Rabaud, K. Konolige和G. Bradski。“ORB: SIFT或SURF的有效替代方案。”在2011年计算机视觉国际会议论文集, 2564 - 2571。2011年,西班牙巴塞罗那。

扩展功能

版本历史

在R2011a中引入