大唯機(jī)電安裝工程(蘇州)有限公司 張 博
隨著計(jì)算機(jī)技術(shù)的發(fā)展,圖像處理在許多行業(yè)得到了廣泛的應(yīng)用,圖像拼接技術(shù)可以方便快速的獲得寬視域的圖像。本文基于OpenCV計(jì)算機(jī)視覺庫和SIFT圖像匹配算法,采用C++開發(fā)語言,實(shí)現(xiàn)了圖像的快速拼接。實(shí)驗(yàn)結(jié)果表明:采用SIFT算法進(jìn)行圖像拼接,通過加權(quán)融合消除了拼接的裂縫現(xiàn)象,達(dá)到了預(yù)期的拼接效果。
圖像拼接技術(shù)在圖像處理領(lǐng)域占有重要的地位,它在無人機(jī)影像處理、醫(yī)學(xué)圖像處理以及安防監(jiān)控有著廣泛的應(yīng)用,具有良好的研究前景。圖像拼接的任務(wù)是將一幅或者多幅具有部分相同特征點(diǎn)的圖像組合在一起,形成一幅新的圖像。所形成的新的圖像具有更寬的視域,具有一定的研究價(jià)值。
尺度不變特征變換(Scale Invariant Feature Transform,SIFT)利用128維的特征向量來表示圖像中檢測到的特征點(diǎn)。因此,經(jīng)過SIFT算法,圖像被表示為128維的特征向量集。這個(gè)特征向量集既能夠使圖像經(jīng)過旋轉(zhuǎn)、縮放以及平移仍然保持不變,又能夠在光照和投影變換下具有較高的魯棒性。其實(shí)質(zhì)是在圖像的不同尺度空間中尋找關(guān)鍵點(diǎn),并得到關(guān)鍵點(diǎn)的方向。其步驟可以大致分為以下五步。
(1)建立高斯差分金字塔,對不同分組中的圖像采用降采樣,使用不同尺度的高斯核對原始圖像在不同圖像層上進(jìn)行卷積,進(jìn)而生成高斯金字塔。然后在高斯金字塔中將相鄰的兩幅圖像相減生成高斯差分金字塔(DOG)。
(2)關(guān)鍵點(diǎn)的初步確定,關(guān)鍵點(diǎn)是由DOG空間中的局部極大、極小值點(diǎn)組成,通過在高斯金字塔中某一層圖像的領(lǐng)域中比較同組的相鄰兩幅圖像完成關(guān)鍵點(diǎn)的初始定位。
(3)為了準(zhǔn)確確定關(guān)鍵點(diǎn)的位置和尺度,采用三維二次函數(shù)在檢測到的初步極值點(diǎn)附近對三個(gè)變量進(jìn)行二階泰勒展開,以獲得精確點(diǎn)。
(4)為關(guān)鍵點(diǎn)賦予主方向,為了使特征描述子具備旋轉(zhuǎn)不變性,需要利用圖像的局部特征為每個(gè)關(guān)鍵點(diǎn)給定一個(gè)參考方向。通過采用對圖像求取梯度的方式來計(jì)算出圖像的局部穩(wěn)定方向。計(jì)算在DOG空間中所確定的關(guān)鍵點(diǎn)對應(yīng)在高斯金字塔中3σ鄰域窗口中像素的梯度和方向分布。
(5)在對于在高斯差分金字塔中檢測到的關(guān)鍵點(diǎn),計(jì)算高斯金字塔圖像構(gòu)建關(guān)鍵點(diǎn)描述符,通過以上步驟,我們找到了一張圖片中的關(guān)鍵點(diǎn),擁有三個(gè)信息:位置x,y、尺度以及主方向。為了將兩張圖片中的同一關(guān)鍵點(diǎn)匹配起來,需要構(gòu)建一個(gè)描述符,這個(gè)描述符就是一個(gè)128維的向量。
SIFT缺點(diǎn):
(1)速度慢,實(shí)時(shí)性不高。
(2)對模糊圖像和平滑邊緣圖像無效。
SIFT算法的優(yōu)點(diǎn)有:
(1)SIFT算法找到的圖像特征是局部的,對于旋轉(zhuǎn)、縮小放大和對比度變化具有較高的適應(yīng)性,對拍攝角度的改變、錯(cuò)切變換以及附加噪聲也有較好的效果。
(2)精確性性好,特征點(diǎn)豐富,達(dá)到精確匹配。
(3)多量性,即使是少數(shù)目標(biāo)也能產(chǎn)生豐富的特征向量。
SIFT算法是古老而經(jīng)典的算法,時(shí)至今日,其研究價(jià)值還有很大。其應(yīng)用場景有很多,以下列舉幾種SIFT算法應(yīng)用典型場合:
物體識別
機(jī)器人定位與導(dǎo)航
圖像拼接
三維建模
手勢識別
視頻跟蹤
筆記鑒定
指紋與人臉識別
圖像拼接廣泛應(yīng)用于實(shí)際場景中,如無人機(jī)影像處理、遙感圖像等。非常貼近于我們?nèi)粘I畹囊粋€(gè)例子就是,當(dāng)你用你的手機(jī)對某一場景拍照,但你不可能一次拍下所有你想拍的東西,所以你要從左到右拍幾張照片來記錄所有你想拍的東西。這時(shí),我們利用圖像拼接技術(shù)將圖片拼接成一幅寬視域的圖片。
利用SIFT算法實(shí)現(xiàn)圖像拼接是一種非常常用的方法,采用SIFT進(jìn)行圖像拼接可以達(dá)到較高的精確度和穩(wěn)定性。下面詳細(xì)描述拼接的主要步驟。
特征點(diǎn)提取和匹配:
對于不同的圖像,由于圖像的元素都不同,每幅圖像都有自己獨(dú)特的特征。因此找出圖像的特征點(diǎn)是圖像拼接的首要任務(wù)。
圖像拼接中有很多特征檢測算法可以使用,如sift、surf、Harris角點(diǎn)和ORB等。本文將利用SIFT算法來進(jìn)行圖像拼接,采用SIFT進(jìn)行圖像拼接雖然速度比較慢,但是可以找到精確的特征點(diǎn),可以達(dá)到較高的精確度和穩(wěn)定性。如圖1、圖2所示。
圖1 拼接左圖
圖2 拼接右圖
首先我們使用SIFT算法進(jìn)行特征點(diǎn)的提取和描述,如圖3所示。
圖3 特征點(diǎn)檢測匹配
在不同的條件下,如光照、對比度、拍攝角度等,用同一相機(jī)或不同相機(jī)拍攝某一地點(diǎn),所得到的圖像,其角度、尺度、變形等大都不同。為了順利完成圖像拼接,需要對兩幅圖像進(jìn)行配準(zhǔn),盡可能的縮小要拼接圖像的差異,如圖4所示。
圖4 圖像配準(zhǔn)
接下來進(jìn)行圖像拷貝,拷貝即將要匹配的左邊圖片直接拷貝在已經(jīng)獲得的匹配標(biāo)準(zhǔn)圖中,結(jié)果如圖5所示。
圖5 圖像拷貝
可以看出拼接好的圖像存在明顯的裂縫,原因是所用的拼接圖像是在不同的時(shí)間拍攝,光照存在著明顯的差異。這里我們采用前面所述的加權(quán)融合進(jìn)行處理,結(jié)果如圖6所示。
圖6 圖像融合
可以看到,經(jīng)過融合處理的圖像看不到拼接的痕跡,兩圖過渡自然,達(dá)到了預(yù)期的拼接效果。
基于OpenCV利用傳統(tǒng)的經(jīng)典SIFT算法完成特征檢測,進(jìn)而進(jìn)行圖像配準(zhǔn)、融合。實(shí)驗(yàn)結(jié)果表明:采用SIFT算法進(jìn)行圖像拼接,通過加權(quán)融合消除了拼接的裂縫現(xiàn)象,達(dá)到了預(yù)期的拼接效果。