尺度不变特征变换 (Scale-invariant feature transform , SIFT)
SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、微视角改变的容忍度也相当高.
基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认.使用SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位.在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算.SIFT特征的信息量大,适合在海量数据库中快速准确匹配,其應用範圍包含物體辨識、機器人地圖感知與導航、影像縫合、3D模型建立、手勢辨識、影像追蹤和動作比對。.
因SIFT算法有专利问题,需要将OpenCV降板(笔者降至3.4.2)后才能使用
且在资料夹中存放欲可视化图片即可
import numpy as np
import cv2
img = cv2.imread('freerider.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
# 在图像中查找关键点
kp = sift.detect(gray , None)
# 在关键点的位置上绘制小圆圈
img= cv2.drawKeypoints(img , kp , img)
# 在关键点的位置上绘制一个大小为keypoint的小圆圈
# img = cv2.drawKeypoints(gray , kp , img , flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('img',img)
cv2.waitKey(0)