學習筆記:在Opencv下基於ORB的圖像特征提取


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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM