OpenCV Python - 特征检测

在图像处理的上下文中,特征是图像中关键区域的数学表示。 它们是图像中视觉内容的矢量表示。

特征使得对它们执行数学运算成为可能。 各种计算机视觉应用包括对象检测、运动估计、分割、图像对齐等。

任何图像中的突出特征包括图像的边缘、角或部分。 OpenCV 支持Haris 角点检测Shi-Tomasi 角点检测 算法。OpenCV 库还提供了实现SIFT(尺度不变特征变换)、SURF(加速稳健特征)和 FAST 角点检测算法的功能。

Harris 和 Shi-Tomasi 算法是旋转不变的。 即使图像旋转了,我们也可以找到相同的角点。 但是当图像被放大时,一个角可能不是图像的角。 下面给出的图描绘了相同的情况。

施托马斯

D.Lowe 的新算法 Scale Invariant Feature Transform (SIFT) 提取关键点并计算其描述符。

这是通过以下步骤实现的 −

  • 比例空间极值检测。
  • 关键点定位。
  • 定位任务。
  • 关键点描述符。
  • 关键点匹配。

就 OpenCV 中 SIFT 的实现而言,它从加载图像并将其转换为灰度开始。 cv.SHIFT_create() 函数创建一个 SIFT 对象。


示例

调用其detect() 方法获取绘制在原始图像之上的关键点。 下面的代码实现了这个过程

import numpy as np
import cv2 as cv
img = cv.imread('home.jpg')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp = sift.detect(gray,None)
img=cv.drawKeypoints(gray,kp,img)
cv.imwrite('keypoints.jpg',img)

输出

原图和画了关键点的图如下 −

这是一张原始图片

比例空间

下面给出的图像是有关键点的图像

SIFT