常思騰 龍小祥 公雪霜 徐啟龍 魏紅
(中國四維測繪技術(shù)有限公司 北京市 100048)
隨著衛(wèi)星載荷技術(shù)的強化和信息技術(shù)不斷發(fā)展,衛(wèi)星傳感器獲取的遙感圖像地面分辨率越來越高,遙感影像也越來越大。同時,在遙感衛(wèi)星更新頻次上,觀測周期越來越短,在短時間內(nèi)形成大量的遙感影像數(shù)據(jù)。遙感影像的日益豐富,數(shù)據(jù)量急劇增加,呈現(xiàn)出明顯的體量大、種類多、變化快等大數(shù)據(jù)特征[1]。不斷涌現(xiàn)的海量遙感數(shù)據(jù)需要大量的存儲和計算機資源,而傳統(tǒng)的臺式機或服務(wù)器受到CPU、內(nèi)存等硬件條件的制約,且讀取性能低下,難以滿足日益增長的容量需求,難以實現(xiàn)彈性擴容。
云計算的發(fā)展為遙感大數(shù)據(jù)提供了機遇,云存儲技術(shù)將存儲的資源和信息存儲在由廣域網(wǎng)和互聯(lián)網(wǎng)連接的多臺虛擬服務(wù)器上,有著存儲空間大、數(shù)據(jù)安全高、使用便捷性高等優(yōu)勢[2]。在海量遙感影像文件存儲在云端的場景下[3],將整景影像全部讀入內(nèi)存中的傳統(tǒng)遙感影像讀取方式已經(jīng)無法適用,因此,尋求更高效的面向云端存儲的遙感影像的讀取方式是當(dāng)下需要解決的重要問題之一。
目前主流的影像快速讀取技術(shù)主要有兩種:一是建立影像金字塔;二是影像分塊讀取[4‐7]。本文針對存儲在云端的遙感影像,在分析影像文件格式的基礎(chǔ)上,結(jié)合影像金字塔模型和網(wǎng)絡(luò)請求HTTP Range 特性,同時利用數(shù)據(jù)無損壓縮技術(shù)節(jié)省網(wǎng)絡(luò)傳輸時間,提升網(wǎng)絡(luò)讀取效率,研究了更適用于云端存儲的遙感影像文件組織結(jié)構(gòu),進而提升遙感影像的讀取性能。
在遙感應(yīng)用中,目前遙感影像、航測數(shù)據(jù)以及DEM 數(shù)據(jù)均采用GeoTIFF 文件格式,這是因為遙感行業(yè)要求圖像具有地理編碼信息,如圖像坐標(biāo)系系統(tǒng)、比例尺、像素坐標(biāo)與地理坐標(biāo)對應(yīng)關(guān)系、長度單位及角度單位等,而純TIFF 格式的圖像文件很難做到存儲和讀取這些信息[8‐11]。GeoTIFF作為TIFF 的一種擴展,在TIFF 的基礎(chǔ)上定義了一些地理標(biāo)簽,用于定義和存儲諸如橢球基準(zhǔn)、投影信息等地理編碼信息,實現(xiàn)了圖像數(shù)據(jù)和地理數(shù)據(jù)在同一圖像文件中的共存,這使得廣大用戶制作和使用帶有地理信息的圖像成為可能。
GeoTIFF 文件基本格式與TIFF 文件保持一致,以.tif或.tiff為擴展名,其數(shù)據(jù)格式是一種3 級體系結(jié)構(gòu),內(nèi)部結(jié)構(gòu)可以分成三個部分,分別是:文件頭(ImageFileHeader,IFH)、圖像文件目錄(ImageFileDirectory,IFD)和圖像數(shù)據(jù)區(qū),如圖1 所示。每個文件只能有一個文件頭,但可以有多個文件目錄和多個圖像數(shù)據(jù)區(qū);一個圖像文件目錄和一個圖像數(shù)據(jù)區(qū)對應(yīng)一幅圖像,圖像文件目錄包含對應(yīng)圖像的基本信息以及圖像數(shù)據(jù)在文件中的位置。
圖1:GeoTIFF 數(shù)據(jù)格式
文件頭是一個8 字節(jié)的頭塊區(qū),如表1 所示,前兩個字節(jié)描述TIFF 文件產(chǎn)生時字節(jié)的順序;第3‐4 字節(jié)是TIFF 文件的特定標(biāo)志,值為42 的整數(shù),由該值可以判斷對應(yīng)圖像是否為標(biāo)準(zhǔn)的TIFF 圖像文件;第5‐8 字節(jié)是第一個IFD 在文件中的地址或字節(jié)偏移量,一般IFD 的存儲位置在數(shù)據(jù)區(qū)之后,如果該4 字節(jié)的值轉(zhuǎn)換成整數(shù)時為8,則說明對應(yīng)圖像為BigTIFF,則需要從第9 個字節(jié)開始讀取8 個字節(jié),轉(zhuǎn)換為長整型作為第一個IFD 的存儲位置。
圖像文件目錄(ImageFileDirectory,IFD)是非常重要的數(shù)據(jù)結(jié)構(gòu),一個TIFF 文件可以包含多個IFD,這時表示此文件包含多個圖像,一個IFD 標(biāo)識一個圖像的屬性。如表2 所示,IFD 以鏈表的形式存放,長度不固定,其中前兩個字節(jié)是IFD 中存放的目錄項的個數(shù),隨后是一系列12 個字節(jié)的目錄項,最后4 個字節(jié)是指向下一個IFD 的偏移量。
一個圖像數(shù)據(jù)區(qū)記錄一個圖像的屬性,例如圖像的長、寬、分辨率等。其存儲結(jié)構(gòu)如表3 所示,每一個數(shù)據(jù)項包含標(biāo)簽的代碼、數(shù)據(jù)的類型代碼、存放數(shù)據(jù)的長度、偏移地址。
影像金字塔是利用不同分辨率、不同維數(shù)來表示同一幅影像,類似于古埃及金字塔的一種多層數(shù)據(jù)結(jié)構(gòu),影像金字塔技術(shù)已經(jīng)廣泛的應(yīng)用在影像處理系統(tǒng)中,特別是針對海量遙感影像數(shù)據(jù)的快速讀取效果尤為明顯。
影像金字塔是一種能對遙感影像按照逐級降低分辨率的拷貝方式存儲方法,通過重采樣技術(shù)生成不同比例尺的各層影像數(shù)據(jù),并且各層劃分為多個尺寸大小相同的圖像塊。如圖2 所示,金字塔模型組成部分包括多種不同層次的多分辨率影像模型,該影像模型全部來自于相同的原始影像,按照順序從最底層金字塔原始圖像中重采樣獲取下層圖像,當(dāng)滿足某個設(shè)定條件時結(jié)束采樣,該流程中獲取的影像分辨率逐層下降,而金字塔全部層數(shù)可表示相同的地理區(qū)間。原始數(shù)據(jù)作為金字塔的底層,分辨率最高,數(shù)據(jù)量最大,隨著金字塔層數(shù)的增加,影像分辨率降低,數(shù)據(jù)量減少。
圖2:金字塔示意圖
表1:圖像文件頭IFH 格式
表2:圖像文件目錄IFD 格式
表3:圖像數(shù)據(jù)區(qū)數(shù)據(jù)格式
表4:實驗測試結(jié)果
數(shù)據(jù)是信息的載體,數(shù)據(jù)壓縮是信息量基本不變的情況下,降低數(shù)據(jù)量的核心技術(shù)。而數(shù)據(jù)無損壓縮技術(shù)通過壓縮數(shù)據(jù)存儲占據(jù)的空間,實現(xiàn)便于傳輸、處理及節(jié)省存儲空間的目的,節(jié)省數(shù)據(jù)存儲空間并提升信息的傳遞效率,同時保證了原始數(shù)據(jù)的完整性[12‐13]。
無損數(shù)據(jù)壓縮算法按照壓縮模型主要分為兩類:基于統(tǒng)計壓縮算法和基于字典壓縮算法?;诮y(tǒng)計壓縮算法主要包括:游程長度編碼、哈夫曼編碼、算術(shù)編碼;基于字典的壓縮算法主要包括:LZ77 算法、LZ78 算法、LZW 算法和LZSS 算法。就當(dāng)前的技術(shù)而言,使用無損壓縮最大可以將數(shù)據(jù)文件的大小減少1/2‐3/4。目前使用最為廣泛的壓縮技術(shù)是LZW 和哈夫曼這兩大類壓縮算法。其中哈夫曼算法可以確保字符的二進制編碼情況已經(jīng)將數(shù)據(jù)空間壓縮到極致,任何修改都難以對其空間進行進一步壓縮。
Range 是HTTP/1.1 規(guī)范中新增的一個請求頭字段域。HTTP Range 請求允許服務(wù)器基于客戶端的請求只發(fā)送響應(yīng)包體的一部分給到客戶端,而客戶端自動將多個片段的包體組合成完整的體積更大的包體。這樣的范圍請求對于大型媒體、具有中斷和恢復(fù)下載進度的下載文件請求很有幫助。如圖3 所示。
圖3:HTTP Range 請求流程
本文面向云端存儲的海量遙感影像文件優(yōu)化技術(shù),存儲及讀取操作的流程如圖4 所示。通過優(yōu)化數(shù)據(jù)存儲格式,在遙感影像文件中預(yù)先生成相應(yīng)的多層金字塔模型,按照“文件頭‐IFD 區(qū)‐圖像數(shù)據(jù)區(qū)”的字節(jié)順序標(biāo)準(zhǔn)化,無損壓縮后整理為云端存儲格式,讀取時利用HTTP Range 請求云端遙感影像文件隨機數(shù)據(jù)。
圖4:面向云端存儲的遙感影像文件優(yōu)化流程圖
其中涉及的關(guān)鍵工作如下:
3.1.1 優(yōu)化GeoTIFF 結(jié)構(gòu)
本文優(yōu)化了GeoTIFF 影像文件結(jié)構(gòu),如圖5 所示。本文提前創(chuàng)建了金字塔模型,對同個影像創(chuàng)建了多個向下采樣的版本,由此匹配一個遙感影像下的不同縮放級別。以標(biāo)簽的方式存儲不同縮放級別下的影像數(shù)據(jù)在文件中的偏移地址,并在GeoTIFF 中IDF 區(qū)定義這些標(biāo)簽。
圖5:GeoTIFF 優(yōu)化后結(jié)構(gòu)圖
優(yōu)化后的GeoTIFF 讀取時,利用IDF 區(qū)中的標(biāo)簽信息僅需讀取目標(biāo)比例尺下的局部數(shù)據(jù),而非全部影像數(shù)據(jù),大大減少了獲取遙感影像數(shù)據(jù)的時間和IO。
3.1.2 遙感影像文件無損壓縮
本文在遙感影像文件存儲至云端前,首先采用了哈夫曼編碼對遙感影像文件進行無損壓縮:用二進制的方式來表示每一個符號,數(shù)據(jù)的長度表示為某些特殊符號出現(xiàn)的頻率次數(shù);創(chuàng)建哈夫曼樹將數(shù)據(jù)轉(zhuǎn)換為對應(yīng)編碼,完成遙感影像文件數(shù)據(jù)內(nèi)容的壓縮。
本文通過對遙感影像文件的壓縮,一方面減少網(wǎng)絡(luò)傳輸時的數(shù)據(jù)量,進而減少云端讀取耗時;另一方面降低遙感影像文件的數(shù)據(jù)量,節(jié)省云端存儲資源。
3.1.3 借助HTTP Range
本文借助了HTTP 的1.1 版本中“Range‐范圍請求”的功能,客戶端通過GET 方法請求云端數(shù)據(jù)接口時,可在請求頭中使用accept‐ranges 字段指定所需要數(shù)據(jù)的范圍,分塊讀取需要的數(shù)據(jù)內(nèi)容,提升網(wǎng)絡(luò)讀取性能。
為驗證本文提出的面向云端存儲的遙感影像文件讀取性能,本文面向不同衛(wèi)星,各自選取了10 景標(biāo)準(zhǔn)GeoTIFF,分別將原始影像、本文提出的面向云端遙感影像文件優(yōu)化后的遙感影像存儲在相同云資源上,組成3 組、每組各20 個對比文件的數(shù)據(jù)集合。
采用相同的文件讀取程序讀取影像區(qū)域數(shù)據(jù),并對比網(wǎng)絡(luò)讀取耗時和云端遙感影像文件大小,其每組實驗數(shù)據(jù)均值指標(biāo)如表4 所示。
通過實驗結(jié)果可以看到,本文提出的遙感影像文件優(yōu)化技術(shù)在讀取存儲在云端的遙感影像文件時,讀取性能有明顯的提升,實現(xiàn)了快讀讀取的目的。但,仍然存在一些問題,面向云端的遙感影像文件優(yōu)化后和標(biāo)準(zhǔn)GeoTIFF 文件在文件大小方面并沒有明顯的提升,有可能是因為內(nèi)建金字塔模型加大了文件大小,雖然后面經(jīng)過了壓縮,但最終結(jié)果和標(biāo)準(zhǔn)GeoTIFF 差別不大,未來還需研究如何在保障讀取性能的情況下,進一步節(jié)省云端存儲資源。