目录
SIFT算法
SIFT实现流程
SIFT特性与原理
SIFT代码示例
SURF算法
拓展
关键点KeyPoints剖析
SIFT,即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。
1.实例化SIFT
sift = cv2.SIFT_create()
2.找出关键点并计算描述符
keypoints, descriptors = sift.detectAndCompute(gray, None)
特征检测与描述符提取的相关函数:
3.画出关键点
API:
img = cv2.drawKeypoints(image, keypoints, outImage, color, flags)
参数:
SIFT实现原理参考:
https://www.cnblogs.com/my-love-is-python/p/10414135.html
import cv2
import numpy as np
img = cv2.imread('E:/test3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
kp, des = sift.detectAndCompute(gray, None) # 找到关键点
img = cv2.drawKeypoints(gray, kp, img) # 绘制关键点
cv2.imshow('SIFT', img)
cv2.waitKey(0)
原图:
SIFT检测结果:
修改drawKeyPoints函数,flags使用cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
img = cv2.drawKeypoints(gray, kp, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
(注:目前SURF为专利授权算法,只有在opencv_contrib构建中使用了 OPENCV_ENABLE_NONFREE CMake标志时才可用)
应用SURF进行特征检测与描述符的提取只需要将SIFT的示例代码稍作修改:
SIFT代码:
sift = cv2.SIFT_create()
kp, des = sift.detectAndCompute(gray, None) # 找到关键点
修改后的SURF代码:
surf = cv2.xfeatures2d.SURF_create()
kp, des = surf.detectAndCompute(gray, None) # 找到关键点