pcl中ransac提取直线_复杂场景中的一个图像配准思路
在很多時(shí)候,我們可能需要使用到圖像的識(shí)別與配準(zhǔn)工作,來判斷某個(gè)特征或者是劃出某個(gè)特定特征的位置。現(xiàn)在的深度學(xué)習(xí)已經(jīng)能夠比較好地解決這個(gè)問題,比如常見的YOLO,可以利用幾行設(shè)定代碼就能夠劃出所需要識(shí)別的位置。但是精準(zhǔn)度可能會(huì)有所偏差,因?yàn)樵谟?xùn)練過程中使用的樣例往往是被經(jīng)過卷積處理學(xué)習(xí)的,許多特征點(diǎn)在這過程中可能會(huì)消失,并且池化之后以另一種方式進(jìn)行學(xué)習(xí)和識(shí)別。也就是說許多模式識(shí)別的方法重在識(shí)別,所以在細(xì)節(jié)匹配上可能不太適用(例如通過匹配LOGO上的某一點(diǎn)來推算出其位置)。而本文所分享的是一種較為精確的配準(zhǔn)方式,可以通過先驗(yàn)條件來推導(dǎo)諸如LOGO在場(chǎng)景中的具體坐標(biāo)等問題。
關(guān)鍵詞:機(jī)器視覺 機(jī)器學(xué)習(xí) 圖像配準(zhǔn)
1 類模型的構(gòu)建思路
1.1????? 圖像特征的提取算子
目前常用的三種提取特征的方法有surf算子,fast算子和sift算子,在目前版本的opencv中還集成了orb算子,但是這種算子主要是對(duì)fast算法的一種優(yōu)化版本,所以不再討論。其中論運(yùn)算速度而言,fast>surf>sift,但是sift算子的提取特性最好,能擁有比較好的尺度一致性和旋轉(zhuǎn)一致性,能夠較好的保留特征,但是在很多情況下作為sift算法的改良版本surf算法也可以替代sift,以提高運(yùn)算效率。但是為了實(shí)現(xiàn)思路的可行性驗(yàn)證,先使用了效果最好的SIFT算法進(jìn)行項(xiàng)目的運(yùn)用。
Sift算法的核心是構(gòu)建了比例空間(Scalespace),來保證了尺度一致性,這也是它提取特征優(yōu)于別的算法,運(yùn)行速度相對(duì)較慢的主要原因。而它所運(yùn)用的尺度空間是通過構(gòu)造高斯金字塔來進(jìn)行構(gòu)造的,通過對(duì)比金字塔上下左右的像素塊來進(jìn)行特征像素的提取,并且運(yùn)用了泰勒展開的來進(jìn)行插值擬合真正的特征像素值和位置。隨后去除不穩(wěn)定的邊緣響應(yīng),最后對(duì)于每一個(gè)特征點(diǎn)都存在有八個(gè)方向的梯度大小,利用尺度空間和高斯分布提取到特征點(diǎn)在其他尺度空間的八個(gè)方向的梯度大小,組成了一個(gè)描述子,這個(gè)描述子為4*4*8 = 128個(gè)數(shù)字向量。
SIFT的詳細(xì)原理可以參考博客:
https://blog.csdn.net/u010440456/article/details/81483145
作為SIFT的優(yōu)化算法,SURF的原理可以參考博客:
https://blog.csdn.net/dcrmg/article/details/52601010
1.2????? 圖像特征的配準(zhǔn)
在配準(zhǔn)中所使用的算法在opencv中也有集成,常用的主要有Brute Force,又稱為暴風(fēng)算法,以及FLANN算法,即最鄰近尋找法。
暴風(fēng)算法是將兩幅圖中所有的描述子都盡可能地進(jìn)行比對(duì),選出最具接近的兩個(gè)描述子進(jìn)行配對(duì),但是這樣的做法會(huì)更慢。FLANN算法是SIFT算法的提出者Lowe提出的,FLANN算法則是找出與描述子最接近的兩個(gè)描述子進(jìn)行比對(duì),當(dāng)次近距離大于最近距離的某個(gè)比例閾值時(shí),則認(rèn)為其中最近的描述子與原圖描述子配對(duì)成功,并且在進(jìn)行開發(fā)的時(shí)候,這種算法更具有可操作性,能夠修改閾值或者是調(diào)用源碼來與其他函數(shù)進(jìn)行交互。所以在項(xiàng)目中使用了FLANN作為核心的匹配算法。
FLANN的核心在于聚類,聚類是機(jī)器學(xué)習(xí)中一個(gè)比較重要的領(lǐng)域。而FLANN所用到的聚類則是基于隨機(jī)k-d樹,和kmeans方法。K-d樹在于隨機(jī)將描述子進(jìn)行劃分,而kmeans則在于將描述子與最近的節(jié)點(diǎn)進(jìn)行歸類,這種方法相較于單純的kmeans而言會(huì)更加具有效率。
關(guān)于FLANN算法的具體原理和基礎(chǔ)使用可以參考博客:
https://blog.csdn.net/cshilin/article/details/52107580
1.3 類模型的描述
這里所說的類模型指的是用于作為匹配的原圖LOGO,也就是說,在項(xiàng)目中會(huì)使用該模型與場(chǎng)景相比對(duì),來匹配出場(chǎng)景中的LOGO。這個(gè)機(jī)器學(xué)習(xí)的思路參考論文:《Logo localization and recognition in natural images using homographic class graphs》
在這個(gè)思路中,我們需要訓(xùn)練處這樣一個(gè)類模型。在這之中,訓(xùn)練集主要來源于視頻中截取下來的logo或者是線下拍攝的logo,并且注意要從不同角度進(jìn)行拍攝以提供學(xué)習(xí),同時(shí)注意在拍攝過程中,相鄰角度不宜變化太大,也就是說當(dāng)想要拍攝小角度時(shí),需要從大角度的視角多采集幾組圖片變化到小角度,否則會(huì)影響到學(xué)習(xí)的效率。
根據(jù)不同的兩張圖片,它們之間從理論上而言,存在有一個(gè)透視矩陣將其連接起來,并且理想情況下,它們的相互變換的兩個(gè)透視矩陣應(yīng)互相為逆矩陣,將一張圖片映射到另一張圖片上的透視矩陣稱為單應(yīng)性矩陣(homograph matrix),這個(gè)矩陣為一個(gè)3×3的矩陣,對(duì)應(yīng)著旋轉(zhuǎn)、平移和透視,并且右下腳的元素為1,所以在進(jìn)行透視變換的時(shí)候需要有四對(duì)點(diǎn)來進(jìn)行單應(yīng)性矩陣的求解。而這四對(duì)點(diǎn)則主要是通過FLANN成功配對(duì)的四對(duì)點(diǎn),而為了降低錯(cuò)誤匹配帶來的誤差,同時(shí)使用了RANSAC算法來進(jìn)行矩陣的求解,同時(shí)進(jìn)一步篩選掉FLANN中錯(cuò)誤的點(diǎn)。
RANSAC為隨機(jī)一致性采樣,核心在于迭代隨機(jī)選擇4對(duì)特征點(diǎn)來進(jìn)行直接的線性變化(DLT)來確定單應(yīng)性矩陣,通過不斷地迭代,將FLANN所匹配出來的點(diǎn)分為內(nèi)點(diǎn)和外點(diǎn)。拿二維采樣變量x,y來舉例子,RANSAC相當(dāng)于不停地對(duì)x,y進(jìn)行擬合,最后擬合出一條直線,并且將遠(yuǎn)離直線的點(diǎn)判斷為外點(diǎn),貼近直線的點(diǎn)為內(nèi)點(diǎn)。
RANSAC的原理可以參考博客:
https://blog.csdn.net/weixin_43795395/article/details/90751650?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
在匹配訓(xùn)練模型的時(shí)候,將匹配閾值設(shè)置得小一些,以匹配出更具有代表性的點(diǎn)。利用兩兩圖片之間的單應(yīng)性矩陣,可以判斷出兩張圖片之間是否相連,也就是是否能夠互相進(jìn)行投影變換,在進(jìn)行程序操作之后,有可能出現(xiàn)兩張圖片之間不存在單應(yīng)性矩陣的情況。將圖片進(jìn)行兩兩連接,保證每張圖都能夠相互連接上之后,繪制出logo之間的互連圖,選取連接數(shù)最多的圖像作為中心圖像,然后找出各個(gè)圖像離中心圖像的最短路徑,并且需要遍歷所有l(wèi)ogo,以確定所有的logo都與中心圖像能夠直接或者間接的連接(注意路徑不宜太長(zhǎng),否則會(huì)累計(jì)誤差,在測(cè)試中的最長(zhǎng)路徑為3,此時(shí)已經(jīng)產(chǎn)生了較大的誤差)。
將經(jīng)過RANSAC之后被確定為的內(nèi)點(diǎn)稱為‘好點(diǎn)’,將‘好點(diǎn)’通過路徑映射到中心圖像上,構(gòu)成類模型,同時(shí)注意要將這些‘好點(diǎn)’的描述子進(jìn)行統(tǒng)計(jì)和綜合。
最后的匹配結(jié)果如下:
在視頻中的某幀表現(xiàn):
可以看見這種方式對(duì)匹配確實(shí)有著較好的效果,同時(shí)在調(diào)試過程中發(fā)現(xiàn),訓(xùn)練過程中LOGO越大,訓(xùn)練效果越好,描述子更清晰,特征更明顯;匹配過程中,場(chǎng)景圖像的尺寸越大,匹配效果越好,能夠匹配更清晰的特征。同時(shí)當(dāng)角度太小或者光照弱時(shí),很可能無法配對(duì)成功,會(huì)出現(xiàn)誤匹配。
同時(shí)在光照很弱的時(shí)候,對(duì)比度不清晰的時(shí)候,需要對(duì)logo區(qū)域進(jìn)行圖像增強(qiáng)處理,在調(diào)試過程中主要嘗試了線性變換、直方圖正規(guī)化、伽馬變化、全局直方圖均衡、自適應(yīng)直方圖均衡化和拉普拉斯圖像銳化,其中使用直方圖正規(guī)化結(jié)合線性變換的效果最好,并且能夠進(jìn)行循環(huán)處理。
2 官方logo模型
除了自己拍攝的一些圖像之外,利用一些較為準(zhǔn)確的官方LOGO圖像,能夠更加精確地算出logo上的匹配點(diǎn)到邊框的距離,能夠更精準(zhǔn)地?fù)Q算出機(jī)器人的位置。
同時(shí)參考上述訓(xùn)練的思路,利用官方LOGO進(jìn)行各種角度的透視變換,能夠減少由于路徑長(zhǎng)度而導(dǎo)致單應(yīng)性矩陣誤差累積的情況,對(duì)于不同模型上的映射點(diǎn)能夠更準(zhǔn)確地投射到中心模型上,而此處的中心模型選用所提供的官方LOGO正視圖。
得到類模型如下:
最后將上圖中不同LOGO圖片中檢測(cè)到的特征點(diǎn)整合到了官方的LOGO圖上,得到了官方logo模型。但是這個(gè)模型上特征點(diǎn)太多,容易出現(xiàn)場(chǎng)景的誤匹配。可以在檢測(cè)的時(shí)候?qū)τ诿總€(gè)LOGO的圖片都只保留特征最明顯的前幾個(gè)點(diǎn)來減少模型上的特征點(diǎn)。
3????? 場(chǎng)景區(qū)域檢測(cè)范圍優(yōu)化
在匹配過程中會(huì)發(fā)現(xiàn),對(duì)場(chǎng)景的檢測(cè)會(huì)很慢,主要是攝取場(chǎng)景的清晰度高、尺寸大、特征點(diǎn)較多,而框選出一定的區(qū)域來進(jìn)行檢測(cè)和匹配能夠大幅提升特征檢測(cè)速度和匹配速度。
可以根據(jù)卡爾曼濾波或者是其他方式來綜合修正矩形框的位置,或者是改變所截取的模板,例如做出灰度直方圖來將除框選出來的范圍外,填充上框內(nèi)的平均灰度值以降低框的邊緣對(duì)于檢測(cè)的影響,也可以增加匹配的準(zhǔn)確率。
總結(jié)
以上是生活随笔為你收集整理的pcl中ransac提取直线_复杂场景中的一个图像配准思路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 迁西是哪个省的哪个市(河北省唐山市迁西县
- 下一篇: 电路中滤波电容和退耦电容_详解电源滤波电