OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)相关的知识,希望对你有一定的参考价值。
- OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)
- OpenCV中的SURF(Speeded-Up Robust Features 加速鲁棒特征)
这篇博客将延续上俩篇博客,介绍OpenCV中的快速检测特征——角点检测的快速算法。SURF相比SIFT速度有所提升,但从实时应用程序的角度来看,速度还不够快。 一个最好的例子是SLAM(Simultaneous Localization and Mapping 同步定位和映射)移动机器人,它的计算资源有限。于是有了本文的快速算法。
FAST (Features from Accelerated Segment Test) 加速段测试的特征
FAST用于角点的高速检测,更快更好。
FAST比其他现有的角点探测器快几倍。但它对高水平的噪音不稳定,这取决于阈值。
1. 效果图
原始图如下:
FAST效果图如下:
左图显示带非极大值抑制的FAST(关键点846个),右图显示不带非极大值抑制的FAST(关键点2426个);
2. 源码
# 快速特征检测——FAST(Features from Accelerated Segment Test) 加速段测试的特征
# FAST用于角点的高速检测,更快更好。
# 快速算法比其他现有的角点探测器快几倍。但它对高水平的噪音不稳定,这取决于阈值。
import cv2
origin = cv2.imread('images/simple.jpg')
cv2.imshow("origin", origin)
gray = cv2.cvtColor(origin, cv2.COLOR_BGR2GRAY)
# 使用默认参数初始化快速特征检测器
# fast = cv2.FastFeatureDetector() # opencv2
fast = cv2.FastFeatureDetector_create() # opencv3
print(fast)
# 寻找和绘制关键点
kp = fast.detect(gray, None)
img2 = cv2.drawKeypoints(gray, kp, outImage=gray, color=(255, 0, 0))
print('defaultParameter res keypoints: ', len(kp))
# 不支持打印所有的参数
# print("Threshold: ", fast.getThreshold('threshold'))
# print("nonmaxSuppression: ", fast.getNonmaxSuppression('nonmaxSuppression'))
# print("neighborhood: ", fast.getType('type'))
# print("Total Keypoints with nonmaxSuppression: ", len(kp))
cv2.imshow("default res", img2)
cv2.imwrite('fast_true.png', img2)
# 抑制极大值抑制 Disable nonmaxSuppression
fast.setNonmaxSuppression(0)
kp = fast.detect(gray, None)
print("Total Keypoints without nonmaxSuppression: ", len(kp))
img3 = cv2.drawKeypoints(gray, kp, gray, color=(255, 0, 0))
cv2.imshow("nonmaxSuppression res", img3)
cv2.waitKey(0)
cv2.imwrite('fast_false.png', img3)
参考
以上是关于OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 例程 300篇243. 特征检测之 FAST 算法
OpenCV 例程 300篇243. 特征检测之 FAST 算法