局部特征检测与提取
局部特征及其描述符是局部邻域的一个紧凑向量表示,是许多计算机视觉算法的构建模块。它们的应用包括图像配准、目标检测和分类、跟踪和运动估计。使用局部特征使这些算法能够更好地处理尺度变化、旋转和遮挡。计算机视觉工具箱™提供了FAST、Harris、ORB和Shi & Tomasi方法用于检测角落特征,以及SIFT、SURF、KAZE和MSER方法用于检测斑点特征。工具箱包括SIFT、SURF、KAZE、FREAK、BRISK、ORB和HOG描述符。您可以根据应用程序的需求混合和匹配检测器和描述符。有关更多细节,请参见点特征类型.
什么是本地特色?
局部特征是指在图像中发现的模式或独特的结构,如点、边缘或小图像补丁。它们通常与在纹理、颜色或强度上与周围环境不同的图像补丁相关。特征实际上代表什么并不重要,重要的是它与周围环境的区别。局部特征的例子是斑点、角和边缘像素。
I = imread(“circuit.tif”);拐角= detectFASTFeatures(I,MinContrast=0.1);J = insertMarker(I,corners,“圆”);imshow (J)
本地特性的优点和应用
局部特征让你找到图像的对应关系,而不管遮挡,观察条件的变化,或杂波的存在。此外,局部特征的性质使其适合于图像分类,如用视觉词袋进行图像分类.
局部特征有两种基本用法:
定位锚点以用于图像拼接或三维重建。
为检测或分类而紧凑地表示图像内容,而不需要图像分割。
应用程序 | MATLAB的例子 |
---|---|
图像配准与拼接 | 基于特征的全景图像拼接 |
对象检测 | 基于点特征匹配的杂乱场景目标检测 |
对象识别 | 利用HOG特征进行数字分类 |
对象跟踪 | 基于KLT算法的人脸检测与跟踪 |
图像类别识别 | 利用特征袋进行图像分类 |
寻找立体系统的几何图形 | 未经校准的立体图像校正 |
三维重建 | 从两种视角看运动的结构,结构从运动从多个视角 |
图像检索 | 利用自定义特征袋进行图像检索 |
优秀的本地特色是什么?
检测器依赖于基于梯度和强度变化的方法检测良好的局部特征。这些特征包括边、斑点和区域。好的局部特征表现出以下特性:
可重复检测:
当给出同一场景的两张图像时,检测器在这两张图像中发现的大多数特征是相同的。这些特征对观看条件和噪声的变化具有鲁棒性。独特的:
特征中心周围的邻居变化足够大,可以在特征之间进行可靠的比较。可以定位的:
该特性有一个分配给它的唯一位置。观察条件的变化不影响它的位置。
特征检测与特征提取
特征检测选择图像中具有独特内容的区域,如角或斑点。使用特征检测来查找可用于进一步处理的感兴趣点。这些点并不一定对应于物理结构,如桌子的角。特征检测的关键是找到保持局部不变的特征,这样即使在旋转或缩放变化的情况下也可以检测到它们。
特征提取涉及计算描述符,这通常是在以检测到的特征为中心的区域上完成的。描述符依靠图像处理将局部像素邻域转换为紧凑的向量表示。这种新的表示方式允许在邻里之间进行比较,而不考虑规模或方向的变化。描述符,如SIFT或SURF,依赖于局部梯度计算。二进制描述符,如BRISK、ORB或FREAK,依赖于局部强度差异对,然后将其编码为二进制向量。
选择一个特征检测器和描述符
考虑应用程序的标准和数据的性质,选择最佳的特征检测器和描述符。第一个表帮助您理解驱动选择的一般标准。接下来的两个表提供了有关“计算机视觉工具箱”中可用的检测器和描述符的详细信息。
选择检测器和描述符的注意事项
标准 | 建议 |
---|---|
图像中的特征类型 |
使用适合您的数据的检测器。例如,如果您的图像包含细菌细胞的图像,使用斑点检测器而不是角落检测器。如果你的图像是一个城市的鸟瞰图,你可以使用角落探测器来寻找人造建筑。 |
使用特性的上下文:
|
HOG、SURF和KAZE描述符适用于分类任务。相反,二进制描述符(如ORB、BRISK和FREAK)通常用于查找图像之间的点对应关系,这些对应关系用于配准。 |
图像中出现的失真类型 |
选择能够解决数据失真问题的检测器和描述符。例如,如果没有出现刻度变化,则考虑使用不处理刻度的拐角检测器。如果您的数据包含更高级别的失真,例如缩放和旋转,那么使用SIFT、SURF、ORB或KAZE特征检测器和描述符。SURF和KAZE方法计算量很大。 |
性能需求:
|
二进制描述符通常比基于梯度的描述符更快,但准确性较低。为了获得更高的精确度,可以同时使用多个检测器和描述符。 |
根据特征类型选择检测功能
探测器 | 功能类型 | 函数 | 规模的独立 |
---|---|---|---|
快[1] | 角落里 | detectFASTFeatures |
没有 |
最小特征值算法[4] | 角落里 | detectMinEigenFeatures |
没有 |
角落探测器[3] | 角落里 | detectHarrisFeatures |
没有 |
筛选[14] | 团 | detectSIFTFeatures |
是的 |
冲浪[11] | 团 | detectSURFFeatures |
是的 |
KAZE[12] | 团 | detectKAZEFeatures |
是的 |
轻快的[6] | 角落里 | detectBRISKFeatures |
是的 |
女士[8] | 强度均匀区域 | detectMSERFeatures |
是的 |
ORB[13] | 角落里 | detectORBFeatures |
没有 |
请注意
检测函数返回包含特性信息的对象。的extractHOGFeatures
而且extractFeatures
函数使用这些对象来创建描述符。
选择描述符方法
描述符 | 二进制 | 功能和方法 | 不变性 | 典型的使用 | ||
---|---|---|---|---|---|---|
规模 | 旋转 | 寻找点对应关系 | 分类 | |||
猪 | 没有 | extractHOGFeatures (我 ,……) |
没有 | 没有 | 没有 | 是的 |
枸杞多糖 | 没有 | extractLBPFeatures (我 ,……) |
没有 | 是的 | 没有 | 是的 |
筛选 | 没有 | extractFeatures (我 ,点 ,方法 =“筛选” ) |
是的 | 是的 | 是的 | 是的 |
冲浪 | 没有 | extractFeatures (我 ,点 ,方法 =“冲浪” ) |
是的 | 是的 | 是的 | 是的 |
KAZE | 没有 | extractFeatures (我 ,点 ,方法 =“KAZE” ) |
是的 | 是的 | 是的 | 是的 |
狂 | 是的 | extractFeatures (我 ,点 ”,方法 =“怪胎” ) |
是的 | 是的 | 是的 | 没有 |
轻快的 | 是的 | extractFeatures (我 ,点 ”,方法 =“快” ) |
是的 | 是的 | 是的 | 没有 |
ORB | 是的 | extractFeatures (我 ,点 ”,方法 =“球” ) |
没有 | 是的 | 是的 | 没有 |
|
没有 | extractFeatures (我 ,点 ”,方法 =“块” ) |
没有 | 没有 | 是的 | 是的 |
请注意
的
extractFeatures
函数提供了不同的提取方法,以最佳地匹配应用程序的需求。当您没有指定“方法”
的输入extractFeatures
函数,该函数根据输入点类的类型自动选择方法。二进制描述符速度很快,但在本地化方面不够精确。它们不适合用于分类任务。的
extractFeatures
函数返回一个binaryFeatures
对象。对象启用基于汉明距离的匹配度量matchFeatures
函数。
使用本地特性
配准两个图像是了解局部特征的一种简单方法。这个示例查找两个图像之间的几何变换。它使用局部特征来查找本地化良好的锚点。
显示两个图像
第一个图像是原始图像。
原文= imread(“cameraman.tif”);图imshow(原始);
第二张图像是经过旋转和缩放的原始图像。
规模= 1.3;J = imresize(原始,比例);Theta = 31;distortion = imrotate(J,theta);图imshow(扭曲)
检测原始图像与失真图像之间的匹配特征
检测匹配的SURF特征是确定校正失真图像所需的变换的第一步。
ptsorigoriginal = detectsurfeatures(原始);ptsdistortion = detectsurfeatures(扭曲的);
提取特征并比较两幅图像中检测到的斑点
检测步骤在两幅图像中发现了几个大致对应的blob结构。比较检测到的blob特征。这一过程通过特征提取来实现,特征提取确定了本地补丁描述符。
[featuresOriginal, validPtsOriginal] =...extractFeatures(原,ptsOriginal);[featuresDistorted, validPtsDistorted] =...extractFeatures(扭曲,ptsDistorted);
有可能不是所有的原始点都被用来提取描述符。如果点太接近图像边界,它们可能会被拒绝。因此,除了特征描述符之外,还返回有效点。
用于计算描述符的补丁大小在特征提取步骤中确定。补丁大小对应于检测到的特征的尺度。不管补丁大小如何,这两个特征向量,featuresOriginal
而且featuresDistorted
,它们的长度相等。描述符使您能够比较检测到的特征,而不考虑它们的大小和旋转。
查找候选匹配
的描述符来获取特征之间的候选匹配matchFeatures
函数。候选匹配意味着结果可能包含一些无效的匹配。两个匹配的补丁可以表示相似的特征,但可能不是正确的匹配。桌子角可以看起来像椅子角,但这两个功能显然不匹配。
indexPairs = matchFeatures(featuresOriginal, featuresdistortion);
从两个图像中找出点的位置
返回的每一行indexPairs
包含图像之间候选特征匹配的两个指标。使用索引从两个图像中收集实际的点位置。
matchedOriginal = validptsorigoriginal (indexPairs(:,1));matcheddistortion = validptsdistortion (indexPairs(:,2));
显示候选匹配项
图showMatchedFeatures(original, distortion,matchedOriginal, matcheddistortion)“候选匹配点(包括异常值)”)
分析特征位置
如果有效匹配的数量足够多,则删除错误匹配。对于这种场景,一种有效的技术是RANSAC算法。的estgeotform2d
函数实现了m估计样本一致性(MSAC),这是RANSAC算法的一个变体。MSAC找到一个几何变换,并将内值(正确匹配)与异常值(虚假匹配)分离开来。
[tform,inlierIdx] = estgeotform2d(matcheddistortion,inlierIdx)...matchedOriginal,“相似”);inlier失真= matcheddistortion (inlierIdx,:);inlierOriginal = matchedOriginal(inlierIdx,:);
显示匹配点
图showMatchedFeatures(original, distortion,inlierOriginal, inlierdistortion)“匹配点(仅内嵌)”)传说(“ptsOriginal”,“ptsDistorted”)
验证计算的几何变换
将计算得到的几何变换应用于变形图像。
outputView = imref2d(size(original));recovered = imwarp(distortion,tform,OutputView= OutputView);
显示恢复后的图像和原始图像。
图imshowpair(原始的,恢复,“蒙太奇”)
使用多种功能的图像配准
此示例建立在“使用本地特性”示例的结果之上。使用多个检测器和描述符对使您能够组合和加强结果。当使用单个特征检测器无法获得足够好的匹配(inlier)时,多个对也很有用。
加载原始图像。
原文= imread(“cameraman.tif”);图imshow(原始);文本(大小(原始的,2),大小(原始的,1)+ 15,...图片由麻省理工学院提供,...字形大小= 7,HorizontalAlignment =“对”);
缩放和旋转原始图像,以创建扭曲的图像。
规模= 1.3;J = imresize(原始,比例);Theta = 31;distortion = imrotate(J,theta);图imshow(扭曲)
检测两个图像中的特征。首先使用BRISK检测器,然后是SURF检测器。
ptsOriginalBRISK = detectBRISKFeatures(original,MinContrast=0.01);ptdistortion brisk = detectBRISKFeatures(distortion,MinContrast=0.01);ptsOriginalSURF = detectsurfeatures(原始);ptsdistortion surf = detectsurfeatures(失真);
从原始和扭曲的图像中提取描述符。BRISK特性默认使用FREAK描述符。
[featuresOriginalFREAK, validPtsOriginalBRISK] =...extractFeatures(原,ptsOriginalBRISK);[featuresDistortedFREAK, validPtsDistortedBRISK] =...extractFeatures(扭曲,ptsDistortedBRISK);[featuresOriginalSURF, validPtsOriginalSURF] =...extractFeatures(原,ptsOriginalSURF);[featuresDistortedSURF, validPtsDistortedSURF] =...extractFeatures(扭曲,ptsDistortedSURF);
通过首先匹配FREAK描述符,然后匹配SURF描述符来确定候选匹配。为了获得尽可能多的特征匹配,从低于默认值的检测器和匹配阈值开始。一旦您得到了一个工作的解决方案,您可以逐渐增加阈值,以减少提取和匹配特征所需的计算负载。
indexPairsBRISK = matchFeatures(featuresOriginalFREAK,...featuresDistortedFREAK MatchThreshold = 40, MaxRatio = 0.8);indexPairsSURF =匹配特征(featuresOriginalSURF, featuresdistortion surf);
获得BRISK和SURF的候选匹配点。
matchedOriginalBRISK = validPtsOriginalBRISK(indexPairsBRISK(:,1));matcheddistortion brisk = validptsdistortion brisk (indexPairsBRISK(:,2));matchedOriginalSURF = validPtsOriginalSURF(indexPairsSURF(:,1));matched失真冲浪= validpts失真冲浪(indexPairsSURF(:,2));
想象BRISK假定的匹配。
图showMatchedFeatures (matchedOriginalBRISK原始的,扭曲的,...matchedDistortedBRISK)标题(“假定的匹配使用BRISK和FREAK”)传说(“ptsOriginalBRISK”,“ptsDistortedBRISK”)
结合候选匹配的BRISK和SURF本地特征。使用位置
属性来结合BRISK和SURF功能中的点位置。
matchedOriginalXY =...[matchedOriginalSURF.Location;matchedOriginalBRISK.Location];matchedDistortedXY =...[matchedDistortedSURF.Location;matchedDistortedBRISK.Location];
确定BRISK和SURF特征的内嵌点和几何变换。
[tformTotal,inlierIdx] = estgeotform2d(matcheddistortion xy,inlierIdx),...matchedOriginalXY,“相似”);inlier失真xy = matcheddistortion xy (inlierIdx,:);inlierOriginalXY = matchedOriginalXY(inlierIdx,:);
显示结果。结果比使用单一特征检测器的示例多提供了几个匹配项。
figure showMatchedFeatures(original, distortion,inlierOriginalXY, inlierdistortion xy)'使用SURF和BRISK匹配点(仅限inliers)')传说(“ptsOriginal”,“ptsDistorted”)
比较原始图像和恢复图像。
outputView = imref2d(size(original));recovered = imwarp(distortion,tformTotal,OutputView= OutputView);图imshowpair(原始的,恢复,“蒙太奇”)
参考文献
[1]罗斯滕,E,和t。德拉蒙德。《高速拐角检测的机器学习》第九届欧洲计算机视觉会议.第1卷,2006,第430-443页。
[2]米科拉契克,K.和C.施密德。“局部描述符的性能评估。”模式分析与机器智能汇刊。2005年第10期,第27卷第1615-1630页。
[3]哈里斯C和M. J.斯蒂芬斯。“角和边缘联合探测器。”第四届阿尔维视觉会议论文集.1988年8月,第147-152页。
[4] Shi, J.和C. Tomasi。“值得追踪的好特性。”IEEE计算机视觉与模式识别会议论文集.1994年6月,第593-600页。
[5] Tuytelaars, T.和K. Mikolajczyk。局部不变特征检测器:概论。计算机图形与视觉基础与趋势“,.2007年第3期,第177-280页。
[6]卢滕艾格,S., M. Chli, R. Siegwart。二进制健壮不变可扩展关键点。IEEE国际会议论文集.ICCV, 2011年。
[7]尼斯特,D.和H. Stewenius。"线性时间最大稳定极值区域"第十届欧洲计算机视觉会议.马赛,法国:2008年,第5303号,183-196页。
[8]马塔斯,J., O. Chum, M. Urba, T. Pajdla。"从最稳定的极值区域获得强大的宽基线立体声"英国机器视觉会议论文集.2002,第384-396页。
[9] Obdrzalek D., S. Basovnik, L. Mach和A. Mikulik。"使用最大稳定的色彩区域检测场景元素"计算机与信息科学通信“,.La Ferte-Bernard,法国:2009,卷82,CCIS(2010 12 01),页107-115。
[10]米科拉奇克,K, T.图伊特拉斯,C.施密德,A.齐瑟曼,T.卡迪尔,L.凡古尔。仿射区域探测器的比较。国际计算机视觉杂志.2005年11月,第65卷1-2号,43-72页。
[11]贝,H., A. Ess, T. Tuytelaars和L. Van Gool。“SURF:加速健壮的功能。”计算机视觉与图像理解(CVIU).2008年第3期,第110卷第346-359页。
[12]阿尔坎塔利拉,p.f., A.巴托利,A. j .戴维森。“KAZE功能”,ECCV 2012,第VI部分,LNCS 75772012年第214页
[13]鲁布礼,E., V. Rabaud, K. Konolige和G. Bradski。“ORB: SIFT或SURF的有效替代品。”在2011年计算机视觉国际会议论文集, 2564 - 2571。2011年,西班牙巴塞罗那。
[14] Lowe, David G..“来自比例不变关键点的独特图像特征。”Int。j .第一版。愿景60,不。2(2004): 91—110。