在前不久發布的OpenCV4.5中更新了很多新特性:
- 從4.5版本開始,OpenCV將正式使用Apache2協議,從而避免專利算法帶來的潛在糾紛
- SIFT專利到期,代碼被移到主庫
- 對RANSAC算法進行了改進
- 新增了實時單目標跟蹤算法SiamRPN++
還有其他重要更新,這里就不再敘述。值得一提的是,BELID描述子也被添加進去了。
BEBLID全稱是Boosted Efficient Binary Local Image Descriptor,多項實驗證明能夠提高圖像匹配精度,同時減少執行時間。
#CommentoruncommenttouseORBorBEBLID
descriptor=cv.xfeatures2d.BEBLID_create(0.75)
#descriptor=cv.ORB_create()
kpts1,desc1=descriptor.compute(img1,kpts1)
kpts2,desc2=descriptor.compute(img2,kpts2)
更多細節可以參考:
https://towardsdatascience.com/improving-your-image-matching-results-by-14-with-one-line-of-code-b72ae9ca2b73
https://github.com/iago-suarez/beblid-opencv-demo/blob/main/demo.ipynb
CODE:https://github.com/iago-suarez/BEBLID.git
PDF:http://www.dia.fi.upm.es/~pcr/publications/PRL_2020_web_BEBLID.pdf
這里說一下結論吧,經過這個作者測試,將ORB描述符替換為BEBLID,就可以將這兩個圖像的匹配結果提高14%.
下面詳細介紹一下這個BEBLID描述子.
“作者提出了一種有效的圖像描述符BELID。其有效性的關鍵是對一組圖像特征進行有區別的選擇,且計算量要求非常低。實驗是在電腦和智能手機上進行,BELID的精確度與SIFT相似,執行時間與最快的算法ORB相當。
”
介紹
局部圖像是用于匹配存在強烈外觀變化的圖像,如光照變化或幾何變換。它們是許多計算機視覺任務的基本組成部分,如3D重建、SLAM、圖像檢索、位姿估計等。它們是最流行的圖像表示方法,因為局部特征是獨特的,視點不變的。
為了產生一個局部圖像表示,我們必須檢測一組顯著的圖像結構,并為每個結構提供描述。對于各種如角、線和區域,有大量非常有效的檢測器,它們可以用實數或二進制描述符來描述。目前SIFT描述子仍然被認為是“黃金標準”技術。
本文給出了一種有效的描述子。特征使用積分圖像來有效地計算一對圖像正方形區域的平均灰度值之間的差。作者使用一個增強算法來區分地選擇一組特征,并將它們組合起來產生強描述。實驗結果表明,該方法提高了計算速度,執行時間接近ORB,精度與SIFT相似,它能夠為手頭的任務選擇最佳的特征。
BELID
在本節中,作者提出了一種描述圖像局部區域的有效算法,其速度和SIFT一樣快。其速度的關鍵是使用少量、快速和選擇性的特征。描述子使用一組使用BoostedSCC算法選擇的K個特征,該算法是對AdaBoost的改進。
設是由一對對圖像patches組成的訓練集,標記{?1,1}。其中= 1表示兩個patch對應相同的顯著性圖像結構,=?1表示不同的顯著性圖像結構.
訓練過程將損失降到最低
其中,它依賴于特征提取函數f: X→R和一個閾值T.給定f和T,通過含T的f(x)來定義weak learner,
1. 閾值平均盒弱學習者
效率的關鍵是選擇一個f(x),它既具有判別性,又能快速計算。我們定義特征提取函數f(x)
I(t)是像素的灰度值t和R (p, s)是大小的正方形盒子集中在帶有尺寸s的像素p。因此,f計算像素的平均灰度值之間的差異(, s)和R(,s)。圖2中的紅色和藍色方塊代表,分別(, s)和R (, s)。加快f的計算,作者使用積分圖像的輸入圖像。一旦S可用,方框中的灰度和可以通過4次內存訪問和4次算術運算來計算。
檢測器通常計算局部結構的方位和尺度。為了BEBLID描述符不受歐幾里得變換的影響,作者用底層的局部結構來定位和縮放我們的測量值。
2. 優化弱學習者權值
BoostedSCC算法選擇K個弱學習者及其相應的權值。等式1中BoostedSCC優化的損耗函數可以看作是一種度量學習方法,其中度量矩陣a是對角的
其中h(w)是K個弱學習者對圖像patch的w響應向量。在這種情況下,不考慮不同弱學習者響應之間的依賴關系。此時,給定圖像patch w的BELID-U(未優化)描述符計算為,其中使=
進一步,通過對特征之間的相關性進行建模,估計整個矩陣A可以改善相似函數。FP-Boost估計最小值
采用隨機梯度下降法估計對稱的a和是一項困難的工作。因此,該算法從K個弱學習器和由BoostedSCC找到的α開始。第二個學習步驟非常快,因為所有弱學習者的反應都可以預先計算出來
在未優化的描述符的情況下,必須分解相似函數s(x,y)來計算x和y的獨立描述子。假設A是一個對稱矩陣,可以使用它的特征分解來選擇特征值最大的D個特征向量
實驗
不同的場景:巴黎圣母院,約塞米蒂國家公園和紐約的自由女神像。在SIFT檢測到的局部結構周圍裁剪PATCH。
作者用三種方法來比較性能:
- FPR-95.: 這是一個PATCH驗證問題中95%的召回誤報率。當開發BEBILD描述符時,作者希望能夠匹配大部分的局部結構,比如說95%的召回率,但是有盡可能少的誤報。因此,在PATCH驗證問題中,描述符的FPR-95越低越好。
- AUC: PATCH驗證問題中ROC曲線下的面積。它提供了一個良好的整體測量,因為它考慮了曲線上的所有操作點,而不是像FPR-95案例中只有一個。
- mAP.: 在PATCH驗證、圖像匹配和PATCH檢索這三個任務中,每個任務的平均精度,在HPatches基準中定義。
作者已經在Python中實現了BoostedSCC、FP-Boost和閾值平均盒弱學習者的學習和測試部分。為了優化A矩陣,使用了固定學習率為10 - 8和批量2000個樣本的隨機梯度下降算法。同時也在c++中實現了使用OpenCV處理輸入圖像。作者使用這個實現來測量BELID在不同平臺上的執行時間。
1. PATCH驗證實驗
在這里,首先探索維度數的影響。在圖3中,顯示了AUC和FPR-95值作為維數(“N維”)的函數。在BELID的例子中,使用K = 512,并計算B從512維減少到圖中給出的一個。
首先運行BoostedSSC來選擇512個弱學習者。通過從這個初始集合中移除最后的弱學習者,作者改變了圖3中BELID- u曲線的維數。對于BELID,丟棄了B的最后一列,它們對應于與最小特征值相關的縮放特征向量
從圖3可以看出,boosting過程選擇的特征最多只在一點上對最終判別有貢獻。在128個弱學習者之后,每個新特征提供的改進非常小。在256之后,沒有得到任何改進,這意味著最后一個是多余的。優化后的BELID性能優于BELIDU,BELID得分最低FPR-95有128個尺寸。
2. Hpatches數據集實驗
圖5顯示了用HPathces工具獲得的各種BELID配置和其他競爭方法的結果。作者得到了與之前實驗相同的情況,所有的BELID配置都比SIFT好,69.57 vs 63.35,比ORB好得多。
然而,在另外兩個任務中,BEBILD描述子落后于SIFT。這是一個預期的結果,因為作者沒有為這些任務優化描述子??傊?,BELID在所有任務中提供的結果接近SIFT,并優于ORB。
3. 不同平臺的執行時間
在最后的實驗中,作者測試了c++實現的BELID處理圖像的時間,呈現了由來自8個不同場景的48張800×640圖像組成的Mikolajczyk數據集的執行時間。
作者將執行時間與OpenCV庫中的其他相關描述子進行比較。為此運行ORB ,、SIFT 、 LBGM和BinBoost。結果在表1中。
就速度而言,BELID-U與ORB相當。事實上,BELID-U在桌面環境下和ORB一樣快(0.41 ms vs 0.44 ms),在有限的CPU環境下更快(2.54 ms vs 6.49 ms)。這是意料之中的,因為兩者都使用一組灰度值差異作為特征。LBGM使用與BELID相同的特征選擇算法,但具有較慢的特征。因此,這個描述符需要與桌面設置中的SIFT相同的處理時間(19.77 ms vs 22.22 ms),但FPR-95稍好。
在桌面CPU上,BELID-128只需要3.08毫秒,大約是BELID-U和ORB的7倍。在智能手機CPU中,BELID128的時間也比BELID-U慢7倍左右。
結論本文提出了一種有效的圖像描述符BELID。在實驗中,作者證明了它有非常低的計算要求,在準確度方面,BELID優于ORB,接近SIFT。
-
代碼
+關注
關注
30文章
4791瀏覽量
68685 -
SLAM
+關注
關注
23文章
425瀏覽量
31855 -
OpenCV
+關注
關注
31文章
635瀏覽量
41373 -
orb
+關注
關注
0文章
21瀏覽量
9900
原文標題:OpenCV新增描述子BEBLID:提高圖像匹配精度,減少執行時間
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論