【基础】特征点检测

1.什么是特征点

特征点与角点在宏观定义上相同,都是能够表现图像中局部特征的像素。但是也有区别,特征点具有能够唯一描述像素特征的描述子。通常,特征点是由关键点和描述子组成的。

关键点就是图像中含有“关键信息”的像素。主要包括像素的位置、角度等信息。

描述子:用来唯一描述关键点的一串数字,又称为描述符,与每个人的个人信息相似。

注意:特征点是图像中含有特殊信息的像素,不仅包含像素的位置和角度,还包括描述像素唯一性的描述子。因此,通常认为特征点是关键点和描述子的组合

2.SIFT特征点检测

SIFT(尺度不变特征转换, ScaleInvariant Feature Transform) 是一种著名的尺度不变特征检测法。我们可以利用SIFT算法找到一幅图像中的一些稳定的保持不变性的局部特征点,该特征点被一个特殊向量描述。

SIFT特征的特点:

1.对旋转、尺度缩放、亮度变化保持不变性,对视角变化、噪声等也存在一定程度的稳定性;

2.独特性,信息量丰富,适用于在海量特征数据中进行快速,准确的匹配;

3.多量性,即使少数几个物体也可以产生大量的SIFT特征向量;

4.可扩展性,可以很方便的与其他形式的特征向量进行联合。

图片1

3.openCV实现SIFT

cv2.SIFT_create():用于实例化sift

kp = sift.detect(gray, None):检测灰度图像 , 返回kp(关键点信息)

cv2.drawKeypoints(image, keypoints, outputimage, color, flags):用于画出找到的关键点

image:原始图像

keypoints:找到的关键点,即kp

outputimage:输出图片,可以是原始图像

flags:绘图功能的标识设置

4.程序演示

import cv2
import numpy as np

img = cv2.imread('lena.jpg')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
sift = cv2.SIFT_create()  
kp = sift.detect(gray,None)     #sift.detect():得到特征点  
img = cv2.drawKeypoints(gray,kp,img)  

cv2.imshow('drawKeypoints',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片1