Opencv Python 简明教程

OpenCV Python - Feature Detection

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

特征使得能够对它们进行数学运算。各种计算机视觉应用包括目标检测、运动估计、分割、图像对齐等。

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

Harris 和 Shi-Tomasi 算法是旋转不变的。即使图像旋转,我们也可以找到相同的角。但是当图像被放大时,图像中的某个角可能不再是角。下图描述了这一点。

shi tomasi

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

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

  1. Scale-space Extrema Detection.

  2. Keypoint Localization.

  3. Orientation Assignment.

  4. Keypoint Descriptor.

  5. Keypoint Matching.

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

Example

调用其 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)

Output

原始图像及其绘制有关键点的图像如下所示 −

这是一个 original image

scale space

给出的图像如下所示: one with keypoints

sift