計(jì)算機(jī)視覺(第6期) ORB-SLAM2源碼解析:視覺SLAM必備基礎(chǔ)
ORB特征
ORB(Oriented FAST and Rotated BRIEF)是一種快速特征點(diǎn)提取和描述的算法。ORB算法分為兩部分,分別是特征點(diǎn)提取和特征點(diǎn)描述。特征提取是由FAST(Features from??Accelerated Segment Test)算法發(fā)展來的,特征點(diǎn)描述是根據(jù)BRIEF(Binary Robust IndependentElementary Features)特征描述算法改進(jìn)的。
1.1 Fast特征提取
ORB算法的特征提取是由FAST算法改進(jìn)的,這里成為oFAST(FASTKeypoint Orientation)。也就是說,在使用FAST提取出特征點(diǎn)之后,給其定義一個(gè)特征點(diǎn)方向,以此來實(shí)現(xiàn)特征點(diǎn)的旋轉(zhuǎn)不變形。FAST算法是公認(rèn)的最快的特征點(diǎn)提取方法。FAST算法提取的特征點(diǎn)非常接近角點(diǎn)類型。oFAST算法如下:

步驟一:粗提取。該步能夠提取大量的特征點(diǎn),但是有很大一部分的特征點(diǎn)的質(zhì)量不高。下面介紹提取方法。從圖像中選取一點(diǎn)P,如上圖1。我們判斷該點(diǎn)是不是特征點(diǎn)的方法是,以P為圓心畫一個(gè)半徑為3pixel的圓。圓周上如果有連續(xù)n個(gè)像素點(diǎn)的灰度值比P點(diǎn)的灰度值大或者小,則認(rèn)為P為特征點(diǎn)。一般n設(shè)置為12。為了加快特征點(diǎn)的提取,快速排出非特征點(diǎn),首先檢測(cè)1、9、5、13位置上的灰度值,如果P是特征點(diǎn),那么這四個(gè)位置上有3個(gè)或3個(gè)以上的的像素值都大于或者小于P點(diǎn)的灰度值。如果不滿足,則直接排出此點(diǎn)。
步驟二:機(jī)器學(xué)習(xí)的方法篩選最優(yōu)特征點(diǎn)。簡(jiǎn)單來說就是使用ID3算法訓(xùn)練一個(gè)決策樹,將特征點(diǎn)圓周上的16個(gè)像素輸入決策樹中,以此來篩選出最優(yōu)的FAST特征點(diǎn)。
步驟三:非極大值抑制去除局部較密集特征點(diǎn)。使用非極大值抑制算法去除臨近位置多個(gè)特征點(diǎn)的問題。為每一個(gè)特征點(diǎn)計(jì)算出其響應(yīng)大小。計(jì)算方式是特征點(diǎn)P和其周圍16個(gè)特征點(diǎn)偏差的絕對(duì)值和。在比較臨近的特征點(diǎn)中,保留響應(yīng)值較大的特征點(diǎn),刪除其余的特征點(diǎn)。
步驟四:特征點(diǎn)的尺度不變形。建立金字塔,來實(shí)現(xiàn)特征點(diǎn)的多尺度不變性。設(shè)置一個(gè)比例因子scaleFactor(opencv默認(rèn)為1.2)和金字塔的層數(shù)nlevels(pencv默認(rèn)為8)。將原圖像按比例因子縮小成nlevels幅圖像??s放后的圖像為:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的圖像提取特征點(diǎn)總和作為這幅圖像的oFAST特征點(diǎn)。
步驟五:特征點(diǎn)的旋轉(zhuǎn)不變性。ORB算法提出使用矩(moment)法來確定FAST特征點(diǎn)的方向。也就是說通過矩來計(jì)算特征點(diǎn)以r為半徑范圍內(nèi)的質(zhì)心,特征點(diǎn)坐標(biāo)到質(zhì)心形成一個(gè)向量作為該特征點(diǎn)的方向。矩定義如下: