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