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算法

1.1 Fast算法原理

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第1张图片

1.2  实现办法

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第2张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第3张图片

1.2.1  机器学习的角点检测器

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第4张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第5张图片

1.2.2  非极大值抑制

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第6张图片

1.3  代码实现

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第7张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第8张图片

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算法角点检测 、ORB算法特征点检测_第9张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第10张图片

2 ,ORB算法

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第11张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第12张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第13张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第14张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第15张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第16张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第17张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第18张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第19张图片

2.1代码实现

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第20张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第21张图片

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算法角点检测 、ORB算法特征点检测_第22张图片

OpenCV实现FAST算法角点检测 、ORB算法特征点检测_第23张图片

你可能感兴趣的:(OpenCV从入门到精通,opencv,人工智能,计算机视觉,python)