94 ORB FAST特征关键点检测
代码
import cv2 as cv
import numpy as np
src = cv.imread("../images/test1.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
orb = cv.ORB_create()
kps = orb.detect(src)
result = cv.drawKeypoints(src, kps, None, (0, 255, 0), cv.DrawMatchesFlags_DEFAULT)
cv.imshow("result", result)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果
解释
ORB - (Oriented Fast and Rotated BRIEF)算法是基于FAST特征检测与BRIEF特征描述子匹配实现,相比BRIEF算法中依靠随机方式获取而值点对,ORB通过FAST方法,FAST方式寻找候选特征点方式是假设灰度图像像素点A周围的像素存在连续大于或者小于A的灰度值,选择任意一个像素点P,假设半径为3,周围16个像素表示
见图一!
则像素点P被标记为候选特征点、通常N取值为9、12,上图N=9。
为了简化计算,我们可以只计算1、9、5、13四个点,至少其中三个点满足上述不等式条件,即可将P视为候选点。然后通过阈值进行最终的筛选即可得到ORB特征点
retval = cv.ORB_create([, nfeatures[, scaleFactor[, nlevels[, edgeThreshold[, firstLevel[, WTA_K[, scoreType[, patchSize[, fastThreshold]]]]]]]]])
nfeatures
= 500最终输出最大特征点数目scaleFactor
=1.2f金字塔上采样比率nlevels
=8金字塔层数edgeThreshold
=31边缘阈值firstLevel
= 0WTA_K
=2这个是跟BRIEF描述子用的scoreType
对所有的特征点进行排名用的方法patchSize
定向的Brief描述符使用的补丁大小。在较小的金字塔层上,特征覆盖的感知图像区域将更大fastThreshold
快速阈值
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。