付曉燕,岳彩榮,蔣之富
(1.西南林業大學,云南 昆明 650224;2.國家林業和草原局西南調查規劃院,云南 昆明 650031)
森林資源動態監測已經成為林業的重要工作,當前森林資源變化檢測主要依靠目視判讀對比前后兩期遙感影像,根據像素值對比發現森林資源疑似變化區域。但遙感影像內容豐富、覆蓋區域往往比較大,通過人眼識別、手工區劃變化區域,不僅工作量大、效率低,而且可能存在漏劃、錯劃的情況[1]。目前,業內還沒有非常有效的技術手段對遙感影像變化區域進行自動檢測、區劃。本文旨在通過研究多期遙感影像的變化特點,提出自動區劃遙感影像變化區域的算法、方法,并在林業最為常用的地理信息系統軟件ArcGIS上實現該算法,開發相應的插件和軟件工具,以快速、較為準確地通過兩期遙感影像對比自動獲得監測區的變化圖斑。
利用ArcGIS插件開發技術和ArcObjects SDK,在研究現有的遙感影像變化檢測算法的基礎上,提出一種快速進行遙感影像變化檢測和變化區域分割、提取算法,實現遙感影像變化檢測半自動區劃工具、遙感影像變化檢測自動區劃工具。
研究內容主要涉及到ArcGIS插件開發技術、遙感影像數據管理模塊開發、兩期遙感影像自動檢查和搜索算法、遙感影像變化檢測和變化區域分割提取算法、算法優化等內容。需要指出的是,本文所說的林地,是指由林業主管部門管理的、有植被覆蓋的土地。
在有限的時間和資源基礎上,完全從底層開發影像數據管理功能已不太現實,采用現有的、成熟的軟件平臺可以將重點放在遙感影像變化檢測算法的設計和改進上,忽略細枝末節。基于這個原因,作者采用目前業內最為成熟的ArcGIS軟件,作為影像數據加載、顯示、管理的基本平臺,在ArcGIS軟件上,采用插件開發技術、ArcObjects SDK進行影像數據處理、變化檢測的定制開發。
目前現有的軟件平臺在進行變化檢測時,均需要人為確保前后兩期影像是否為同一個區域、坐標系是否一致、遙感影像范圍是否一致,影像檢測前往往需要裁剪、坐標系變換等工作,增加了人為工作量。為減輕人為工作量,筆者設計了影像區域檢測模塊,對影像的坐標范圍、坐標系統進行變化檢測,自動提取前后兩期影像的公共范圍。
影像變化檢測的關鍵在于變化檢測和變化區域提取算法研究和設計,現有的軟件平臺主要采用監督分類、無監督分類兩類算法,監督分類需要訓練樣本,人為干預地方很多,要實現自動變化檢測,這一方法基本可以排除。無監督分類大多基于統計理論,如主成分分析、NDVI指數、相似像素聚類等?,F有這些方法都基于嚴格的數學模型,從理論上說,能較好地提取變化區域,但在實際使用過程中,提取效果總是差強人意。筆者認為主要原因在于,這些算法往往是基于比較好的影像數據,設計算法的人也是基于規整的影像數據,沒有考慮實際使用過程中諸多因素,如前后兩期影像的一小部分存在陰影,兩期影像校正效果不理想,局部存在偏移,兩期影像范圍不一致等等,導致產生很多偏差。故有必要對現有算法進行改進,在算法的檢測過程中,對出現的偏差進行自動排除。
對于大范圍的高分辨率遙感影像,數據量往往很大,難以一次性對整幅遙感影像進行分割,需要設計一種優化算法。本文采用的是異步分割算法,該算法在邏輯上將整幅遙感影像劃分成多個格網,分割過程是按格網進行異步分割。格網只是邏輯劃分,無需進行柵格影像切割,原因是ArcObjects開發的程序可同時對一幅遙感影像加載多次,這與多個ArcGIS進程可以加載同一幅影像是相類似的。當要分割一個格網區域時,只需要指定格網的左下角坐標、行數、列數和需要分割的影像文件位置,就可以指定一個分割范圍,然后工具啟動多個線程對格網進行異步分割。
計算機處理數據時有單線程和多線程之分,單線程就是進程內用1個主要線程進行數據處理,多線程是啟用多個線程同時進行數據處理。為提升分割效率,遙感影像分割肯定需要啟用多線程技術?,F在的計算機處理器普遍在4核心以上,可以充分利用多核心的優勢,進行異步分割。本文設計了一種算法,該算法在運行過程中,將會自動獲取計算機物理核心數和可用內存,根據物理核心數,分配多個線程同時進行分割。對于4核心處理器計算機,工具最多啟動2個線程;對于8核心計算機,工具最多啟動6個分割線程;對于16核心以上處理器,工具最多啟動14個分割線程。也就是說,對于一臺16核心處理器的計算機,如果內存充足,工具將會啟動14個分割線程同時進行分割。假設每個分割線程分割的格網大小是3500×3500個像素,高分遙感影像分辨率為2m,則每個分割線程分割的面積是7000×7000m,即49.0 km2,14個線程可以同時分割686.0 km2的區域,因為需要分割的遙感影像往往不是方形的,因此實際分割的有效區域可能會更小一些。通過多線程進行優化,可以極大地提升運行效率。
在Visual Studio 2010開發工具上,應用C#和.Net 4.0,結合ArcGIS插件開發技術,筆者將以上算法編寫代碼,封裝成插件和對應的軟件工具,以工具欄的形式鑲嵌在ArcMap主界面上,既能方便林業工作人員調用,也能充分利用現有ArcGIS工具,提升工作效率。
在用分割算法分割前,需要檢查影像坐標系統、空間位置等是否正確。工具設計了影像質量檢測和搜索算法,能根據遙感影像拍攝時間、遙感影像像素值,自動確定子區域劃分方法。
根據搜索到的前后兩期遙感影像,在邏輯上劃分成3500×3500個像素大小的格網,在格網內,再劃分成2×2個像素的細小格網,按4個像素大小的區域進行像素比較,對細小格網內像素值很接近(如像素R、G、B值在15%以內)的,由該區域開始往外聚類,聚類后面積大于一定值(如100m2)的區域,標記本期疑似區域。對搜索到的前期遙感影像,按相同方法處理,由該區域進行聚類,標記為前期疑似區域。用本期疑似區域按空間位置選中前期疑似區域的結果,將選中區域調用ArcObjects的圖層相減后,進行多部件打散,刪除面積小于200m2的面,得到疑似前期林地轉變成本期非林地圖斑結果;分割結果中的前期疑似非林地圖斑減本期疑似林地圖斑,得到前期非林地轉化成本期有林地圖斑結果。
自動分割完成后,分割邊界沿像素值邊界前進,可能存在分割邊界點過密、鋸齒狀明顯的問題,實際應用仍然存在諸多不便,需要對圖斑邊界進行抽稀、修正、去除面積過小的內環(如內環面積小于50m2),按林業經營界線(如林班界)進行進一步分割,達到符合林業區劃標準的要求。
大范圍的高分遙感影像,數據量極大,自動勾繪運行速度可能較慢,需要進一步優化,優化主要從兩方面進行。
(1)盡量縮小自動分割范圍。例如,在只需要監測林地減少的情況,結合林業經營資料,剔除非林地區域,僅僅在林地范圍內進行自動勾繪;在只需要監測林地增加的情況,結合林業經營資料,剔除有林地區域;既要監測林地增加、也要監測林地減少的情況,盡量利用監測區域的行政邊界,減少區劃范圍。
(2)充分利用現有計算機的多核心、大內存等優勢,提高運算性能?,F有的計算機一般都有四核甚至六核心以上處理,在變化區域勾繪時,充分利用多核心優勢,同時異步分割多個3500×3500個像素格網,如在六核處理器的計算機上,通過多線程技術,同時對4個3500×3500個像素格網進行自動分割,對于具有16核心處理器的工作站,同時對14個3500×3500個像素的格網進行自動分割。
研究過程中發現,格網的形狀最好為正方形,正方形方便程序處理和優化。格網范圍也不能過大,格網大小不能超過3500×3500個像素但最好大于1000×1000個像,原因是ArcObjects開發的程序是基于32位進程的,32位進程占用的總內存不能超過4GB,在分割過程中,需要存儲每個像素點的RGB分量、主要波段等信息,如果范圍過大,會導致內存溢出。對于1m分辨率的高分遙感影像,3500×3500個像素相當于3500×3500m的區域,即12.25 km2;對于2m分辨率的高分遙感影像,3500×3500個像素相當于7000×7000米的區域,即49 km2,每個子區域的實際范圍并不小。需要說明的是,因為要分割的遙感影像往往不是方形的,還存在一些背景區域,在邊界上需要分割的有效影像會更小一些。格網如果劃分過小,會導致格網數量增加,降低數據處理效率,增加后期融合的工作量。對于2m的高分遙感影像,云南省的一個縣,格網劃分個數一般在40~80個之間。對于16核心的計算機來說,可最多啟用14個分割線程,每個線程分割時間大致在3~10分鐘,每個計算機物理核心平均運行3到6輪可以分割一個縣,運行時間視政區面積,大致在15~70分鐘可以完成一個縣的自動分割。
因為在分割過程中,劃分了多個格網,因此異步分割后還需要對分割結果進行融合、合并操作,將按格網的分割結果融合成一個整體。融合操作主要采用ArcObjects的Merge算法進行合并,合并后調用ArcObjects的GP工具的融合算法,按類別進行融合和消除,并刪除面積小于200m2的細碎圖斑。在工具運行過程中,可以調用ArcGIS的工具箱來進行一些常見的空間分析運算,這也是插件開發最大的優點。
為便于使用,作者將算法封裝成多個模塊,利用C#4.0程序設計語言和Visual Studio 2010開發軟件,編寫成2個ArcGIS插件“遙感影像變化監測半自動區劃工具”和“遙感影像變化監測自動區劃工具”,輔助判讀工具可以內嵌在ArcMap 10.2以上的版本中,方便與ArcGIS的其他工具協同操作,封裝后的工具欄運行效果見圖1,上面的工具為半自動區劃工具,下面的工具為自動分割工具,因工具欄過短,無法顯示所有的文字。

