ORB中有很多參數可以設置,在OpenCV中它可以通過ORB來創建一個ORB檢測器。
ORB::ORB(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31, int firstLevel=0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31)
下面介紹一下各個參數的含義:
nfeatures - 最多提取的特徵點的數量;
scaleFactor - 金字塔圖像之間的尺度參數,類似於SIFT中的kk;
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描述子的特徵點鄰域大小。
———————————————————————————————————————————————————————————————————————
和opencv3 427頁的orb程序相比,不同在於十四講的編程風格偏向於模板的使用,個人感覺對比之後也更喜歡模板的風格。
———————————————————————————————————————————————————————————————————————
PS:今天另一個知識盲點,常見於OPENCV的相關編程中,馬克一下。
矩陣數據類型:
– CV_<bit_depth>(S|U|F)C<number_of_channels>
S = 符號整型 U = 無符號整型 F = 浮點型
E.g.:
CV_8UC1 是指一個8位無符號整型單通道矩陣,
CV_32FC2是指一個32位浮點型雙通道矩陣
CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1
CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2
CV_8UC3 CV_8SC3 CV_16UC3 CV_16SC3
CV_8UC4 CV_8SC4 CV_16UC4 CV_16SC4
CV_32SC1 CV_32FC1 CV_64FC1
CV_32SC2 CV_32FC2 CV_64FC2
CV_32SC3 CV_32FC3 CV_64FC3
CV_32SC4 CV_32FC4 CV_64FC4
其中,通道表示每個點能存放多少個數,類似於RGB彩色圖中的每個像素點有三個值,即三通道的。
圖片中的深度表示每個值由多少位來存儲,是一個精度問題,一般圖片是8bit(位)的,則深度是8.