角点检测——良好特征的跟踪功能

概要

GFTT(Good Features to Track)
今天我们就来深入探讨一下GFTT的细节

还有其他好的角点探测器,如 FAST、ORB、Harris。

我们说哈里斯直接是Corner Specific。 FAST 是我们最快的,但仅在直角时效果良好。 FAST 的弱点是方向不变量。这时,ORB来帮助我们了。 ORB 使用 FAST 和 Brief。它可以很好地处理从不同角度拍摄的照片。我为所有这些探测器提供了样本输出。

现在,考虑一下我们是否需要查看图像的角落或重要点的时间变化。我的意思是如果我们想随着时间的推移跟踪一些物体。是的,此时 GFTT 来帮助我们了。正如我们所见,每个都有其优点,选择取决于您的具体需求。

现在,让我们深入研究细节。

GFTT 已经与 Harris 方法类似。它会寻找图像中强度发生变化的点。它计算;

1-图像渐变
2-创建自相关矩阵
3-选择标准
4-非极大值抑制

GFTT 与 Harris 的不同之处在于第三步。选择方法略有不同。

GFTT 的运作方式

当然,与其他检测器一样,GFTT 使用数学方法来识别点。它观察像素周围不同方向的强度变化。如果任何方向上的强度发生相当大的变化,GFTT 会将其标记为潜在的关键点。

这是一个简单的Python代码。

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

def gftt(gray, maxCorners=0, qualityLevel=0.01, minDistance=20,
         mask=None, blockSize=3, useHarrisDetector=False, k=0.1):
    # Compute GFTT keypoints using the supplied parameters
    kps = cv2.goodFeaturesToTrack(gray, maxCorners, qualityLevel,
                                   minDistance, mask=mask, blockSize=blockSize,
                                   useHarrisDetector=useHarrisDetector, k=k)

    # Create and return `KeyPoint` objects
    return [cv2.KeyPoint(pt[0][0], pt[0][1], 3) for pt in kps]

# Load the image and convert it to grayscale
image = cv2.imread("tmp/edge_detection/skeleton.jpg")
orig = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect and draw GFTT keypoints on the image
kps = gftt(gray)

# Loop over the keypoints and draw stars at the corners
for kp in kps:
    (x, y) = np.intp(kp.pt)  # Replace np.int0 with np.intp
    cv2.drawMarker(image, (x, y), (255, 0, 0), markerType=cv2.MARKER_STAR, markerSize=6, thickness=2)

# Print the number of keypoints detected
print("# of keypoints: {}".format(len(kps)))

# Visualize the original image and the GFTT keypoints side by side
plt.figure(figsize=(20, 5))

plt.subplot(121)
plt.imshow(cv2.cvtColor(orig, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')

plt.subplot(122)
plt.imshow(image, cmap='gray')
plt.title('GFTT Corners')
plt.axis('off')

plt.show()

为什么“好”功能很重要

好的特征是必不可少的,因为它们为跟踪提供了稳定的点。当您跟踪视频中的运动或尝试匹配图像时,这些特征就像地标一样。

您可以根据需要指定其参数。

kps = cv2.goodFeaturesToTrack(gray, maxCorners, qualityLevel,
                                   minDistance, mask=mask, blockSize=blockSize,
                                   useHarrisDetector=useHarrisDetector, k=k)

所有参数都会影响输出。请小心这些并根据您的要求进行安排。

灰色:将检测 GFTT 关键点的灰度图像。
maxCorners:返回的最大角数。如果设置为 0,则返回所有检测到的角点。
质量级别:拐角的最低可接受质量。值越低,得分越多。
minDistance:返回角点之间的最小可能欧氏距离。
mask:可选的感兴趣区域。如果提供,它指定将检测角点的区域。
blockSize:用于计算 Harris 角点响应的像素邻域的大小。
useHarrisDetector:指示是使用 Harris 角点检测器(True)还是 Shi-Tomasi 角点检测器(False)的标志。
k:这是Harris探测器的自由参数。

在这里插入图片描述
此外,有时 GFTT 和 Shi-Tomasi 角点检测器也会被提及。

是的,我们几乎可以说它们是相同的。因为,这两种方法都使用与 Harris 角点检测相同的算法。此外,他们提供了不同的评分功能,并且比哈里斯效果更好。

GFTT 和 Shi-Tomasi 角点检测器之间的主要区别在于选择部分。

Shi-Tomasi 选择值大于阈值的角点。

GFTT:它不是根据阈值选择角点,而是选择具有最高特征值的前 N ​​个角点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点PY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值