圖1 工具欄運行效果Figure 1 Segmentation toolbar running effects
半自動區劃原理類似于Photoshop中的魔法棒,仍然需要借助人力查找到某個變化區域,在變化區域點一下鼠標,或者繪制一條線段,工具利用分割算法自動分割該變化區域,因為需要人力找到變化區域,因此稱為半自動區劃工具。通過在屏幕上單擊某個區域,工具自動將該區域相鄰的像素進行聚類和勾繪,勾繪方法和效果如圖2所示。在圖2的左圖,找到變化區域后,手工點一個點或者繪制一條線段,工具將會自動分割并將結果形成面。勾繪結果自動平滑后,效果不亞于手工勾繪。繪制過程中,如果存在已有圖斑,工具還能自動扣除已經有的圖斑,如圖2右下角的一小塊圖斑,工具可以自動扣除,省去了手工捕捉的繁瑣工作過程。

圖2 半自動區劃工具運行效果Figure 2 Semi-automatic segmentation running effects
因自動分割工具并不需要手工勾繪圖斑邊界,因此自動分割工具欄按鈕要比輔助判讀工具欄界面簡潔,自動分割工具欄只有6個按鈕(如圖1下半部分工具欄)。該工具欄最重要的按鈕是最右邊的遙感影像自動分割按鈕,點擊該按鈕后,自動分割運行界面如圖3所示。自動分割時需要錄入本期、前期遙感影像,通過圖3界面左側的功能區進行數據錄入,通過圖3右側的進程監控區域進程分割進程監控。

