git:https://github.com/linyi0604/Computer-Vision
DoG和SIFT特征提取与描述
1 # coding:utf-8
2
3 import cv2 4
5 # 读取图片
6 img = cv2.imread("../data/walez1.jpg") 7 # 转为灰度图像
8 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 9 # 创建一个sift对象 并计算灰度图像
10 sift = cv2.xfeatures2d.SIFT_create() 11 keypoints, descriptor = sift.detectAndCompute(gray, None) 12 """
13 sift对象会使用DoG检测关键点,对关键点周围的区域计算向量特征,检测并计算 14 返回 关键点和描述符 15 关键点是点的列表 16 描述符是检测到的特征的局部区域图像列表 17
18 关键点的属性: 19 pt: 点的x y坐标 20 size: 表示特征的直径 21 angle: 特征方向 22 response: 关键点的强度 23 octave: 特征所在金字塔层级 24 算法进行迭代的时候, 作为参数的图像尺寸和相邻像素会发生变化 25 octave属性表示检测到关键点所在的层级 26 ID: 检测到关键点的ID 27
28 """
29 # 在图像上绘制关键点
30 # DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS表示对每个关键点画出圆圈和方向
31 img = cv2.drawKeypoints(image=img, outImage=img, keypoints=keypoints, 32 flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, 33 color=(51, 163, 236)) 34
35 cv2.imshow("sift_keypoints", img) 36 cv2.waitKey() 37 cv2.destroyAllWindows()
hessian 与SURF特征提取与匹配
1 # coding:utf-8
2
3 import cv2 4
5 img = cv2.imread("../data/walez1.jpg") 6 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 7
8 surf = cv2.xfeatures2d.SURF_create(8000) 9 """
10 创建surf对象,设置阈值,阈值越高检测到的特征就越少, 11 通过调整阈值得到合适的关键点 12 """
13 # 检测图像中的关键点和描述
14 keypoints, descriptor = surf.detectAndCompute(gray, None) 15 """
16 sift对象会使用DoG检测关键点,对关键点周围的区域计算向量特征,检测并计算 17 返回 关键点和描述符 18 关键点是点的列表 19 描述符是检测到的特征的局部区域图像列表 20
21 关键点的属性: 22 pt: 点的x y坐标 23 size: 表示特征的直径 24 angle: 特征方向 25 response: 关键点的强度 26 octave: 特征所在金字塔层级 27 算法进行迭代的时候, 作为参数的图像尺寸和相邻像素会发生变化 28 octave属性表示检测到关键点所在的层级 29 ID: 检测到关键点的ID 30
31 """
32 # 将关键点画在原图像上
33 cv2.drawKeypoints(image=img, outImage=img, 34 keypoints=keypoints,flags=4, 35 color=(51, 163, 236)) 36
37 cv2.imshow("surf_detected", img) 38 cv2.waitKey() 39 cv2.destroyAllWindows()