OpenCV实现FAST算法角点检测 、ORB算法特征点检测

这篇具有很好参考价值的文章主要介绍了OpenCV实现FAST算法角点检测 、ORB算法特征点检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 Fast算法

1.1 Fast算法原理

1.2  实现办法

1.2.1  机器学习的角点检测器

1.2.2  非极大值抑制

1.3  代码实现

1.4  结果展示

2 ,ORB算法

2.1代码实现

2.2 结果展示


  1. FAST算法角点检测原理:

FAST算法(Features from Accelerated Segment Test)是一种快速的角点检测算法,用于检测图像中的关键点。该算法的核心思想是在像素周围的三个环内寻找连续的n个像素点,如果这些像素点中有x个像素点的灰度值比当前像素点的灰度值都要大或小,则当前像素点被认为是一个角点。

FAST算法的计算速度较快,适用于实时应用和嵌入式系统等场景。

  1. ORB算法特征点检测原理:

ORB算法(Oriented FAST and Rotated BRIEF)是一种基于FAST角点检测和BRIEF描述符的特征点检测方法。它不仅可以检测出关键点,还可以描述关键点的方向。

ORB算法的主要步骤如下:

(1)FAST角点检测:使用FAST算法检测出图像中的所有角点。

(2)计算关键点方向:计算每个关键点的方向,以使后续的特征描述符具有旋转不变性。ORB算法使用灰度质心法来计算每个角点的方向。

(3)BRIEF描述符生成:对每个关键点生成一个二进制字符串,称为BRIEF描述符。BRIEF描述符通过比较两个像素的亮度值,得到二进制码,并将所有二进制码组成一个字符串。

(4)特征点匹配:使用BRIEF描述符将两幅图像中的关键点进行匹配,从而实现图像的配准和目标识别。

ORB算法不仅具有较好的性能,而且具有很好的鲁棒性和旋转不变性。它在计算机视觉领域中被广泛应用于图像处理、目标识别等方面。

总结来说,FAST算法和ORB算法都是常用的特征点检测方法。FAST算法通过快速的像素比较实现对图像中角点的检测,速度较快,但精度较低。ORB算法则基于FAST算法和BRIEF描述符,既可以检测出关键点,又可以描述关键点的方向和特征,具有较好的鲁棒性和旋转不变性。这些算法的应用使得计算机可以更加准确地处理和识别图像,为计算机视觉和人工智能领域的发展提供了重要支持。

FAST算法的核心思想是通过像素的灰度值比较来判断一个像素是否为角点。它选择了三个环(半径为3)上的16个像素点,如果其中有连续n个像素点的灰度值都比当前像素点的灰度值加上一个阈值t要大或小,则当前像素点被认为是一个角点。这里的阈值t通常取10。

为了提高检测速度,FAST算法使用了一种加速方式——积分图像。通过计算积分图像,可以在常数时间内获取图像中任意矩形区域内像素值的和。这样,对于每个像素,只需计算一次该像素周围矩形区域内的和,在进行像素灰度值比较时,可以快速地获得所需的像素值,大幅提高了算法的效率。

而ORB算法则是在FAST算法的基础上进一步发展而来的。它引入了方向抑制,即为每个关键点计算其主要方向。ORB算法使用灰度质心法来计算关键点的方向,找到与该关键点灰度质心距离最近的点作为关键点的方向。

另外,ORB算法还采用了BRIEF(Binary Robust Independent Elementary Features)描述符来描述关键点的特征。BRIEF描述符是一种二进制描述符,它通过在一个预定义的像素对上进行亮度比较,生成一个固定长度的二进制码。这些比较对被选择为具有较大方差的像素对,这样可以保证描述符在旋转、尺度变化下具有良好的不变性。

通过计算图像中的FAST角点并提取它们的方向和BRIEF描述符,ORB算法能够高效地对图像进行特征检测和匹配,实现图像配准、目标识别等应用。

综上所述,FAST算法通过像素灰度值比较实现角点检测,而ORB算法在FAST算法的基础上引入了方向抑制和BRIEF描述符,提高了特征点的鲁棒性和不变性。这些算法的原理和设计思想为计算机视觉领域的图像处理和目标识别提供了重要方法和工具。

1 Fast算法

1.1 Fast算法原理

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

1.2  实现办法

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

1.2.1  机器学习的角点检测器

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

1.2.2  非极大值抑制

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

1.3  代码实现

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from  pylab import mpl

mpl.rcParams['font.sans-serif']  = ['SimHei']

img = cv.imread("corner.png")

#Fast 角点检测

'''创建一个fast对象,传入阈值,  注意: 可以处理彩色空间图像'''
fast = cv.FastFeatureDetector_create(threshold=30)

#检测图像上的关键点
kp = fast.detect(img , None)

#在图像上绘制关键点
img2 = cv.drawKeypoints(img , kp , None ,color=(0,0,255))

#输出默认参数
'''打印默认参数的值,包括阈值、是否使用非极大值抑制、邻域大小以及检测到的关键点数量'''
print("Threshold: {}".format(fast.getThreshold()))
print("nonmaxSuppression:{}".format(fast.getNonmaxSuppression()))
print("neighborhood: {}".format(fast.getType()))
print("Total Keypoints with nonmaxSuppression".format(len(kp)))

#  关闭非极大值抑制
fast.setNonmaxSuppression(0)
kp = fast.detect(img , None)

print("Total Keypoints without nonmaxSuppression :{}".format(len(kp)))

#绘制未  加入  非极大值抑制的结果
img3 = cv.drawKeypoints(img , kp,None ,color=(0,0,255))

#绘制图像
fig , axes = plt.subplots(nrows=1 , ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img2[:,:,::-1])
axes[0].set_title("加入非极大值抑制")

