特徵匹配主要是基於兩種相似度較高的圖片,透過opencv裡面提供的特徵匹配方法來進行特徵點之間的匹配和對映
特徵點由關鍵點和描述子兩部分組成。例如:在一張影像中計算SIFT特徵點時,是指提取SIFT關鍵點,並計算SIFT描述子兩件事。
關鍵點是指特徵點在影像裡的位置,有些特徵點還具有方向、大小等資訊。描述子是指一個向量,描述該關鍵點周圍畫素的資訊
按照外觀相似特徵應該有相似的描述子的原則設計
SIFT(尺度不變性)作為最經典的特徵提取演算法,充分考慮影像變換過程中出現的光照、尺度、旋轉等變化。
但計算量較大,實時性不好。
FAST關鍵點(沒有描述子)考慮適當降低精度和魯棒性,以提升計算的速度,屬於特別快的一種特徵點。
ORB特徵目前看來非常具有代表性的實時影像特徵,它改進了FAST檢測子不具有方向性的問題,並採用速度極快的二進位制描述子BRIEF;
因此,ORB在保持特徵子具有旋轉、尺度不變性的同時,在速度方面也有了很大的提升
1.計算檢測關鍵點並計算描述符
detectAndCompute(InputArray img,bool useProvidedKeypoints=false)
useProvidedKeypoints:決定當前是探測關鍵點還是計算描述符,為true時執行compute功能;為false時,執行detect功能,探測關鍵點
點選檢視程式碼
import cv2
img_m=cv2.imread("data1/1.png",0)
sift=cv2.SIFT_create()
kp2,des2=sift.detectAndCompute(img_m,None,useProvidedKeypoints=False) #useProvidedKeypoints決定當前是探測關鍵點還是計算描述符,
# useProvidedKeypoints為true時,執行compute功能,計算描述符;為false時,執行detect功能,探測關鍵點
res_r=cv2.drawKeypoints(img_m,kp2,img_m,color=(0,255,0),flags=0)
cv2.imshow('picture2',res_r)
cv2.waitKey(0)