局部特征及其描述符是局部邻域的紧凑向量表示,是许多计算机视觉算法的构建模块。它们的应用包括图像配准、目标检测和分类、跟踪和运动估计。使用局部特征使这些算法能够更好地处理比例变化、旋转和遮挡。计算机视觉工具箱™提供了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,角,“圆”);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 (我 ,点 ,'方法 ”、“ORB ”) |
没有 | 是的 | 是的 | 没有 |
|
没有 | extractFeatures (我 ,点 ,'方法 ”、“块 ”) |
没有 | 没有 | 是的 | 是的 |
请注意
的extractFeatures
函数提供不同的提取方法,以最佳地匹配应用程序的需求。时,没有指定“方法”
的输入extractFeatures
函数时,该函数根据输入点类的类型自动选择方法。
二进制描述符速度快,但在定位方面不够精确。它们不适合分类任务。的extractFeatures
函数返回binaryFeatures
对象。对象中使用的基于汉明距离的匹配度量matchFeatures
函数。
注册两个图像是理解局部特征的一种简单方法。本例查找两个图像之间的几何变换。它使用局部特征来寻找局部化良好的锚点。
显示两个图像
第一个图像是原始图像。
原文= imread(“cameraman.tif”);图;imshow(原始);
第二张图像是旋转和缩放的原始图像。
量表= 1.3;J = imresize(original,scale);Theta = 31;扭曲= imrotate(J, θ);图imshow(扭曲)
检测原始图像与失真图像之间的匹配特征
检测匹配的SURF特征是确定校正失真图像所需变换的第一步。
ptsorigoriginal =检测特征(原始);ptsdistortion = detectsurfeatuatures(扭曲的);
提取特征,比较两幅图像中检测到的斑点
检测步骤在两幅图像中都发现了几个大致对应的斑点结构。比较检测到的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算法是一种有效的技术。的estimateGeometricTransform2D
函数实现了m估计样本共识(MSAC),它是RANSAC算法的变体。MSAC查找几何变换,并将内线(正确匹配)与异常值(虚假匹配)分开。
[tform, inlierIdx] = estimateGeometricTransform2D(...matchedDistorted matchedOriginal,“相似”);inlierIdx = matcheddistortion (inlierIdx,:);inlierOriginal = matchedOriginal(inlierIdx,:);
显示匹配点
图showMatchedFeatures(original, distortion,inlierOriginal, inlierdistortion)匹配点(仅限内线))传说(“ptsOriginal”,“ptsDistorted”)
验证计算的几何变换
将计算得到的几何变换应用于失真图像。
outputView = imref2d(size(original));恢复= imwarp(扭曲的,tform,“OutputView”, outputView);
显示恢复后的图像和原始图像。
图imshowpair(原始的,恢复,“蒙太奇”)
本例基于“使用本地特性”示例的结果。使用多个检测器和描述符对使您能够组合和加强结果。当使用单个特征检测器无法获得足够好的匹配时,多个对也很有用。
加载原始图像。
原文= imread(“cameraman.tif”);图;imshow(原始);文本(大小(原始的,2),大小(原始的,1)+ 15,...图片由麻省理工学院提供,...“字形大小”7“HorizontalAlignment”,“对”);
缩放和旋转原始图像以创建扭曲图像。
量表= 1.3;J = imresize(original, scale);Theta = 31;扭曲= imrotate(J, θ);图imshow(扭曲)
检测两个图像中的特征。首先使用BRISK探测器,然后是SURF探测器。
ptsOriginalBRISK = detectBRISKFeatures(原始的,“MinContrast”, 0.01);ptsdistortion brisk = detectBRISKFeatures(扭曲的,“MinContrast”, 0.01);ptsOriginalSURF =检测表面特征(原始);ptsdistortion surf = detectsurffatures(扭曲的);
从原始和扭曲的图像中提取描述符。在默认情况下,BRISK特性使用FREAK描述符。
[featuresOriginalFREAK, validPtsOriginalBRISK] =...extractFeatures(原,ptsOriginalBRISK);[featuresDistortedFREAK, validPtsDistortedBRISK] =...extractFeatures(扭曲,ptsDistortedBRISK);[featuresOriginalSURF, validPtsOriginalSURF] =...extractFeatures(原,ptsOriginalSURF);[featuresDistortedSURF, validPtsDistortedSURF] =...extractFeatures(扭曲,ptsDistortedSURF);
通过首先匹配FREAK描述符,然后匹配SURF描述符来确定候选匹配。为了获得尽可能多的特征匹配,从低于默认值的检测器和匹配阈值开始。一旦得到了可行的解决方案,就可以逐渐增加阈值,以减少提取和匹配特征所需的计算负载。
indexPairsBRISK = matchFeatures(featresoriginalfreak,...featuresDistortedFREAK,“MatchThreshold”现年40岁的“MaxRatio”, 0.8);indexPairsSURF = matchFeatures(featuresOriginalSURF, featuresdistortion tedsurf);
获取BRISK和SURF的候选匹配点。
matchedOriginalBRISK = validPtsOriginalBRISK(indexPairsBRISK(:,1));matcheddistortion brisk = validptsdistortion brisk (indexPairsBRISK(:,2));matchedOriginalSURF = validPtsOriginalSURF(indexPairsSURF(:,1));matcheddistortion surf = validptsdistortion surf (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] =...estimateGeometricTransform2D (matchedDistortedXY...matchedOriginalXY,“相似”);inlier扭曲的xy = matched扭曲的xy (inlierIdx,:);inlierOriginalXY = matchedOriginalXY(inlierIdx,:);
显示结果。结果比使用单个特征检测器的示例多提供了几个匹配项。
图showMatchedFeatures(original, distortion,inlierOriginalXY, inlierdistortion tedxy)使用SURF和BRISK匹配点(仅限内线))传说(“ptsOriginal”,“ptsDistorted”)
比较原始图像和恢复图像。
outputView = imref2d(size(original));恢复= imwarp(扭曲的,tformTotal,“OutputView”, outputView);图;imshowpair(原始恢复,“蒙太奇”)
[1]罗斯滕,E.和T.德拉蒙德。高速角落检测的机器学习第九届欧洲计算机视觉会议.Vol. 1, 2006, pp. 430-443。
[2]米科拉奇克,K.和C.施密德。局部描述符的性能评估。模式分析与机器智能汇刊。第27卷,2005年第10期,第1615-1630页。
[3]哈里斯,C.和M. J.斯蒂芬斯。“一种组合角和边缘检测器。”第四届阿尔维视觉会议论文集.1988年8月,第147-152页。
[4] Shi, J.和C.托马西。“值得追踪的优秀功能。”IEEE计算机视觉与模式识别会议论文集.1994年6月,第593-600页。
[5] Tuytelaars, T.和K. Mikolajczyk。局部不变特征检测器:一个调查。计算机图形与视觉基础与趋势“,.第3卷,第3期,2007,第177-280页。
[6]洛滕艾格,S., M. Chli, R. Siegwart。“BRISK:二进制鲁棒不变可扩展关键点。”IEEE国际会议论文集.ICCV, 2011年。
[7]尼斯特,D.和H.斯特温尼乌斯。线性时间最大稳定极值区域第十届欧洲计算机视觉会议.马赛,法国: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.凡古尔。仿射区域探测器的比较。国际计算机视觉杂志.第65卷第1-2期,2005年11月,第43-72页。
[11]贝,H., A. Ess, T. Tuytelaars和L. Van Gool。“SURF:加速健壮的功能。”计算机视觉与图像理解(CVIU).Vol. 110 No. 3, 2008, pp. 346-359。
[12]阿尔坎塔里拉,p.f., A.巴托利和A. j .戴维森。“KAZE功能”,ECCV 2012, Part VI, LNCS 7577第214页,2012年
[13] Rublee, 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。