陜唐劍 鐘宏偉 李林輝 魏景琦 國露方



摘 要:隨著傳感器技術發展和大容量存儲設備價格的下降,遙感影像數據量飛速增長并達到海量存儲的程度,傳統的單機集中式存儲和檢索技術已經不能滿足數據高效存儲和快速訪問的要求。本文在傳統的影像金字塔的構建方法上,采用基于內存計算的計算引擎Spark來構建遙感影像金字塔并給出了算法的構建過程,實現了基于Spark的遙感影像金字塔的并行構建。實驗表明,相對于傳統的遙感影像金字塔構建,性能和計算效率都有較大提高。
關鍵詞:遙感影像;金字塔;Spark
文章編號:2095-2163(2019)04-0226-04 中圖分類號:TP751 文獻標志碼:A
0 引 言
隨著信息獲取技術和遙感探測手段的發展,遙感影像數據日益多元化;數據量呈指數級增長,形成GB級、TB級數據的大規模集成態勢[1-2]。海量的遙感影像數據為資源調查、環境監測提供了豐富的資料,但也需看到,由于數據量不斷增大,傳統的單機集中式存儲和檢索技術已經難于滿足數據高效存儲的要求。越來越多的基于遙感數據的應用不僅需要數據的高效存儲和管理,而且還需要將結果快速反饋顯示到終端上,這些都是目前遙感影像處理中的基礎研究問題[1]。
金字塔模型是實現海量遙感影像可視化的基礎[3]。如劉義等人[4]將傳統的MapReduce方法加以改進,構建了適合遙感影像金字塔模型的圖像存儲算法,較傳統單機構建金字塔方法表現出較高的時間效率和較好可擴展性;霍樹民[5]提出了一種基于MapReduce并行編程模型的影像金字塔并行構建技術,相比單機串行方式,遙感影像建塔速度有明顯的提高。上述研究都采用了金字塔模型存儲遙感數據,有效提高海量遙感數據的存取效率,但構建金字塔所用的時間仍然較長,而將其應用在實際研發設計中,數據的可視化響應較慢,遙感影像處理和顯示的效率也難以達到令人滿意的程度。因此,亟需對遙感影像數據的金字塔構建方式做出改進,使其性能得以提升,本次研究中即選用了目前較為流行的大數據處理技術。
同時,有研究表明,Spark是基于內存的計算框架,運用科學設計,使其對于多次迭代的數據處理,比Hadoop快很多倍。Spark的特點是可以把中間數據放在內存,迭代效率高,而遙感影像的金字塔構建過程,就需要多次迭代,并且還要依據本層的金字塔數據生成下一層的金字塔數據,但Spark本身卻并不具備對具有空間特點的遙感影像數據的處理能力。
綜上分析可知,本文在Spark現有框架基礎上,結合Spark和遙感影像金字塔構建過程的特點,研發提出基于Spark遙感影像金字塔并行構建模型,實現金字塔瓦片數據的分布式存儲,進而有效縮短了遙感影像數據金字塔的構建時間。對此擬做研究論述如下。
1 遙感影像數據金字塔存儲方法
遙感影像金字塔是地圖服務的基礎。地圖服務包含2方面的內容,分別是:格網和編碼的選擇,遙感數據的組織和管理。研究后可推得闡釋解析如下。
1.1 全球剖分網格
地圖服務的指定操作區域都是矩形,建立遙感影像金字塔和編碼這些矩形的塊。假設遙感影像的原始分辨率為r0,像素矩陣大小為w×h,原始遙感影像經過重采樣被分成了很多大小相等的圖像塊,在金字塔結構中,稱之為瓦片。瓦片的大小為d×d像素,瓦片矩陣的大小為tr×tc。tr可由公式(1)計算得出:
假設latitude和longitude分別代表某點的經度和緯度,則該點所在的level級的瓦片編碼的運算可寫作如下數學形式:
1.2 金字塔結構
拼接后的遙感圖像的大小超過300 MB,有時甚至超過10 GB或100 GB,金字塔結構是海量遙感影像可視化的基礎[6]。金字塔的最低層是分辨率最高的,也就是原始圖像,數據量最大;隨著層數的增加,其分辨率逐漸降低,數據量也按比例減少。每一層影像金字塔都有其分辨率,當在前端進行圖像的放大、縮小、漫游時,后臺需計算出執行該操作后所需的影像分辨率及在當前視圖范圍內會顯示的地理坐標范圍,再根據這個分辨率去和已經建好的影像金字塔分辨率匹配,選擇適合的分辨率的瓦片遙感數據,將其從后臺取出來顯示給用戶。采用金字塔模型存儲數據的優點是,當對數據進行顯示操作時,不需要讀取全部原始數,只需選擇合適分辨率的數據進行數據操作,這樣可以減少數據的I/O操作和網絡間的數據傳輸。
通常,影像金字塔的構建方法有2種。一種是本身已有的多種分辨率的數據源直接構建相應分辨率的金字塔;另一種是只有原始圖像,而沒有其它低分辨率的圖像,通過已有的遙感數據利用重采樣的方式進行逐層構建。本文中采用的是第二種方法。
從原始影像數據中抽取數據構建金字塔時,形成一個多分辨率層次。從金字塔的底層到頂層,分辨率越來越低,但是表示的范圍卻是一致的。而通過對低一層影像的重采樣建立了本層圖像,通過構建不同層的圖像,最終建立了同一范圍、但不同分辨率的一系列圖像層。其中,底層分辨率最高,上層逐漸減少,圖像金字塔如圖1所示。
在金字塔中將原遙感影像數據作為最底層數據,記為0層,采用等分方式來劃定分塊,每一個數據塊稱為瓦片。在金字塔中,一個瓦片可由坐標(level,row,col)提供唯一標識。其中,level標識瓦片所在影像金字塔的層數,row標識瓦片所在的行,col標識瓦片所在的列。通過前文設定,可以對瓦片數據進行編碼。分層、分塊后所得的瓦片編碼如圖2所示。
對一幅2n×2n的遙感影像進行金字塔內瓦片數據構建的過程是從原始影像數據開始,按照倍率是4進行逐級采樣,接著將得到的遙感數據設定為2m×2m后,再進行倍率是4的逐級采樣,由此得到的遙感影像的層數記為L,則L的數學公式可表示為:
采用上面的方法進行分層后,可以計算求出瓦片的數量T為:
在此基礎上,可以推得計算瓦片數據的存儲空間比單獨存儲原圖像所超出的百分比的數學公式如下所示:
分析后可知,通過金字塔的構建后,數據存儲所用的空間會比單獨存儲原數據多出三分之一,在大數據時代,大容量存儲設備的價格較為低廉,因此對于應用而言,產生的影響可以忽略。對于瓦片數據的大小,沒有固定的劃分標準,在理論上可以按任意大小劃分,但在技術應用層面上存在一些困難,如網絡傳輸、金字塔索引的構建、I/O的效率。如果瓦片數據尺寸太大,導致瀏覽遙感影像數據時會有多余的數據加載到內存;如果瓦片數據尺寸太小,瓦片的大小多會根據具體情況和多次實驗來求得,從瓦片求取以及容易建立索引的角度出發,通常瓦片遵循如下規則:瓦片數據的大小是一樣大小的,瓦片按一定順序存儲。瓦片數據的大小在SDE中為128×128像素。在Oracle的GeoRaster中,瓦片數據的大小為256×256像素[7-8],通過實驗,本文中設置瓦片的大小為256×256像素。
2 基于Spark的遙感影像金字塔瓦片數據的并行構建
使用Spark進行遙感影像的構建是基于傳統金字塔構建的模型,并在Spark中利用算法將原始圖像通過重采樣,逐層生成瓦片數據,具體就是由下層數據生成上層數據,運算產生的中間結果存于內存,最終結果存入到HDFS中。每層構建瓦片數據設定成一個獨立的任務,通過Spark在集群中實現構建。根據Spark的特點,研究推得構建生成瓦片數據的算法詳述如下。
(1)讀入遙感影像原數據,生成Level0層的瓦片數據。在研究中,將根據遙感影像的坐標范圍和全球格網劃分方法,確定影像的范圍,再根據范圍使用公式(8)即可確定此遙感數據總共分為多少層。原始數據的分辨率不同,遙感數據的分層數也會不同。分辨率高的遙感數據所分的層數要高于分辨率低的遙感數據所分層數。
(2)對每層遙感數據進行瓦片化的處理。通過對低層數據的重采樣,采用倍率為2的采樣得到瓦片數據,由上層遙感數據的坐標可計算求出每個瓦片數據的坐標,此過程使用Spark實現。傳統的大數據處理通常采用MapReduce進行處理,Spark處理相比MapReduce處理的優勢就在于瓦片數據的生成是通過rasterRdd計算得到的,在計算過程中得到的中間數據可以被緩存到內存中,且比傳統的構建時間要短,這是因為操作在內存中,從內存中就可以直接讀取中間數據,而不需要再從磁盤中讀取,這樣做可以減少從磁盤讀取數據的次數,縮短了影像計算處理的時間,提高了瓦片數據的構建速度,提高了效率。
(3)瓦片數據的屬性確定。通過Spark計算得到的瓦片數據最終存儲到HDFS的各個節點中,每個瓦片數據都有各自的屬性,重點包括每個瓦片數據的坐標信息、瓦片數據所存的具體位置、瓦片數據的偏移量。為了做到快速檢索,通常對同一層的瓦片數據建立索引,在本研究中則將這些特征存入Hbase中。
(4)瓦片數據可視化。通過前述步驟完成了瓦片數據的構建,但要進行可視化時,可以通過需要顯示的影像范圍確定需提取的是哪一層數據,再根據不同層的編碼值對瓦片來執行分布式計算,通過 master 節點將具體的request分發到有相應資源數據的計算節點上,計算節點通過索引參數較快地定位原數據,進而將需要的數據返回給用戶。
由于Spark的特點,在對遙感數據進行瓦片數據的構建過程中,中間生成的影像數據,將會存入內存中,進而生成高層瓦片,中間處理過程中產生的無用數據則無需存入HDFS,減少了I/O操作,提升了構建效率,與傳統的基于MapReduce模式的構建方式相比,有較大優勢。
3 實驗結果及分析
實驗環境配置為:Master,選用IBM System x3850 X5(Xeon E7-4807 6核1.87 GHz,16 GB內存,500 GB硬盤)。Slave,選用4臺曙光I450-G10(Xeon E5-2407四核2.2 GHz,8 GB內存,HDFS總容量3.34 GB)。通過Xen虛擬化為16個節點。采用Tenda TEG1 024 G 千兆以太網交換機連接。操作系統,選用Red Hat Enterprise Linux 6.2(內核版本2.6.32),Hadoop版本選用2.5。
將金字塔構建算法部署到面向Spark計算框架和面向 Hadoop MapReduce 計算框架下的分布式實驗環境中,實驗中的數據源和參數保持不變,同時保證計算節點的資源一致,實驗的數據量大小為1 GB、10 GB,實驗的結果如圖3所示。
通過實驗結果表明,在數據量不大的情況下,Spark和傳統MapReduce的構建金字塔數據所用時間相差不大,但隨著數據量的增大,Spark構建金字塔數據的優勢較為明顯,所用時間較少,因此使用Spark框架進行海量遙感影像數據的金字塔構建在時間上具有更好的效率。
4 結束語
由于傳統的單機集中式存儲和檢索技術已經不能滿足數據高效存儲和快速訪問的要求,本文采用基于內存計算的計算引擎Spark來構建遙感影像金字塔并給出了算法的構建過程,實現了基于Spark的遙感影像金字塔的并行構建。性能和計算效率都有較大提高。
參考文獻
[1]李德仁,張良培,夏桂松. 遙感大數據自動分析與數據挖掘[J]. 測繪學報,2014,43(12):1211-1216.
[2] 呂雪峰,程承旗,龔健雅,等. 海量遙感數據存儲管理技術綜述[J]. 中國科學:技術科學,2011,41(12):1561-1573.
[3] 鄧雪清. 柵格型空間數據服務體系結構與算法研究[J]. 測繪學報,2003,32(4):362.
[4] 劉義, 陳犖, 景寧,等. 利用MapReduce進行批量遙感影像瓦片金字塔構建[J]. 武漢大學學報(信息科學版), 2013, 38(3):278-282.
[5] 霍樹民. 基于Hadoop的海量影像數據管理關鍵技術研究[D]. 長沙:國防科學技術大學, 2010.
[6] CHEN Shizhi, TIAN Yingli. Pyramid of spatial relations for scene-level land use classification[J]. IEEE Transactions on Geoscience & Remote Sensing, 2015,53(4):1947-1957.
[7] LV Xuefeng, CHENG Chengqi, GONG Jianya, et al. Review of data storage and management technologies for massive remote sensing data[J]. Science China Technological Sciences, 2011,54(12):3220-3232.
[8] LV Zhenhua, HU Yingjie, ZHONG Haidong, et al. Parallel K-means clustering of remote sensing images based on MapReduce[M]//WANG F L, GONG Z, LUO X, et al. Web information systems and mining. WISM 2010. Lecture Notes in Computer Science. Berlin/Heidelberg:Springer, 2010,6318:162-170.