axes[1].imshow(img3[:,:,::-1])
axes[1].set_title("未加入非极大值抑制")
plt.show()

1.4  结果展示

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

2 ,ORB算法

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

2.1代码实现

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from  pylab import mpl

mpl.rcParams['font.sans-serif']  = ['SimHei']

img = cv.imread("corner.png")

#2  ORB算法角点检测
#2.1  实例化ORB对象
'''创建了一个ORB(Oriented FAST and Rotated BRIEF)特征检测器对象,并设置了最大特征点数为500。'''
orb = cv.ORB_create(nfeatures=500)

#2.2 检测关键点,并计算特征描述符
kp , des = orb.detectAndCompute(img ,None)

print(des.shape)
'''
orb.detectAndCompute()函数接受两个参数:图像(img)和掩码(None)。它将返回两个结果:关键点(kp)和描述子(des)。

关键点(kp)是一个包含检测到的关键点信息的列表。每个关键点包含其在图像中的位置、尺度、方向等属性。

描述子(des)是一个二维数组,形状为(N, 32),其中N是检测到的关键点数量。每一行代表一个关键点的描述子,描述子是一个长度为32的二进制向量。

通过打印des.shape,可以输出描述子的形状。这里的输出表示检测到的关键点数量为N,每个关键点的描述子长度为32。'''

#将关键点绘制在图像上
img2 = cv.drawKeypoints(img , kp ,None ,color=(0,0,255),flags=0)

#绘制图像
plt.figure(figsize=(5,4),dpi=100)
plt.imshow(img2[:,:,::-1])
plt.xticks([]),plt.yticks([])
plt.show()

2.2 结果展示

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python

在opencv中,用于提取fast关键点的函数,OpenCV从入门到精通,opencv,人工智能,计算机视觉,python文章来源地址https://www.toymoban.com/news/detail-778984.html

到了这里,关于OpenCV实现FAST算法角点检测 、ORB算法特征点检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV实战(17)——FAST特征点检测

    Harris 算子根据两个垂直方向上的强度变化率给出了角点(或更一般地说,兴趣点)的数学定义。但使用这种定义需要计算图像导数,计算代价较为高昂,特别是兴趣点检测通常只是更复杂算法的先决步骤。 在本中,我们将学习另一个特征点检测算子 FAST ( Features from Accelerated S

    2023年04月08日
    浏览(38)
  • [ORB/BEBLID] 利用OpenCV(C++)实现尺度不变性与角度不变性的特征找图算法

    本文只发布于利用OpenCV实现尺度不变性与角度不变性的特征找图算法和知乎 一般来说,利用OpenCV实现找图功能,用的比较多的是模板匹配(matchTemplate)。笔者比较喜欢里面的NCC算法。但是模板有个很明显的短板,面对尺度改变,角度改变的目标就无能为力了。因此本文旨在

    2024年02月05日
    浏览(42)
  • 特征点的检测与匹配(ORB,SIFT,SURFT比较)[opencv-python]

    本文旨在总结opencv-python上特征点的检测和匹配。 1、特征点的检测(包括:ORB,SIFT,SURFT) 2、特侦点匹配方法 (包括:暴力法,FLANN,以及随机抽样一致性优化RANSAC算法) 注:由于SURF专利问题,所以opencv官方包目前不支持SURF但支持ORB和SIFT,安装opencv-contrib-python包就可以解决 一

    2024年02月06日
    浏览(50)
  • Shi-Tomas角点检测、亚像素级别角点位置优化、ORB特征点、特征点匹配、RANSAC优化特征点匹配、相机模型与投影

    目录 1、Shi-Tomas角点检测 2、亚像素级别角点位置优化 3、ORB特征点 4、特征点匹配 5、RANSAC优化特征点匹配 6、相机模型与投影                        

    2024年02月16日
    浏览(45)
  • Lesson4-1:OpenCV图像特征提取与描述---角点特征

    学习目标 理解图像的特征 知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片,然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。 在拼图时,我们要寻找一些唯一

    2024年02月10日
    浏览(39)
  • OpenCV基本图像处理操作(十)——图像特征harris角点

    角点 角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D建模等多种应用。 角点的识别可以帮助在进

    2024年04月23日
    浏览(64)
  • OpenCV图像特征提取学习五,HOG特征检测算法

    一、HOG向梯度直方图概述   向梯度直方图(Histogram of Oriented Gradient, HOG)特征是基于对稠密网格中归一化的局部方向梯度直方图的计算。此方法的基本观点是:局部目标的外表和形状可以被局部梯度或边缘方向的分布很好的描述,即使我们不知道对应的梯度和边缘的位置。在

    2024年02月04日
    浏览(48)
  • 特征检测之HOG特征算法详解及Opencv接口使用

    特征描述符是图像或图像补丁的表示形式,它通过提取有用信息并丢弃无关信息来简化图像。 通常,特征描述符将大小 W x H x 3 (通道)的图像转换为长度为 n 的特征向量/数组。对于 HOG 特征描述符,输入图像的大小为 64 x 128 x 3 ,输出特征向量的长度为 3780 。 在HOG特征描述

    2024年02月14日
    浏览(44)
  • opencv_角点检测

    文章内容 一个opencv检测角点的程序 运行效果

    2024年01月17日
    浏览(45)
  • OpenCV实战(16)——角点检测详解

    在计算机视觉中,兴趣点 ( interest points ) 也称为关键点 ( keypoints ) 或特征点 ( feature points ),广泛用于解决对象识别、图像匹配、视觉跟踪、 3D 重建等领域的问题。与其将图像作为一个整体进行评估,不如选择可以用于局部分析的点,以获得将该点应用于局部或全局的信息。

    2023年04月18日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包