熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A
SIFT(Scale-Invariant Feature Transform,尺度不變特征轉(zhuǎn)換)在目標(biāo)識(shí)別、圖像配準(zhǔn)領(lǐng)域具有廣泛的應(yīng)用,下面按照SIFT特征的算法流程對(duì)其進(jìn)行簡(jiǎn)要介紹對(duì)SIFT特征做簡(jiǎn)要介紹。
高斯金字塔是SIFT特征提取的第一步,之后特征空間中極值點(diǎn)的確定,都是基于高斯金字塔,因此SIFT特征學(xué)習(xí)的第一步是如何建立的高斯金字塔。
明白幾個(gè)定義:
高斯金字塔 對(duì)于高斯金字塔,很容易直觀地理解為對(duì)同一尺寸的圖像,然后進(jìn)行不同程度的高斯平滑,這些圖像構(gòu)成高斯金字塔,這種是不對(duì)的,這描述的圖像集合叫做一個(gè)八度。金字塔總要有個(gè)變“尖”的過(guò)程,真正的高斯金字塔要有個(gè)平滑以及下采樣的過(guò)程,因此整個(gè)圖像平滑以及下采樣再平滑,構(gòu)成的所有圖像集合才構(gòu)成了圖像的高斯金字塔。
八度(octave) 簡(jiǎn)單地說(shuō)八度就是在特定尺寸(長(zhǎng)寬)下,經(jīng)不同高斯核模糊的圖像的集合。八度的集合是高斯金字塔。
為什么要構(gòu)建高斯金字塔:
整個(gè)高斯金字塔,或者說(shuō)是差分高斯金字塔是我們確定SIFT特征的基礎(chǔ),讓我們首先想想高斯金字塔到底干了一件什么事情,他到底模仿的是什么?答案很容易確定,高斯金字塔模仿的是圖像的不同的尺度,尺度應(yīng)該怎樣理解?對(duì)于一副圖像,你近距離觀察圖像,與你在一米之外觀察,看到的圖像效果是不同的,前者比較清晰,后者比較模糊,前者比較大,后者比較小,通過(guò)前者能看到圖像的一些細(xì)節(jié)信息,通過(guò)后者能看到圖像的一些輪廓的信息,這就是圖像的尺度,圖像的尺度是自然存在的,并不是人為創(chuàng)造的。好了,到這里我們明白了,其實(shí)以前對(duì)一幅圖像的處理還是比較單調(diào)的,因?yàn)槲覀兊年P(guān)注點(diǎn)只落在二維空間,并沒(méi)有考慮到“圖像的縱深”這樣一個(gè)概念,如果將這些內(nèi)容考慮進(jìn)去我們是不是會(huì)得到更多以前在二維空間中沒(méi)有得到的信息呢?于是高斯金字塔橫空出世了,它就是為了在二維圖像的基礎(chǔ)之上,榨取出圖像中自然存在的另一個(gè)維度:尺度。因?yàn)楦咚购耸俏ㄒ坏木€性核,也就是說(shuō)使用高斯核對(duì)圖像模糊不會(huì)引入其他噪聲,因此就選用了高斯核來(lái)構(gòu)建圖像的尺度。
下圖兩幅圖像是典型的圖像高斯金字塔,這就是模仿的圖像離你遠(yuǎn)去時(shí)在你視網(wǎng)膜上的成像,圖像分別以動(dòng)態(tài)方式表示。
高斯金字塔的構(gòu)建步驟:
高斯金字塔的構(gòu)建還是比較簡(jiǎn)單的,高斯卷積和是尺度變換的唯一的線性核。
高斯金字塔構(gòu)建過(guò)程中,一般首先將圖像擴(kuò)大一倍,在擴(kuò)大的圖像的基礎(chǔ)之上構(gòu)建高斯金字塔,然后對(duì)該尺寸下圖像進(jìn)行高斯模糊,幾幅模糊之后的圖像集合構(gòu)成了一個(gè)八度,然后對(duì)該八度下的最模糊的一幅圖像進(jìn)行下采樣的過(guò)程,長(zhǎng)和寬分別縮短一倍,圖像面積變?yōu)樵瓉?lái)四分之一。這幅圖像就是下一個(gè)八度的初始圖像,在初始圖像圖像的基礎(chǔ)上完成屬于這個(gè)八度的高斯模糊處理,以此類(lèi)推完成整個(gè)算法所需要的所有八度構(gòu)建,這樣這個(gè)高斯金字塔就構(gòu)建出來(lái)了。構(gòu)建出的金字塔如下圖所示:
什么是尺度空間:
以上已經(jīng)從人視覺(jué)感知的角度讓大家感性認(rèn)識(shí)了“尺度”,上文也提到使用高斯核來(lái)實(shí)現(xiàn)尺度的變換,那么具體實(shí)現(xiàn)過(guò)程中,尺度體現(xiàn)在哪里?是如何量化的呢?怎么在高斯金字塔中,兩個(gè)變量很重要,即第幾個(gè)八度(o)和八度中的第幾層(s),這兩個(gè)量合起來(lái)(o,s)就構(gòu)成了高斯金字塔的尺度空間。尺度空間也不難理解,首先一個(gè)八度中圖像的長(zhǎng)和寬是相等的,即變量o控制的是塔中尺寸這個(gè)尺度;區(qū)分同一個(gè)尺寸尺度下的圖像,就需要s了,s控制了一個(gè)八度中不同的模糊程度。這樣(o,s)就能夠確定高斯金字塔中的唯一一幅圖像了,這是個(gè)三維空間,兩維坐標(biāo),一維是圖像。
根據(jù)lowe的論文,(o,s)作用于一幅圖像是通過(guò)公式
確定的。通過(guò)公式也可以看出,尺度空間是連續(xù)的,兩個(gè)變量控制著δ的值,其中在第一個(gè)八度中有 1<(o+s/S)<=2 ,同理在第二個(gè)八度中有2<(o+s/S)<=3,以此類(lèi)推,δ中的關(guān)鍵部分(o+s/S)部分是逐漸增大的(具體實(shí)現(xiàn)時(shí),有些高斯金字塔中這個(gè)值是增大,但不是逐漸均勻增大,只能說(shuō)是連續(xù)的)。
上圖中第一個(gè)八度的中圖像的尺度分別是δ,kδ,k^2δ......,第二個(gè)八度的尺度分別是2δ,2kδ,2k^2δ........,同理第三個(gè)八度的尺度分別是4δ,4kδ,4k^2δ........。這個(gè)序列是通過(guò)下式來(lái)確定的:
所以每增加一級(jí)八度,δ都要擴(kuò)大2倍,在一個(gè)八度中,k的上標(biāo)s來(lái)區(qū)分不同的高斯核。
構(gòu)建差分高斯金字塔
構(gòu)建高斯金字塔是為了后續(xù)構(gòu)建差分高斯金字塔。對(duì)同一個(gè)八度的兩幅相鄰的圖像做差得到插值圖像,所有八度的這些插值圖像的集合,就構(gòu)成了差分高斯金字塔。過(guò)程如下圖所示,差分高斯金字塔的好處是為后續(xù)的特征點(diǎn)的提取提供了方便。
到這里,高斯金字塔構(gòu)建的主要部分、關(guān)鍵點(diǎn)都弄好了,一些非常重要的認(rèn)知就要呼之欲出了,下面解釋整個(gè)空間的尺度連續(xù)性!這是差分高斯金字塔的重中之重!
尺度空間的連續(xù)性
這里注意,連續(xù)性的主語(yǔ)既不是高斯金字塔,也不是差分高斯金字塔,而是尺度空間。在弄清楚這個(gè)問(wèn)題之前,我們還需要解決一個(gè)問(wèn)題,即為什么高斯金字塔中每個(gè)八度有s+3幅高斯圖像?s的意思是將來(lái)我們?cè)诓罘指咚菇鹱炙星髽O值點(diǎn)的時(shí)候,我們要在每個(gè)八度中求s層點(diǎn),通過(guò)lowe論文可知,每一層極值點(diǎn)是在三維空間(圖像二維,尺度一維)中比較獲得,因此為了獲得s層點(diǎn),那么在差分高斯金字塔中需要有s+2圖像,好了,繼續(xù)上溯,如果差分高斯金字塔中有s+2幅圖像,那么高斯金字塔中就必須要有s+3幅圖像了,因?yàn)椴罘指咚菇鹱炙怯筛咚菇鹱炙噜弮蓪酉鄿p得到的。好了,到了這里似乎真相大白,但是我們上面的推導(dǎo)有一個(gè)致命的問(wèn)題,我們上來(lái)就假設(shè)“我們要在每個(gè)八度中求s層點(diǎn)”,為什么要s層點(diǎn)呢?這才是這個(gè)小節(jié)的主題:是為了保持尺度的連續(xù)性!下面進(jìn)行詳細(xì)的分析:
以一個(gè)八度中的圖像為例說(shuō)明(此處最好結(jié)合OpenCV中金字塔構(gòu)建部分的源碼<下文已列出,可以參照>)
高斯金字塔和差分高斯金字塔那幾個(gè)公式還要在這里貼出來(lái)一下:
高斯函數(shù)G對(duì)圖像I的模糊函數(shù):
高斯差分函數(shù):
通過(guò)以上這兩個(gè)公式,可以確定一個(gè)八度中(以第一個(gè)八度為例)高斯圖像和差分高斯圖像的尺度如下(以lowe論文為例,s=3,所以每個(gè)八度中會(huì)有3+3=6幅圖像),每一幅圖像的尺度也在圖像標(biāo)示了出來(lái)。
在lowe的論文中s=3,因此有
因此,當(dāng)前八度中各高斯圖像的尺度依次為:
σ,2^(1/3)σ, 2^(2/3)σ, 2^(3/3)σ, 2^(4/3)σ, 2^(5/3)σ;
當(dāng)前八度中各差分高斯圖像的尺度依次為:
σ,2^(1/3)σ, 2^(2/3)σ, 2^(3/3)σ, 2^(4/3)σ。
同理,我們可以推斷出,下一個(gè)八度中各高斯圖像的尺度依次為:
2×σ,2×2^(1/3)σ,2×2^(2/3)σ,2×2^(3/3)σ,2×2^(4/3)σ,2×2^(5/3)σ;
下一個(gè)八度中各差分高斯圖像的尺度依次為:
2×σ,2×2^(1/3)σ,2×2^(2/3)σ,2×2^(3/3)σ,2×2^(4/3)σ。
可以觀察到,其中紅色標(biāo)注數(shù)據(jù)所代表的層,是差分高斯金字塔中獲得極值點(diǎn)的層,也就是說(shuō)只有在這些層上才發(fā)生與上下兩層比較獲得極值點(diǎn)的操作。下面將這些紅色數(shù)據(jù)連成一串:2^(1/3)σ, 2^(2/3)σ, 2^(3/3)σ,2×2^(1/3)σ,2×2^(2/3)σ,2×2^(3/3)σ......。發(fā)現(xiàn)了什么?對(duì)了,這些數(shù)據(jù)時(shí)連續(xù)的,我們通過(guò)在每個(gè)八度中多構(gòu)造三幅高斯圖像,達(dá)到了尺度空間連續(xù)的效果,這一效果帶來(lái)的直接的好處是在尺度空間的極值點(diǎn)確定過(guò)程中,我們不會(huì)漏掉任何一個(gè)尺度上的極值點(diǎn),而是能夠綜合考慮量化的尺度因子
所確定的每一個(gè)尺度!
下一個(gè)八度的第一幅圖像如何確定這個(gè)問(wèn)題,是上面問(wèn)題(尺度空間的連續(xù)性)的延伸,我們可以通過(guò)反推OpenCV中這一部分的源代碼,來(lái)理解這個(gè)問(wèn)題。
當(dāng)前八度中的第一幅圖像是通過(guò)前一個(gè)八度的倒數(shù)第三幅圖像得到。OpenCV這段源碼有個(gè)很重要的問(wèn)題:不同的八度間的尺度不是會(huì)有一個(gè)2的差異嗎?為什么本部分源碼并沒(méi)有體現(xiàn)這一點(diǎn),而是在對(duì)每一個(gè)八度處理中都是用相同的數(shù)組sig[]。首先明確一下sig數(shù)組內(nèi).存儲(chǔ)的并不是一個(gè)絕對(duì)的模糊核,而是相對(duì)的模糊核,這一點(diǎn)很重要,既然是相對(duì)的模糊核,那么第一幅圖像的核就很重要了,所以尺度的連續(xù)就看每個(gè)八度的第一幅圖像了。
對(duì)于以下列出的高斯金字塔的構(gòu)建過(guò)程來(lái)看,每個(gè)八度中的第一幅圖像并沒(méi)有一個(gè)2倍的尺度躍進(jìn)過(guò)程。但是,這個(gè)2倍的躍進(jìn)式隱含在整個(gè)高斯金字塔的構(gòu)建過(guò)程中了!
再看倒數(shù)第三幅圖像,這幅圖像的尺度是2^(3/3)*δ,3/3=1,也就是說(shuō),在這個(gè)八度中,第一幅圖像的尺度是δ,而倒數(shù)第三幅圖像的尺度是2*δ,正好發(fā)生了一個(gè)2的躍進(jìn)!這就是以這幅圖像作為基準(zhǔn)進(jìn)行下采樣的原因,如此的話,下一個(gè)八度的第一幅圖像的初始尺度就是2*δ了。
這就是真相,這就是為什么選用倒數(shù)第三幅圖像進(jìn)行下采樣的原因。