陳茂霖,萬幼川,楊秋蘭,張 文
(1.武漢大學(xué) 遙感信息工程學(xué)院,湖北 武漢 430079)
隨著衛(wèi)星影像的來源越來越廣,在一個影像數(shù)據(jù)庫中往往存在著不同分辨率的多尺度影像,影像庫必須能夠處理多尺度影像同時調(diào)度顯示的問題。相對于傳統(tǒng)單幅影像金字塔,多尺度影像金字塔可以結(jié)合多種衛(wèi)星影像數(shù)據(jù)源,為每個尺度選取最合適的影像數(shù)據(jù)源,很大程度上減少單幅影像由于多次重采樣而帶來的大量影像信息丟失,同時每層影像也可以得到更好的效果。
目前,很多學(xué)者對影像金字塔的生成方法做了研究。譚慶泉[1]、余粉香[2]、張利[3]等在金字塔的構(gòu)建效率、生成方法上進(jìn)行了分析和研究,但不涉及多尺度影像金字塔的生成方法。贠建明[4]等對多尺度影像建立金字塔進(jìn)行了總結(jié),提出了各影像獨立建立金字塔和統(tǒng)一層次建立金字塔2種方法;劉升容等[5]提出利用多源影像(SPOT、ALOS、IKONOS、Quick-Bird、資源二號等)建立遙感影像瓦片金字塔的方法和步驟;岳利群等提出了多分辨率數(shù)據(jù)的組織和編碼方式[6]。本文針對多尺度影像金字塔的構(gòu)建問題,提出了一種基于不規(guī)則切片的多尺度影像金字塔構(gòu)建算法,并對算法進(jìn)行了開發(fā)和實驗分析。
分塊是指將金字塔的每一層影像按照給定寬度分割成標(biāo)準(zhǔn)大小的正方形瓦片來組織存貯[7]。一般使用等長寬圖塊,這種規(guī)則切片方法對于長寬相等的影像完全適用;但在影像長寬不等的情況下,規(guī)則切片方式往往會造成不必要的切塊數(shù)據(jù)冗余。
長寬不等的影像構(gòu)建金字塔時,利用不規(guī)則切片對影像進(jìn)行切塊可以減少不必要的數(shù)據(jù)冗余,加快處理速度。在已知原始影像長寬的情況下,需要實現(xiàn)切塊大小和金字塔層級之間的互推。
1)由圖塊大小計算層級。由于對金字塔進(jìn)行四叉樹編碼的原因,每層金字塔中,X方向和Y方向上的圖塊數(shù)都必定為2的整數(shù)次冪,使得影像往往不能被整分。因此,在切塊時需要對原始影像補(bǔ)0或刪除多余像素。這里選擇對原始影像補(bǔ)0的處理方式。
若令I(lǐng)mageWidth為原始影像的寬,BlockWidth為分塊的寬,則計算過程如下:
首先計算中間值:
然后,用同樣的方法在另一影像高的方向上計算Level2,取Level1和Level2中最大值為金字塔層級:
2)由層級計算圖塊大小。
式中,BlockWidth和BlockHeight分別為分塊的寬度和長度;Imagewidth和Imageheight分別為原始影像的寬度和長度;Level為金字塔的層級數(shù)。
在獲得了合適的切片大小和金字塔層級數(shù)之后,便可實現(xiàn)對影像的切塊。具體過程為:①根據(jù)金字塔層級等參數(shù),得到原始影像分割后的圖塊的數(shù)量;②獲取第一個圖塊;③對當(dāng)前圖塊,遍歷其各像素。若當(dāng)前像素在原始影像范圍內(nèi),則令圖塊當(dāng)前像素值等于對應(yīng)的原始影像像素值,否則令圖塊當(dāng)前像素值為0;④當(dāng)前圖塊的像素遍歷結(jié)束后,若已遍歷完所有圖塊,影像分塊結(jié)束,否則獲取下一圖塊,并進(jìn)行③中的操作。
多尺度影像獨立構(gòu)建金字塔,是指各影像按單幅影像的方式生成金字塔后對各個金字塔建立索引,索引中記錄各金字塔的參數(shù)(金字塔層數(shù)、重采樣方式以及影像塊的大小、原始分辨率)。由于參數(shù)差異,不同原始分辨率的影像建成的金字塔在層次、層間采樣系數(shù)等方面必然各不相同,并且在相同層次上其分辨率也沒有任何聯(lián)系。
多尺度影像統(tǒng)一構(gòu)建金字塔,是將不同影像轉(zhuǎn)化到同一金字塔的不同層次上,進(jìn)而生成統(tǒng)一的影像金字塔,如圖1所示。這樣,金字塔每層的影像都由與其分辨率最相近的遙感影像采樣得到,最大程度上避免了因重采樣導(dǎo)致的信息損失。
圖1 統(tǒng)一金字塔構(gòu)建示意圖
統(tǒng)一金字塔的構(gòu)建,首先要確定金字塔層數(shù)以及每層的分辨率,對于不同來源的影像根據(jù)其分辨率將其映射到此固定的金字塔上。在構(gòu)建過程中,若出現(xiàn)多張影像在一個區(qū)域發(fā)生重疊的現(xiàn)象,選取分辨率與該層最相近的影像進(jìn)行重采樣,使影像信息的損失最小。本文采用金字塔統(tǒng)一構(gòu)建的方式。
多尺度影像金字塔的構(gòu)建算法是在單一影像金字塔構(gòu)建算法(見圖2)基礎(chǔ)上改進(jìn)而來的。
圖2 單一影像金字塔的構(gòu)建算法
本文多尺度影像金字塔的構(gòu)建算法主要在影像輸入和重采樣2個方面進(jìn)行改進(jìn)。
1)影像輸入。在輸入原始影像時,由于存在不同分辨率的多張影像,需要為這些影像的空間范圍、長寬、分辨率等信息建立索引,以方便重采樣時調(diào)用。
2)重采樣。與單一尺度影像重采樣不同,多尺度影像金字塔構(gòu)建時,需要在重采樣之前判斷是否存在其他尺度的影像與重采樣范圍有重合區(qū)域,然后分別進(jìn)行不同的處理。具體過程為:
①判斷分辨率大于當(dāng)前層次分辨率的其他尺度影像是否與重采樣區(qū)域有重疊部分。若無,則直接利用上一層影像數(shù)據(jù)進(jìn)行重采樣;否則得到有重疊范圍的影像索引。②通過索引中的影像得到重疊區(qū)域,處理過程中可能會得到多塊重疊區(qū)域。重疊區(qū)域之外的影像,利用上一層金字塔影像進(jìn)行重采樣。③在各重疊區(qū)域之內(nèi),分別提取分辨率與當(dāng)前分辨率最接近的影像作為重采樣的原始影像,完成重采樣。④重疊和非重疊區(qū)域的重采樣結(jié)果合并得到利用多尺度影像進(jìn)行重采樣的結(jié)果。
本文的實驗數(shù)據(jù)為5 000×5 000的蘇州地區(qū)QuickBird影像。實驗數(shù)據(jù)為jpg格式,空間信息文件為jgw格式。
在以上算法的基礎(chǔ)上,程序的實現(xiàn)還需要考慮一些其他的問題:
1)內(nèi)存的利用。由于四叉樹編碼的原因,算法的實現(xiàn)是一個遞歸循環(huán)的過程,中間過程會占用大量內(nèi)存。本文在C#開發(fā)環(huán)境中調(diào)用Win32動態(tài)鏈接庫kernel.dll中的SetProcessWorkingSetSize()函數(shù)來限制內(nèi)存的使用,其原理是將暫時不用的內(nèi)存放入虛擬內(nèi)存中,在需要時從虛擬內(nèi)存中讀取。
2)采樣密度與采樣算法。由于程序中利用四叉樹編碼為金字塔構(gòu)建索引,故采樣密度為2×2。常用的采樣算法包括最近鄰元法、雙線性內(nèi)插法和三次卷積。
考慮上述問題后,在VS2008中實現(xiàn)多尺度影像金字塔的程序構(gòu)建。影像路徑、保存路徑、圖塊大小、重采樣方法以及金字塔層數(shù)等參數(shù)都可以在程序界面中選擇。
選擇藍(lán)、白2個純色圖塊作為其他尺度的實驗影像,其中藍(lán)色圖塊分辨率為0.7、白色圖塊分辨率為0.3,令兩者部分重疊,原始圖像分辨率為0.2,構(gòu)建5層金字塔??梢园l(fā)現(xiàn),在第4層影像中只有白色圖塊,而從第3層開始藍(lán)色影像在重疊區(qū)域覆蓋了白色影像,如圖3所示。這樣便實現(xiàn)了一個多尺度影像金字塔的構(gòu)建。
圖3 多尺度影像構(gòu)建金字塔
3.3.1 2種切片方式的對比
本文通過實驗對2種切片方式進(jìn)行了實現(xiàn)和對比。
實驗采用1 501×989的不規(guī)則影像,按照四叉樹的規(guī)則對其分層分塊,分別采用256×256與256×128以及128×128與128×64兩組分塊方式進(jìn)行對比。計算每種分塊方式下金字塔構(gòu)建的平均用時,實驗結(jié)果見表1。
表1 不同切塊方式的對比
圖4 不同切塊方式的對比
由表1可知,在原始影像不規(guī)則的情況下,不規(guī)則的切片方式可以提高切塊的速度。圖4對比了256×256與256×128兩種切片方式所得的金字塔頂層影像,可以看出不規(guī)則的切片方式在原始影像長寬不等的情況下確實更有優(yōu)勢。
3.3.2 內(nèi)存限制對構(gòu)建效率的影響
為了分析內(nèi)存限制對金字塔構(gòu)建效率的影響,本文對內(nèi)存限制與金字塔構(gòu)建速度進(jìn)行了實驗和分析,實驗結(jié)果如表2所示。為了使實驗結(jié)果更加直觀,將實驗結(jié)果繪成折線圖,如圖5所示。有內(nèi)存限制的金字塔構(gòu)建時間只比無內(nèi)存限制的金字塔構(gòu)建多1 s左右,同龐大的內(nèi)存占用相比,可以忽略不記。
此外,從圖5中還可以看出,內(nèi)存限制設(shè)置小于14 MB時,構(gòu)建金字塔所消耗的時間普遍比較多;在內(nèi)存限制大于14 MB之后,構(gòu)建時間較短且基本保持穩(wěn)定。因此,通過合理設(shè)置內(nèi)存限制可以實現(xiàn)內(nèi)存占用與構(gòu)建速度的相對平衡。實驗程序中,將內(nèi)存的限制設(shè)為20 MB。
表2 內(nèi)存與金字塔構(gòu)建時間的關(guān)系
圖5 內(nèi)存與構(gòu)建時間關(guān)系圖
3.3.3 采樣方式對效果和效率的影響
本文實驗程序用到了最近鄰元法和雙線性內(nèi)插2種重采樣方式,它們對金字塔的構(gòu)建效率和效果有不同的影響。圖6是2種采樣方式效率的對比,可以看出最近鄰元法生成影像金字塔要比雙線性內(nèi)插法平均節(jié)省1 s左右的時間。圖7是2種采樣方式的效果對比,可以看出隨著采樣次數(shù)的增加,最近鄰元法會破壞地物的邊界,產(chǎn)生大量圖斑,而雙線性內(nèi)插法的效果則明顯優(yōu)于最近鄰元法。綜合來看,最近鄰元法微小的效率提升不足以彌補(bǔ)影像效果的不足,因此,雙線性內(nèi)插法更優(yōu)于最近鄰元法,本文實驗也采用最近鄰元法進(jìn)行重采樣。
圖6 采樣效率對比圖
圖7 采樣效果對比圖
本文在一般的影像金字塔構(gòu)建算法基礎(chǔ)上,實現(xiàn)了一種基于不規(guī)則分塊的多尺度影像金字塔的構(gòu)建方法,將多分辨率的遙感影像統(tǒng)一起來,構(gòu)建金字塔;并通過設(shè)置不同的參數(shù),在平衡構(gòu)建效率和內(nèi)存占用的基礎(chǔ)上,實現(xiàn)了多尺度影像金字塔的構(gòu)建。與規(guī)則切片方式相比,不規(guī)則切片的方式可以減少數(shù)據(jù)冗余并提高切塊效率。同時,隨著遙感數(shù)據(jù)來源的增加,利用多尺度影像金字塔對數(shù)據(jù)進(jìn)行管理會顯得更加重要。本文的算法是對傳統(tǒng)金字塔構(gòu)建算法的補(bǔ)充和完善,對于多源影像的統(tǒng)一管理、網(wǎng)絡(luò)傳輸和查詢有著很大的幫助。
[1]譚慶泉,畢建濤,池天河.一種靈活高效的遙感影像金字塔構(gòu)建算法[J].計算機(jī)系統(tǒng)應(yīng)用,2008(4):124-127
[2]余粉香.目標(biāo)影像數(shù)據(jù)庫的設(shè)計與實現(xiàn)[D].鄭州:信息工程大學(xué),2006
[3]張利.多尺度海量柵格數(shù)據(jù)組織與管理的研究[D].鄭州:信息工程大學(xué),2005
[4]贠建明,汪匯兵,唐新明.多源影像數(shù)據(jù)庫金字塔結(jié)構(gòu)的研究與實踐[J].測繪科學(xué),2011,36(4):53-55
[5]劉升容,劉學(xué)鋒.全國第二次土地調(diào)查中海量遙感影像瓦片金字塔的建立與無縫組織[J].測繪通報,2011(7):37-39
[6]岳利群,夏青,柳佳佳,等.一種全球多分辨率地形數(shù)據(jù)組織管理的方法[J].測繪通報,2008(4):25-27
[7]宋洪江,趙忠明.圖像分塊分層結(jié)構(gòu)在海量數(shù)據(jù)處理中的應(yīng)用[J].計算機(jī)工程與應(yīng)用, 2004(33):31-34
[8]李建松.地理信息系統(tǒng)原理[M].武漢:武漢大學(xué)出版社,2010