OpenCV - FAST 算法(Python实现)

本文详细介绍了FAST(Features from Accelerated Segment Test)算法的原理和步骤,这是一种用于角点检测的方法。首先解释了如何通过比较中心像素与周围像素的值来判断角点,然后描述了算法的三步检测过程,并给出了使用Python和OpenCV实现的代码示例。通过设置阈值和非极大值抑制,最终得到4426个有效的特征点。
摘要由CSDN通过智能技术生成

原理

FAST 全称 Features from accelerated segment test,一种用于角点检测的算法,该算法的原理是取图像中检测点,以该点为圆心的周围的16个像素点判断检测点是否为角点,通俗的讲就是中心的的像素值比大部分周围的像素值要亮一个阈值或者暗一个阈值则为角点.

步骤

.

  1. 一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、…、p16)
  2. 定义一个阈值,计算p1、p9与中心p的像素差,若它们绝对值都小于阈值,则p点不可能是特征点,直接pass掉,否则,当做候选点。
  3. 若p是候选点,则计算p1、p9、p5、p13与中心p的像素差,若它们的绝对值有至少3个超过阈值,则当做候选点,否则,直接pass掉
  4. 若p是候选点,则计算p1到p16这16个点与中心p的像素差,若它们有至少9个超过阈值,则是特征点,否则,直接pass掉
  5. 对图像进行非极大值抑制:计算特征点出的FAST得分值(即score值,也即s值),判断以特征点p为中心的一个邻域(如3x3或5x5)内,计算若有多个特征点,则判断每个特征点的s值(16个点与中心差值的绝对值总和),若p是邻域所有特征点中响应值最大的,则保留;否则,抑制。若邻域内只有一个特征点(角点),则保留,得分计算公式如下(公式中用V表示得分,t表示阈值):
    clipboard.png

代码

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg')
# Initiate FAST object with default values
fast = cv2.FastFeatureDetector_create()
# find and draw the keypoints
kp = fast.detect(img,None)
img2 = cv2.drawKeypoints(img, kp, None, color=(255,0,0))
# Print all default params
print( "Threshold: {}".format(fast.getThreshold()) )
print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) )
print( "neighborhood: {}".format(fast.getType()) )
print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) )
cv2.imshow('fast_true',img2)
# Disable nonmaxSuppression
fast.setNonmaxSuppression(0)
kp = fast.detect(img,None)
print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv2.drawKeypoints(img, kp, None, color=(255,0,0))
cv2.imshow('fast_false',img3)
cv2.waitKey()

Threshold: 10
nonmaxSuppression:True
neighborhood: 2
Total Keypoints with nonmaxSuppression: 4426
Total Keypoints without nonmaxSuppression: 15201

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值