本發(fā)明涉及影像處理技術(shù)領(lǐng)域,具體地說,涉及一種多幅影像間的快速相似度計(jì)算方法。
背景技術(shù):
高分辨率影像在進(jìn)行特征提取之后,需要通過特征匹配來建立相似關(guān)系,并計(jì)算相似度。計(jì)算相似度的算法如果性能不高,會(huì)嚴(yán)重影響建立在此技術(shù)路線之上的應(yīng)用。如果是多張影像兩兩計(jì)算,性能更差?,F(xiàn)有的算法,當(dāng)影像的特征點(diǎn)個(gè)數(shù)在1000以內(nèi)時(shí),相似度的計(jì)算性能基本沒問題。但當(dāng)特征點(diǎn)數(shù)目急劇增加時(shí),性能就會(huì)陡降。因?yàn)橛?jì)算和特征點(diǎn)個(gè)數(shù)的關(guān)系,是指數(shù)相關(guān)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服上述技術(shù)存在的缺陷,提供一種多幅影像間的快速相似度計(jì)算方法,該方法可以在sift特征點(diǎn)匹配的基礎(chǔ)上,快速的計(jì)算出多張影像之間的相似度,提供O(k2n2)復(fù)雜性的算法,k是常量,n是影像個(gè)數(shù)。
其具體技術(shù)方案為:
一種多幅影像間的快速相似度計(jì)算方法,包括以下步驟:
輸入:影像集合p={imagei},i=1,2...n,f={featurei},i=1,2...m;
輸出:影像兩兩相似度矩陣Sim[pi,pj];
步驟1 computeTrack():計(jì)算每一個(gè)影像的SIFT特征點(diǎn)的idf;
步驟2 構(gòu)造K個(gè)hash函數(shù);
步驟3 對所有影像進(jìn)行K次哈希求值;
步驟4 foreach imagei and imagej;
步驟5 Sim[pi,pj]=imagei和imagej之間的相似度sim(pi,pj);
步驟6 endfor。
進(jìn)一步,步驟1中computeTrack()計(jì)算每一個(gè)影像的SIFT特征點(diǎn)的idf倒排索引,輸出的就是各個(gè)特征點(diǎn)在各個(gè)影像上的分布情況的稀疏矩陣。
進(jìn)一步,步驟2中構(gòu)造K個(gè)hash函數(shù),此處定義K=50,哈希函數(shù)是單向映射函數(shù),選擇標(biāo)準(zhǔn)較為寬泛,只要能夠從[0..R-1]映射到[0..R-1]即能采用,主要的目標(biāo)就是均勻的覆蓋所有值域區(qū)間。利用哈希函數(shù)生成器,指定映射的范圍,能方便生成指定數(shù)目的哈希函數(shù)。
進(jìn)一步,步驟3中哈希求值:使用這K個(gè)hash函數(shù),對每個(gè)影像中的每個(gè)特征點(diǎn)進(jìn)行哈希求值,記為h(featurei),i=1,2...m。每個(gè)影像imagei都得到K個(gè)hmink(imagei),hmink(imagei)是影像imagei中的特征點(diǎn)元素經(jīng)過hash函數(shù)變換后,具有最小哈希值的特征點(diǎn)元素featurei,此時(shí)每個(gè)影像維度為K,比原有的影像上特征點(diǎn)維度n大大降低了。
進(jìn)一步,步驟4中影像imagei和影像imagej之間的相似度計(jì)算,采用如下公式:
sim(pi,pj)=
|hmink(imagei)∩hmink(imagej)|/hmink(imagei)∪hmink(imagei)
即在K個(gè)最小哈希值中求出交集和并集之比,即為兩個(gè)影像的相似度。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
本發(fā)明可以在sift特征點(diǎn)匹配的基礎(chǔ)上,快速的計(jì)算出多張影像之間的相似度,提供O(k2n2)復(fù)雜性的算法,k是常量,n是影像個(gè)數(shù)。
具體實(shí)施方式
為了使本發(fā)明實(shí)現(xiàn)的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解,下面結(jié)合具體實(shí)例進(jìn)一步闡述本發(fā)明。
輸入:影像集合p={imagei},i=1,2...n,f={featurei},i=1,2...m;
輸出:影像兩兩相似度矩陣Sim[pi,pj];
1 computeTrack():計(jì)算每一個(gè)影像的SIFT特征點(diǎn)的idf;
2 構(gòu)造K個(gè)hash函數(shù);
3 對所有影像進(jìn)行K次哈希求值;
4 foreach imagei and imagej;
5 Sim[pi,pj]=imagei和imagej之間的相似度sim(pi,pj);
6 endfor。
對上述算法進(jìn)行說明如下:
1)computeTrack()計(jì)算每一個(gè)影像的SIFT特征點(diǎn)的idf(倒排索引),輸出的就是各個(gè)特征點(diǎn)在各個(gè)影像上的分布情況的稀疏矩陣。
2)構(gòu)造K個(gè)hash函數(shù),此處定義K=50。因?yàn)楣:瘮?shù)是單向映射函數(shù),所以選擇標(biāo)準(zhǔn)較為寬泛,只要能夠從[0..R-1]映射到[0..R-1]即可采用,主要的目標(biāo)就是均勻的覆蓋所有值域區(qū)間。利用哈希函數(shù)生成器,指定映射的范圍,可以方便生成指定數(shù)目的哈希函數(shù)。
3)哈希求值:使用這K個(gè)hash函數(shù),對每個(gè)影像中的每個(gè)特征點(diǎn)進(jìn)行哈希求值(每個(gè)特征點(diǎn)包含的信息有對應(yīng)的影像序列,像點(diǎn)坐標(biāo)),記為h(featurei),i=1,2...m。每個(gè)影像imagei都得到K個(gè)hmink(imagei),hmink(imagei)是影像imagei中的特征點(diǎn)元素經(jīng)過hash函數(shù)變換后,具有最小哈希值的特征點(diǎn)元素featurei。此時(shí)每個(gè)影像維度為K,比原有的影像上特征點(diǎn)維度n大大降低了。
4)影像imagei和影像imagej之間的相似度計(jì)算,采用如下公式:
sim(pi,pj)=
|hmink(imagei)∩hmink(imagej)|/hmink(imagei)∪hmink(imagei)
即在K個(gè)最小哈希值中求出交集和并集之比,即為兩個(gè)影像的相似度。實(shí)際上直接利用Jacarrd距離算出兩個(gè)影像的近似相似度,在實(shí)驗(yàn)中驗(yàn)證是足夠使用的,因?yàn)橛行┯跋裢耆珱]有重疊度,這種影像間的相似度計(jì)算本應(yīng)該采取快速的方式處理,相反如果用里面所有的SIFT特征點(diǎn)做蠻力比較,效率將會(huì)非常低下。
使得影像分辨率在非常大的情況下,也可以提供一個(gè)快速的相似度計(jì)算,算法的時(shí)間復(fù)雜度為O(nk)。其中,n是匹配點(diǎn)個(gè)數(shù),k是個(gè)常數(shù)值。
和多幅影像比較知名的相似度匹配算法Farenzena算法進(jìn)行了對比。Farenzena的方法需要計(jì)算特征點(diǎn)的串點(diǎn)信息之外,還需要在每張圖像上計(jì)算出其包含的凸包范圍以及兩兩圖像對間特征點(diǎn)的交集,計(jì)算復(fù)雜度是O(m2n2),m和n分別為影像數(shù)量和匹配點(diǎn)數(shù)量。相比之下,minhash基于局部hash的特征比較,計(jì)算維度為固定的K維,即hash函數(shù)的個(gè)數(shù),這個(gè)數(shù)量遠(yuǎn)比特征點(diǎn)的個(gè)數(shù)要小,算法復(fù)雜度為:T(n)=O(Kn)+O(K2n2)=O(K2n2)。
在分辨率高的圖像上,K的大小遠(yuǎn)小于m,因此這種方法相似度比較的性能會(huì)明顯高一個(gè)數(shù)量級(jí)。在進(jìn)行這兩種方法的性能對比時(shí),采用50張左右的圖像進(jìn)行相似度計(jì)算,對原始的5000×4000圖像通過重采樣生成不同分辨率的圖像,并分別使用SIFT提取特征點(diǎn),并使用線性hash函數(shù)生成器,生成100個(gè)hash函數(shù)分別將特征點(diǎn)ID映射到0-1的范圍中去。在表1中,使用了5組圖像進(jìn)行相似度計(jì)算的耗時(shí)比較,可以發(fā)現(xiàn)采用Farenzena的方法,在特征點(diǎn)數(shù)小于1000時(shí),和minhash算法的性能基本相當(dāng),但當(dāng)特征點(diǎn)數(shù)目變得特別多的時(shí)候,性能差異就非常的明顯。
表1
以上所述,僅為本發(fā)明最佳實(shí)施方式,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),可顯而易見地得到的技術(shù)方案的簡單變化或等效替換均落入本發(fā)明的保護(hù)范圍內(nèi)。