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()