圖3 自動分割工具運行效果Figure 3 Automatic segmentation running window
自動分割運行效果如圖4所示,圖4為云南省昆明市高分1號遙感影像,遙感影像分辨率為2 m,圖4中左圖為本期變化后的影像,圖4右圖為前期未發生變化的影像,黃色邊界為自動分割獲取的變化區域。自動區劃能獲取到變化區域,但是在邊界線方面仍然不是很精細,存在人工進一步調整的必要。

圖4 自動分割運行效果Figure 4 Automatic segmentation running results
本文設計的方法,優點是采用多線程技術,提取速度較快,特別是對變化較為明顯的區域,效果較好。自動和半自動勾繪的邊界非常接近專業人員的勾繪(如圖2所示)。分割算法不僅適用于高分辨率遙感影像,也適應于無人機航拍的高清影像。算法為筆者自行編寫,可以隨時根據業務需要進行定制和更改,可以根據衛星影像情況進行優化。但是改進現有算法對計算機技術和算法要求很高,需要做很多測試,筆者在實現過程中也發現一些不足的地方,亟待解決,主要體現在以下3個方面:
(1)細長型的地物識別,可能會存在間斷的問題(如圖5所示)。如在林區開挖的小路,因路面寬度較小,受樹冠陰影影響較大,可能會存在間斷的問題,如何對其改進也是技術上的一大難點。

圖5 難以連續分割的狹長小路Figure 5 Narrow path that is difficult to be divided
(2)遙感影像質量較差時(如存在云、霧覆蓋)難以自動區劃,需人工輔助區劃。云霧覆蓋導致的誤判,需要借助深度學習才能有所緩解,下一步研究往深度學習方向拓展。
(3)兩期影像配準時要比較準確,不能出現同一位置前后兩期影像偏差較大的情況。雖然在研究過程中對編寫的算法進行了一定的偏移容差限制,但同一地物前后兩期遙感影像配準偏差太大時,容易導致誤判。