白雪芹,李遠華,王 瑞,葉夢瑩,冶亞瓊,甘海伶
(吉林大學地球探測科學與技術學院,吉林 長春 130026)
隨著人工智能的發展,遙感+AI 技術成為發展趨勢,但是由于受混合像元、地表條件復雜、反演模型準確性、分類樣本誤差和分類方法限制,簡單地物的像元分類精度約為75%[1-4]。因此,在土地調查(例如全國第三次土地調查)、自然資源普查、地質災害普查、生態環境監測和礦山遙感監測等對數據精確度要求較高的應用領域或項目,仍然要求采用傳統人機交互遙感解譯方法[5-6]。然而,人機交互遙感解譯過程復雜,后期的“精確歸類、拓撲造區、填充屬性”等工作非常繁瑣,而且地類越多越復雜,工作越困難。所以,快速賦予各圖斑正確屬性一直是制約解譯效率與成果快速應用的關鍵因素。
針對以上問題,有學者開展了相關的研究。主要有如下幾個思路:簡單的方法是將必填屬性、高頻屬性制成圖層模板,在解譯或編圖過程中找到圖斑對應模板,從而實現屬性的同步賦值[7];此外,對于遙感解譯地類屬性的成果數據,有學者采用編程方式實現對圖元坐標、面積等幾何信息的獲取。同時,采用空間分析和位置判斷技術實現空間編碼、地類編碼、所屬行政區等信息的編程式賦值[8];還有一類方法,就是在多個圖層空間分析后,獲取對應屬性值,主要通過空間判斷、相交等手段獲取對應值,并賦值到新圖層中[9];遙感解譯的地類屬性賦值算法較少,目前多以批量選擇賦值、高頻屬性模板同步等方法為主。此外,自動賦值主要解決遙感解譯成果分類屬性填寫完畢后的常規幾何參數和空間對應屬性獲取問題。總體而言,遙感解譯數據地類屬性自動賦值智能化水平較低,屬性賦值效率低,相關研究還需進一步深化[10]。
本文在吉林大學大學生創新訓練項目“依托空間拓撲與邏輯關聯的遙感解譯方法及其智能算法研究”的支持下,在其對地物間拓撲和依賴關系的研究基礎上,構建了解譯與構面優先權模型,將遙感解譯矢量數據的圖形參數與屬性信息通過數據庫查詢的方式與之進行匹配,得到面圖形構建和屬性賦值的邏輯排序,然后在此基礎上“逐層式”地進行圖形構建和屬性賦值,并通過空間關系判斷對異常圖斑進行修正。最后以C#+ArcEngine 與OLEDB 數據庫融合的技術開發相應的原型程序,實現了圖斑屬性的自動賦值,應用效果良好。
本文通過對解譯對象獨立性,空間關系,優先權等特征的解析,采用“循環式、逐層式”的方法對地物圖斑進行屬性賦值,主要依據如下:
首先是解譯對象在空間上有著相對的獨立性和依存關系,可以通過這種關系設計靈活的解譯方法與“逐層式”的賦值技術。例如,水體在遙感影像中較易識別,其中,湖泊、水庫等相對其他水體來說邊界較為集中,因此,解譯時湖泊解譯準確度高,解譯成本也較低。而且其他地類在空間上對它有一種依存度(大多與它相鄰),然后就是獨立河流(水渠)或與湖泊相連的河流可作為獨立性較高的解譯對象。其次,居民地相對規則、易識別,獨立解譯成本小,因此就可以大致得到“湖泊→河流→居民地→交通用地→…”這樣的解譯順序。如果按照這樣的順序迭代組合生成多邊形,則屬性賦值成本一般是最小的。這種“線型識別”方法,可以將獨立性(還有優先權等)信息在解譯時快速地連接到解譯線參數或屬性中,從而為后續自動處理奠定數據基礎。
要想實現自動化處理,程序控制是必不可少的,然而針對專業圖形的編程極為復雜,如果借助專業GIS 圖形處理方法,就可以大大地提高效率。因此,采用ArcEngine讀取空間數據的方法,利用數據庫查詢數據層級與解譯類別之間的對應關系,然后通過C# 的循環方法調用ArcEngine 屬性賦值函數(set_Value())進行循環賦值,這為自動賦值奠定了技術基礎。
盡管循環賦值可以實現屬性的自動填充,但是它并不能保證填充屬性一定正確,因為要素間存在嵌套問題或者線型使用錯誤,所以,需要找到方法判斷填充屬性的正確性。解決的一個思路是不同地類在空間上的包含、相鄰等方面有著特殊的關系,因此可以通過空間關系判斷所填屬性是否正確。例如,如圖1 所示,圖斑1 和圖斑2之間,圖斑3 和圖斑4、5、6 之間均屬于包含關系,內外層圖斑應對應不同的地物類型,而如果圖斑2 與圖斑1 屬性相同,圖斑4、5、6 與圖斑3 屬性相同,則其分類錯誤,需要進行修正。圖斑3 與圖斑7 屬于鄰接關系,也應對應不同的地物類型,而如果其線型相同則會被賦予同一屬性,也需進行修正。

