張廣耀 王蕾
近年來,隨著3S技術的快速發展,遙感數據的應用突飛猛進。通常,遙感影像在應用之前需要進行正射處理,而處理后影像的數據量較大,不便后續應用,為此在應用前需按照特定的需要進行裁切。目前,現有的大型商業軟件像ArcGIS、Erdas等都提供有影像裁剪的功能。此外,國內的MAPGIS-RSP、EV-Manager等也都有所涉及。
盡管以上所提到的相關軟件都具有影像裁剪的功能,但是這些軟件不管是安裝還是使用,專業性都較強,對于那些不具備專業知識的普通用戶來說無疑是一大障礙,從而使得遙感影像的應用受到限制。基于此,本文利用ArcObject,在開源環境Eclipse下,編程實現了多種方式的遙感影像裁剪,以期能滿足廣大用戶的需求。
ArcObject是由美國環境系統研究所開發的一套可重用的二次開發組件集,是ArcGIS軟件的核心。使用AO可以直接搭建自己GIS的功能模塊,大大擴展ArcGIS功能。
利用ArcObject進行二次開發有兩種常見的模式:
在ArcCatalog和ArcMap應用程序中綁定有VBA編譯器,使用VBA可以方便、簡潔地定制個性化程序界面、個性化工具欄并能擴展部分地理功能,但其不足是獨立性差,功能較單一。
ArcObject的另一個開發模式就是應用COM技術。ArcObject為組件式開發提供了框架,利用目前流行的編程語言,開發者可以實現商業GIS軟件的所有功能。COM的出現使軟件的開發與組織達到了新的高度,它是一種強有力的集成技術,可以在運行程序時把各種分散的軟件模塊組織在一起,使應用程序在更高的程度上被定制,使軟件更靈活、更具動態性。圖1為COM的工作過程。

圖1 COM工作過程
考慮到現實需求,再加上Java語言的健壯性、安全性、分布式等一系列優良特性,本文采取在Java平臺下,結合ESRI提供的ArcObject.jar包,設計按矩形、多邊形、行政邊界、矢量文件、柵格文件等影像裁剪模塊。
按矩形裁剪,用戶只需在裁剪前按需要自定義好矩形四個頂點的坐標,然后點擊“裁剪”按鈕即可實現。
多邊形裁剪,一方面用戶可以根據需要在影像上畫出多邊形,然后以該多邊形為模板進行裁剪;另一方面用戶還可以把已有的ROI或AOI(感興趣區域)文件作為模板,與待裁剪影像疊加,從而實現裁剪。
按行政邊界和按已有矢量文件裁剪本質上是一樣的,按矢量文件裁剪是用戶在裁剪前輸入已有矢量文件,服務器從該矢量文件上獲取一特性,然后以該特性為模板進行裁剪。而按行政邊界裁剪只是已有矢量文件為某一(或某幾)個行政區域罷了,所以也可以認為行政邊界裁剪是已有矢量文件裁剪的特殊情況。不過,需要注意的是,這種裁剪方式要求矢量文件和影像文件的投影類型必須一致。
此外,用戶還可以拿已有的柵格文件做模板,而去裁剪另外的柵格影像。
在Java平臺下AO包里提供了兩個類:Clip類和ExtractByRectangle類,利用它們均可實現影像的矩形裁剪。其中Clip類位于數據管理工具子包內,是ESRI專門為柵格影像提供的按矩形進行裁剪的一個類,調用前需定義好它的三個屬性,即inRaster、rectangle、outRaster。ExtractByRectangle類位于空間分析工具子包內,它是通過提取待裁剪影像的像元實現影像的裁剪。其不足就是以像元的中心來判斷該像元是否在矩形范圍內,如果一個像元的中心在矩形范圍內,而其中一部分在矩形范圍外,那么它就認為該像元整個就位于矩形內,這樣裁剪后的影像子集就會不準確。同時,對于一個多波段影像來說,裁剪后默認的輸出格式為ESRI grid stack,該格式的命名有嚴格的限制,從而給用戶帶來不必要的麻煩。相反,Clip類在這些方面則表現出巨大的優勢,基于此,本文采用Clip類實現影像的矩形裁剪。
同樣,AO在空間分析工具包里還提供了ExtractByPolygon類,利用它,可以像ExtractByRectangle類那樣采取抽取像元的方法實現影像的多邊形裁剪。但是,該類同樣具有像ExtractByRectangle類那樣的不足,因此,本文不采用它,而是采用另外一個類ClipFilter來同時實現影像的多邊形、行政邊界以及按已有矢量文件裁剪,其不僅簡單并且效率也較高。
對于上文我們提到的Clip類,其作用遠不只是僅僅能實現矩形裁剪,它還可以根據已有柵格數據模板去裁剪其他影像數據。基于此,本文采用它來實現按已有柵格文件裁剪的功能。
綜上所述,本文在Java平臺下基于ArcObject來實現設計的影像裁剪模塊,其中影像裁剪的流程如圖2所示。

圖2 影像裁剪流程圖

根據以上方案,本文在開源環境Eclipse下采用Java語言編程實現了遙感影像的裁剪功能。為了驗證裁剪功能的可行性,利用現有的遙感影像數據以及相關的矢量數據進行了實驗,實驗數據包括以tiff格式存儲的中巴影像和美國陸地衛星的ETM影像。圖3展示的是對ETM影像進行矩形裁剪后的結果并與原數據對比。

圖3 ETM影像矩形裁剪后的結果并與原數據對比圖
實驗結果表明,本文設計并實現的遙感影像裁剪模塊切實可行且效率較高,基本滿足用戶的現實需求。
本文以ArcObject組件庫為基礎,根據現實需要,設計了遙感影像的裁剪模塊,然后利用Java編程實現了該模塊的功能,最后結合相關影像數據對相關功能進行了有效驗證。當然,如果把該功能發布成網絡服務的形式以供用戶調用,將會更進一步促進遙感影像的廣泛應用,同時也就要涉及到其他相關知識,所以還需進一步的研究。