局部特征及其描述符,即局部邻域的紧凑向量表示,是许多计算机视觉算法的构建模块。它们的应用包括图像配准、目标检测和分类、跟踪和运动估计。使用局部特征使这些算法能够更好地处理规模变化、旋转和遮挡。计算机视觉工具箱™提供了用于检测角点特征的FAST、Harris、ORB和Shi & Tomasi方法,以及用于检测斑点特征的SIFT、SURF、KAZE和MSER方法。工具箱包括SIFT、SURF、KAZE、FREAK、BRISK、ORB和HOG描述符。您可以根据应用程序的需求混合和匹配检测器和描述符。
局部特征是指在图像中发现的模式或独特的结构,如点、边缘或小图像补丁。它们通常与纹理、颜色或强度与其周围环境不同的图像块相关联。这个特征实际上代表什么并不重要,重要的是它与周围环境不同。局部特征的例子有斑点、角和边缘像素。
我= imread (“circuit.tif”);角落= detectFASTFeatures(我“MinContrast”, 0.1);J = insertMarker(我,角落,“圆”);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(原始、规模);θ= 31;扭曲= imrotate (J,θ);图imshow(扭曲)
检测原始图像和失真图像之间的匹配特征
检测匹配的SURF特征是确定校正畸变图像所需变换的第一步。
ptsOriginal = detectSURFFeatures(原始);ptsDistorted = detectSURFFeatures(扭曲);
提取特征并比较两幅图像中检测到的斑点
检测步骤在两幅图像中发现了几个大致对应的斑点结构。比较检测到的斑点特征。这个过程可以通过特征提取来简化,特征提取决定了局部补丁描述符。
[featuresOriginal, validPtsOriginal] =...extractFeatures(原,ptsOriginal);[featuresDistorted, validPtsDistorted] =...extractFeatures(扭曲,ptsDistorted);
可能不是所有的原始点都被用来提取描述符。点可能会被拒绝,如果他们太接近图像边界。因此,除了特性描述符外,还返回有效点。
在特征提取步骤中确定用于计算描述符的patch大小。patch大小对应于特征被检测到的尺度。无论patch大小,这两个特征向量,featuresOriginal
和featuresDistorted
,它们的长度相等。描述符使您能够比较检测到的特征,而不管它们的大小和旋转。
找到候选人匹配
属性的描述符获取特征之间的候选匹配matchFeatures
函数。候选匹配意味着结果可能包含一些无效匹配。两个匹配的补丁可以表示类似的功能,但可能不是正确的匹配。一个桌子角可以看起来像一个椅子角,但这两个特征显然不匹配。
indexPairs = matchFeatures (featuresOriginal featuresDistorted);
从两个图像中找到点的位置
返回的每一行indexPairs
包含图像之间候选特征匹配的两个指标。使用索引从两幅图像中收集实际的点位置。
matchedOriginal = validPtsOriginal (indexPairs (: 1));matchedDistorted = validPtsDistorted (indexPairs (:, 2));
显示候选匹配
图showMatchedFeatures(原始的、扭曲、matchedOriginal matchedDistorted)标题(“候选匹配点(包括异常值)”)
分析特征位置
如果有足够数量的有效匹配,则删除假匹配。对于这种情况,RANSAC算法是一种有效的技术。的estimateGeometricTransform2D
函数实现了RANSAC算法的变体M-estimator sample consensus (MSAC)。MSAC找到一个几何变换并将嵌线(正确匹配)从异常值(虚假匹配)中分离出来。
[tform, inlierIdx] = estimateGeometricTransform2D(...matchedDistorted matchedOriginal,“相似”);inlierdistortion = matcheddistortion (inlierIdx,:);inlierOriginal = matchedOriginal(inlierIdx,:);
显示匹配点
图showMatchedFeatures(原始的、扭曲、inlierOriginal inlierDistorted)标题('匹配点(仅内联)')传说(“ptsOriginal”,“ptsDistorted”)
验证计算的几何变换
将计算得到的几何变换应用于扭曲的图像。
outputView = imref2d(大小(原始));恢复= imwarp (tform扭曲,“OutputView”, outputView);
显示恢复后的图像和原始图像。
图imshowpair(原始的,恢复,“蒙太奇”)
这个示例建立在“使用本地特性”示例的结果之上。使用多个检测器和描述符对可以组合并加强结果。当您使用单一特征检测器无法获得足够好的匹配时,多个配对也很有用。
加载原始图像。
原始= imread (“cameraman.tif”);图;imshow(原始);文本(大小(原始的,2),大小(原始的,1)+ 15,...图片由麻省理工学院提供,...“字形大小”7“HorizontalAlignment”,“对”);
缩放和旋转原始图像以创建扭曲的图像。
规模= 1.3;J = imresize(original, scale);θ= 31;扭曲= imrotate (J,θ);图imshow(扭曲)
检测两个图像的特征。首先使用轻快探测器,然后是SURF探测器。
ptsOriginalBRISK = detectBRISKFeatures(原始,“MinContrast”, 0.01);ptsDistortedBRISK = detectBRISKFeatures(扭曲了,“MinContrast”, 0.01);ptsOriginalSURF = detectSURFFeatures(原始);ptsDistortedSURF = detectSURFFeatures(扭曲);
从原始和扭曲的图像中提取描述符。在默认情况下,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 = matchFeatures (featuresOriginalSURF featuresDistortedSURF);
为BRISK和SURF获取候选匹配点。
matchedOriginalBRISK = validPtsOriginalBRISK (indexPairsBRISK (: 1));matchedDistortedBRISK = validPtsDistortedBRISK (indexPairsBRISK (:, 2));matchedOriginalSURF = validPtsOriginalSURF (indexPairsSURF (: 1));matchedDistortedSURF = validPtsDistortedSURF (indexPairsSURF (:, 2));
想象一下那些轻快的假定的比赛。
图showMatchedFeatures (matchedOriginalBRISK原始的,扭曲的,...matchedDistortedBRISK)标题(“使用BRISK & FREAK进行假定匹配”)传说(“ptsOriginalBRISK”,“ptsDistortedBRISK”)
结合候选匹配的轻快和SURF局部特征。使用位置
属性结合了来自轻快和SURF特征的点位置。
matchedOriginalXY =...[matchedOriginalSURF.Location;matchedOriginalBRISK.Location];matchedDistortedXY =...[matchedDistortedSURF.Location;matchedDistortedBRISK.Location];
确定嵌入点,并对轻快特征和SURF特征进行几何变换。
[tformTotal, inlierIdx] =...estimateGeometricTransform2D (matchedDistortedXY...matchedOriginalXY,“相似”);inlier失真xy = matched失真xy (inlierIdx,:);inlierOriginalXY = matchedOriginalXY(inlierIdx,:);
显示结果。结果比使用单一特征检测器的示例提供了更多的匹配。
图showMatchedFeatures(原始的、扭曲、inlierOriginalXY inlierDistortedXY)标题(“使用SURF和BRISK匹配点(仅内饰)”)传说(“ptsOriginal”,“ptsDistorted”)
比较原始和恢复的图像。
outputView = imref2d(大小(原始));恢复= imwarp (tformTotal扭曲,“OutputView”, outputView);图;imshowpair(原始恢复,“蒙太奇”)
E. Rosten和T. Drummond。《用于高速角点检测的机器学习》第九届欧洲计算机视觉会议.2006年第1卷,430-443页。
Mikolajczyk, K.和C. Schmid。“对本地描述符的性能评估。”模式分析与机器智能学报。第27卷,第10期,2005,1615-1630页。
C.哈里斯和M. J.斯蒂芬斯。“一个综合的角和边缘检测器。”第四届Alvey Vision会议论文集.1988年8月,第147-152页。
作者简介:Shi, J., and C. Tomasi。“需要跟踪的好功能。”计算机视觉与模式识别会议论文集.1994年6月,第593-600页。
Tuytelaars, T.和K. Mikolajczyk。“局部不变特征检测器:综述”计算机图形和视觉的基础和趋势.2007年第3卷第3期177-280页。
Leutenegger, S., M. Chli, R. Siegwart。“敏捷:二进制鲁棒不变可扩展关键点”IEEE国际会议论文集.ICCV, 2011年。
[7] Nister, D.和H. Stewenius。线性时间最大稳定极值区域第十届欧洲计算机视觉会议.法国马赛:2008年,第5303期,页183-196。
Matas J., O. Chum, M. Urba, T. Pajdla。来自最稳定极值区域的稳健宽基线立体声英国机器视觉会议论文集.2002年,页384 - 396。
Obdrzalek D., S. Basovnik, L. Mach,和A. Mikulik。使用最稳定的色彩区域检测场景元素计算机与信息科学通讯.La Ferte-Bernard,法国:2009,Vol. 82 CCIS (2010 12 01), pp. 107-115。
Mikolajczyk, K., T. Tuytelaars, C. Schmid, A. Zisserman, T. Kadir和L. Van Gool。仿射区域探测器的比较国际计算机视觉杂志.第65卷,第1-2期,2005年11月,43-72页。
H. Bay, A. Ess, T. Tuytelaars和L. Van Gool。“SURF:加速健壮功能。”计算机视觉与图像理解(CVIU).第110卷,第3期,2008,346-359页。
Alcantarilla, p.f., A. Bartoli和A.J. Davison。“KAZE功能”,ECCV 2012, Part VI, LNCS 7577214年,2012页
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。