圖1 不同地類間的空間關系圖解
本文采用C#+ArcEngine 與OLEDB 數據庫融合的二次開發技術實現圖斑屬性的自動賦值,其方法流程如圖2 所示。

圖2 技術流程
首先按要求和標準將解譯成果數據轉為shp 格式;其次,利用數據查詢與組合方法將線要素根據線參數或屬性進行組合分類,并與數據庫中的優先權模型及相關參數進行匹配,對地物類型進行排序,即為后期圖形構建和屬性賦值順序。
然后根據構圖順序逐步提取不同類別的矢量成果數據依次進行屬性賦值。第1 次處理時,需要先根據線屬性將第1 類別的數據從所有的線要素中分離出,然后對其拓撲造區(線轉面),進而統一進行賦值,同時對“小島”類圖斑單獨進行標記。第i 次則提取第1 類至第i 類線要素進行構面,第1 類至第i-1 類圖斑通過與第i-1 次的分類結果屬性連接的方式進行賦值,剩余第i 類圖斑統一進行賦值,最后通過空間判斷以及包含算法對特殊類型進行標記。
最后的賦值結果可在ArcMap 中打開屬性表查看,并從賦值所用時長和正確率方面對其進行檢驗。
1.2.1 參數匹配
根據地物的獨立性和空間依賴性進行排序并存入Access 中,以表(Table)的形式來表示,而其中的子參數(排序號,地物類型,優先權)以字段(Field)的形式來表示,目的是為自動上屬性提供前提條件。在進行屬性賦值前,首先獲取shp 數據的線型、類別,得到解譯對象類別總數N。然后通過數據庫查詢方式,得到構圖排序,存入數據集(DataSet)中作為下一步循環構面的動態變量。
1.2.2 屬性自動賦值技術
屬性自動賦值通過C#+ArcEngine 的方式構造循環算法實現。按照先前得到的排序結果利用for 循環依次提取矢量成果數據并進行屬性賦值。第一次將線屬性為優先權最高的地物類型(類別1)的矢量線數據提取出來,存入一個新的線集合里,對其構面后統一進行屬性賦值(“類型1”)。第i 次(i>=2)提取線屬性為優先權小于或等于i 的所有地物類型的矢量線數據,對其構成的圖斑進行屬性賦值時,需要先判斷在第i-1 次提取時得到的分類結果數據中是否存在與之對應的要素(即同一個圖斑),若存在則利用屬性賦值函數進行屬性傳遞,若不存在屬性則賦值為優先權為i 的地物類型(“類型i”)。
為了防止地物嵌套出現時優先權較低的內層嵌套地物的屬性被錯誤地賦值為外層地物類型,因此在對面要素進行屬性賦值時需判斷該面要素是否被包含在其他面要素中(即小島類圖斑),若是,則將其屬性賦值為“un known”,最后在屬性賦值全部完成后再對屬性為“unknown”的圖斑(優先權低于外層地物的內層嵌套地物)單獨修改其屬性。
在進行屬性賦值前需按照最佳的信息提取順序獲取矢量成果數據中的線要素進行構面,具體方法參考了蔣波濤的自動構面算法[11],在左轉算法的基礎上進行自動構面,構面完成后新建SHAPE 文件存儲其面要素(圖3)。

