【机器视觉】三维物体重建(一):fast角点检测

Edward Rosten & Tom Drummond于2006年提出的,通过机器学习与角点检测相互融合,实现快速高效检测角点。
fast角点检测具体实现:

在这里插入图片描述
该算法考虑以角点p为中心的圆,其边与图像像素点相交的像素位置,例如上图边所在的16个像素位置,如果存在一组n个连续的像素点其灰度值全部大于p点灰度值加上阈值或者全部小于p点灰度值减掉阈值,那么p即为角点。
论文中n被设定为12,经过大量测试得出,因为n=12可以排除大量非角点。
对于这16个像素位置,总共只有三种状态:
在这里插入图片描述
或比p亮,或比p暗,或者与p相似(基于灰度值)。
然而一个图像如果拿16个点依次按照上述公式计算比较,那算法简直太慢,作者提出运用ID3决策树(通过信息增益进行泛化评估)进行泛化,来寻找是否存在这连续的n个pixels或大于或小于 I p ± t I_p\pm t Ip±t

另外算法采用了非极大值抑制,对检测到的每个角点计算得分函数V,并对其应用非极大值抑制以去除具有较高V的相邻角点的角点,即去除冗余,选择最优的角点。
在这里插入图片描述
在这里插入图片描述
通过计算得分函数V,将得到的值分别与候选角点的相邻角点的值进行比较,将较小的角点全部去掉。
opencv封装了该算法,代码如下:

import cv2 as cv
import matplotlib.pyplot as plt

image = cv.imread("building.jpg")
image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

fast = cv.FastFeatureDetector_create(threshold=30, nonmaxSuppression=True, type=cv.FAST_FEATURE_DETECTOR_TYPE_9_16)

features_pos = fast.detect(image, None)

draw_image = cv.drawKeypoints(image, features_pos, image, color=(0, 255, 0))

plt.imshow(draw_image)
plt.xticks([])
plt.yticks([])
plt.show()

FastFeatureDetector_create()中的threshold即为上述的阈值t,threshold越小检测出的角点越多,值越大检测出的角点越少,第二个设置是否进行非极大值抑制。
在这里插入图片描述
在这里插入图片描述
threshold分别等于30和100时角点的检测结果。
缺点:
鲁棒性较差,容易受到噪声的扰动;取决于阈值t,需要根据不同的情况进行调参。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值