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