圖3 逐層構面算法實現
首先獲取要進行屬性賦值文件的全部線要素,然后根據線要素屬性將同一類別的地物進行組合,使用for 循環依次提取不同類別的線要素進行構面,循環次數為總類別數。第i 次循環時提取前i 類線要素,然后進行線網拆分,分別存儲線和節點,并將其構造成有向圖,記錄構成一個有效多邊形的路徑,最后根據路徑節點進行構面,與蔣波濤一書中不同的是,本文在構造有效多邊形集合和處理島和洞的方法上做了改進,當基于左轉算法生成的多邊形(已剔除無效和重復多邊形)之間出現多層嵌套時,對所有的外層多邊形(相對于最內層的多邊形)進行正確的差運算(保證內外層多邊形之間拓撲關系正確),對內層多邊形(相對于最外層多邊形)做標記后將其也加入了最終的有效多邊形集合中,進而加入新建的SHAPE文件中,接著進行下一次循環。
在新建SHAPE 文件時,新建字段周長,面積,屬性,為后續屬性傳遞賦值奠定基礎。將面要素加入新建的SHAPE 文件后,計算其周長,面積,并將計算結果填入對應的周長和面積字段,同時判斷該要素是否為內層多邊形,若是,則將屬性字段賦值為“unknown”,反之,提取第1 類線要素時,將其面要素的屬性字段賦值為該地物類型,其余類地物提取時,屬性字段暫不進行賦值。這樣第1 類地物在構面完成后,其屬性也全部賦值完成,為后期下一類地物屬性賦值做準備。
解決構面程序化處理的問題后,接下來則要解決逐個類型循環賦值的問題,采用三層for 循環實現,具體方法是:
循環開始時,首先獲取程序界面中第i 個圖層(包含前i 類地物)的面要素,然后判斷其是否為第1 到i-1 類地物,第1 到第i-1 類地物通過和前一次循環時已經完成屬性賦值的i-1 類圖斑一一對應連接進而屬性傳遞賦值,對應連接方法為判斷2 個圖斑的周長和面積是否相等。第i 類地物則另外統一賦值。因此,獲取面要素后需同時獲取其周長,面積和屬性,然后循環遍歷第i-1 個圖層的所有面要素,尋找和其周長,面積均相等的面要素,若存在,則利用ArcEngine 的屬性賦值函數set_Value()將其對應圖斑的屬性值賦給該面要素,若不存在,則判斷其屬性是否為空,若是,則賦值為第i 類地物類型(圖4)。

圖4 屬性循環賦值技術實現
長春市凈月潭地區具有地類豐富、地類遙感特征鮮明、野外驗證便捷的特點,是理想的實驗場所。因此,本文在凈月潭北部劃定一個面積約12.01 km2的試驗區。首先,獲取該地區1.2 m 分辨率的遙感影像,然后采用傳統方式開展遙感解譯和屬性賦值(圖5),在野外驗證修正的基礎上形成正確性驗證對照組;接著,借助MapGIS 將試驗區用本文提出的技術進行了屬性賦值,得到了另一組結果。最后,將本文的前述方法,集成為屬性自動賦值程序(圖6),將遙感解譯后的線文件轉換成SHAPE 格式的矢量文件(圖7),再使用該程序完成屬性的自動賦值,并將其賦值結果與對照組進行了對比,發現其與人工運算方法一致,并且效率明顯提高(圖8)。

圖5 實驗區域遙感圖像

圖6 屬性自動賦值程序

圖7 按要求解譯的線矢量及其屬性

圖8 程序賦值與對照組結果對比
通過分析可知,實驗區共有169 個地物圖斑,12 類地物,屬性自動賦值的方法花費了約26 min,最后的正確賦值圖斑有167 個。對3 種不同的屬性賦值方法進行對比分析發現:本文所用算法相對于其他方法來說,效率較高,但由于其在自動構面時線網拆分占用了較長時間,導致總時間也較長,后續需對算法進一步改進見表1。

表1 時間統計表
本文介紹了一種基于C#+ArcEngine 和OLEDB 數據庫讀取遙感解譯矢量成果數據,將其線參數和屬性與優先權數據進行匹配后進行圖形構面和屬性賦值的方法,在此基礎上設計與開發了屬性自動賦值程序,使賦值過程自動化水平有所提高,節省了大量的時間和精力。最終,取得如下認識:
(1)將遙感解譯矢量成果數據的線屬性和圖形參數與地物類型之間的拓撲和依賴關系結合到一起,并利用數據庫查詢的方式與優先權數據進行匹配,將匹配結果重新進行排序可以得到一個最優的解譯順序,為后續面要素的生成和屬性自動賦值奠定了空間和數據基礎。
(2)確定其邏輯排序后,根據線屬性“逐層式”提取線要素進行逐層構面,第1 類地物直接統一賦值即可,而對于第i 類地物,其構面時要提取第1 至第i 類所有線要素,其中第1 至i-1 類屬性通過周長和面積匹配,剩余屬性為空的則可初步判定為第i 類地物。第i 類中的“小島”類圖斑進行單獨標記,后續處理。通過這樣的方式可以完成所有圖斑屬性的快速判斷和賦值,通過增加面積、周長數據精度可以準確匹配已確定的地物類型。
(3)屬性賦值完成后,需要對其結果的合理性進行檢驗。解譯對象在空間上存在著包含、相鄰、邏輯接觸關系等,可以通過判斷2 種地物之間的空間關系進而判斷其屬性的合理性,屬于包含或相鄰關系的2 個圖斑的屬性一定不同,若相同則需要對其進行標定或修正。
本文的方法重點解決遙感解譯成果自動賦值問題,在處理技術方面,仍需進一步優化,效率有待提升。