1、什么是ORB特征提取
看這篇文章 http://www.cnblogs.com/ronny/p/4083537.html”
2、Opencv ORB的參數含義
#nfeatures - 最多提取的特征點的數量;
#scaleFactor - 金字塔圖像之間的尺度參數,類似於SIFT中的k;
#nlevels – 高斯金字塔的層數;
#edgeThreshold – 邊緣閾值,這個值主要是根據后面的patchSize來定的,靠近邊緣edgeThreshold以內的像素是不檢測特征點的。
#firstLevel - 看過SIFT都知道,我們可以指定第一層的索引值,這里默認為0。
#WET_K - 用於產生BIREF描述子的 點對的個數,一般為2個,也可以設置為3個或4個,那么這時候描述子之間的距離計算就不能用漢明距離了,而是應該用一個變種。OpenCV中,如果設置WET_K = 2,則選用點對就只有2個點,匹配的時候距離參數選擇NORM_HAMMING,如果WET_K設置為3或4,則BIREF描述子會選擇3個或4個點,那么后面匹配的時候應該選擇的距離參數為NORM_HAMMING2。
#scoreType - 用於對特征點進行排序的算法,你可以選擇HARRIS_SCORE,也可以選擇FAST_SCORE,但是它也只是比前者快一點點而已。
#patchSize – 用於計算BIREF描述子的特征點鄰域大小。
3、代碼示例
import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('test.jpg',0)
img2 = cv2.imread('test3.jpg',0)
orb = cv2.ORB_create()
kp1,des1 = orb.detectAndCompute(img1,None)
kp2,des2 = orb.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck = True)
matches = bf.match(des1,des2)
matches = sorted(matches,key=lambda x:x.distance)
img3= cv2.drawMatches(img1,kp1,img2,kp2,matches[:50],None,flags=2)
plt.imshow(img3)
plt.show()
4、應用的局限性
http://blog.csdn.net/wangyaninglm/article/details/44805709/
