李翰洋
(蘭州市勘察測繪研究院,甘肅 蘭州 730000)
在遙感影像分割結果的綜合過程中,需要提取影像分割結果中各個地物對象的邊界,然后依據此邊界信息對分割的結果進行空間信息的轉化與合成,形成最終的分割圖。在該過程中,需要頻繁更新對象邊界。如果能夠將影像分割的結果以矢量數據的形式進行組織管理,然后在該矢量數據的基礎上對影像分割結果進行轉化與合成,無疑會對面向對象的遙感影像分類提供良好的數據支撐。鑒于此,本文針對遙感影像分割后的邊界數據,采用VC6.0開發平臺及Win7 操作系統,設計相應的數據結構和算法,構建了面向對象的遙感影像矢量編輯系統,并將該系列算法封裝成為組件,以API 的形式供其他遙感影像分類系統使用。
為了提高所設計的編輯系統的可移植性和可擴展性,本文在設計該編輯系統時,采用了面向對象以及組件的方式來進行實現。將該矢量編輯系統打包為動態鏈接庫(DLL),并提供相應的接口,可在其他應用系統中直接使用。
2)將主界面類設計為導出類(__declspec(dllexport)),以DLL 的形式導出。由于DLL 本身所具備的特性,本文在更新主界面類時不需要重新進行編譯,只需要更新動態鏈接庫即可。這種方法一致性好,便于維護。
在矢量編輯系統中,不僅要對點、線、面數據進行顯示,而且要對其進行選中、刪除等操作。
1)點類。在該矢量系統中,點存在兩種狀態:選中和未選中;存在一個判斷方法:在指定的限差內是否能被選中。主要代碼如下:

2)弧段類。在該矢量系統中,弧段存在兩種狀態:選中和未選中;存在兩個判斷方法:在指定的限差內是否能被選中以及在當前窗口范圍內是否可見(在提高顯示速率時需要該方法)。主要代碼如下:


3)多邊形類。在該矢量系統中,多邊形存在兩種狀態:選中和未選中;存在一個判斷方法:鼠標點擊的位置是否在多邊形內。主要代碼如下:

在矢量編輯系統的具體實現過程中,需要充分考慮到系統的效率、用戶操作的友好性等問題,本文針對這些問題給出了相應的解決方案。
遙感影像數據量一般較大,特別是分割之后,包含大量的點、線和面信息。在進行數據顯示時,必須采用一定的優化方法,以快速顯示矢量數據,減少矢量數據刷新時的屏幕閃爍,提高用戶交互操作時的響應速度,包括點、線、面的捕捉等。本文采用了三種技術來優化處理,以提高顯示的速率,方便用戶操作。下面依次對這三種技術進行說明。
1)對矢量數據進行分塊處理。由于矢量數據量較大,當鼠標在屏幕內移動時,如果計算鼠標和整幅矢量數據之間的關系,以判斷哪些點、線或面可以選中,效率將會非常低。為此,本文將整體數據分塊,分別統計各個塊中所包含的點、線、面信息。當鼠標在進行移動時,首先計算鼠標的位置,以獲得其所處的區塊,然后提取出該區塊中的點、線、面數據,與鼠標的位置進行判斷,以獲得它們之間的相對關系。如圖1 所示,將一幅遙感影像分成50 像素*50 像素的多個矩形塊。
排除標準:患者病例資料不完整;接受手術的結腸癌患者為急診患者;患者有腹部手術史;患者具有家族性多發性息肉;患者合并有腸梗阻;患者具有潰瘍性結腸炎;患者合并有其它惡性疾病;患者具有克羅恩病史;對本手術藥物過敏或者屬于過敏體質的患者。
在統計了各個區塊的點、線、面信息之后,以此數據為基礎來提高用戶操作時的效率。具體實現如下:

圖1 影像分塊示意圖
第一、獲取鼠標所在的位置,并判斷該位置屬于第多少個區塊;
第二、提取該區塊,并獲得該區塊中所包含的點、線、面信息;
第三、根據給定的閾值,判斷鼠標附近是否有節點可以捕捉,如果有,選擇距離最近的結點,給出結點捕捉標志;否則,判斷是否有弧段可以捕捉,如果有,選擇距離最近的弧段,給出弧段捕捉標志;如果點、線都無法捕捉,則捕捉相應的多邊形。該方法可以大大減少鼠標移動時所進行的捕捉判斷,減少用戶操作的響應時間,提高捕捉效率。
另一方面,通過將矢量數據進行分塊保存,可以提高顯示效率。通常情況下,在顯示矢量數據時,為了提高顯示效率,需要判斷哪些點、線、面元素是落在可見窗口之內的,通過只顯示這些可見元素,能有效提高顯示效率。在顯示矢量數據時,如果對所有的點、線、面元素均判斷其可見性,無疑將會效率低下。通過分塊統計的方法,在顯示矢量數據時,首先計算哪些區塊落在當前可見窗口之中,然后只繪制處于這些區塊當中的弧段,將會大大降低不必要的判斷過程,有效提高顯示效率。
2)只顯示落在當前可見窗口之中的像素。在進行矢量編輯的過程中,需要將柵格數據和矢量數據疊加顯示,便于用戶對比操作。然而,由于遙感影像數據量較大,在顯示柵格數據時,如果一直顯示整幅柵格圖像,必然會影像到整個系統的顯示效率。因此在顯示柵格數據時需要進行相應的處理,以提高顯示的速度。本文在具體實現時,計算只屬于可見窗口之中的像素,然后進行顯示。
3)采用雙緩沖機制進行顯示。在進行矢量數據的平移和縮放等操作時,不可避免的需要對矢量數據進行刷新。而通常情況下,矢量數據的數據量比較大,刷新一次需要耗費比較多的CPU 時鐘,從而產生閃爍現象,因此也會影響到顯示的效果。針對這個問題,本文采用了雙緩沖機制來實現矢量圖形的顯示。實現思路如下:首先創建一個和當前可見窗口同樣大小的畫布,在需要刷新窗口時,計算刷新之后新的狀態下的顯示畫面,然后將此畫面繪制到該畫布上,最后將該畫布整個貼在屏幕上,從而達到刷新窗口的目的。在使用該機制對窗口進行刷新的過程中,用戶看到的只是整體畫布的一次性更換,速度很快,從而減小了閃爍,提高了顯示的效率。
一個比較人性化的軟件系統應該能提供比較好的撤銷與重做功能,以便用戶能及時對操作錯誤的步驟進行更改,對于編輯系統更是如此。在該矢量編輯系統中,本文實現了撤銷與重做的功能。
矢量編輯系統不同于其他的軟件系統,該系統中的操作基本都是可逆的。例如分割一個多邊形,其可逆操作為合并分割后的兩個多邊形;移動一個節點,其可逆操作為將該節點平移回來。針對這一特性,本文采用了面向對象和多態的方法來實現撤銷與重做功能。其基本思想為:對于每一步操作,生成一個Undo 對象,同時計算該操作所對應的可逆操作的參數,將這些參數賦值給Undo 對象,并將該Undo 對象壓入到撤銷堆棧之中;同時生成一個Redo 對象,與該Undo 對象相反,壓入到重做堆棧之中。其中,Undo 對象和Redo 對象的行為采用多態的方式來實現。以節點移動為例,進行簡單說明。
1)在移動節點完成時,派生一個繼承于CUndoBase 的類CUndoMove,在該類的Undo()函數中添加對本次操作的逆處理,在逆處理完成之后向重做堆棧中添加與之相關聯的CRedoBase 對象,并設置與之相關聯的CRedoBase 對象為空。
2)派生一個繼承于CRedoBase 的類CRedo-Move,在該類的Redo()函數中添加對本次操作的重復處理,在重復處理完成之后向撤銷堆棧中添加與之相關聯的CUndoBase 對象,并設置與之相關聯的CUndoBase 對象為空。
3)生成一個CUndoMove 對象pUndo,生成一個CRedoMove 對象pRedo,設置pUndo 指向pRedo,設置pRedo 指向pUndo,并分別將這兩個對象壓入到撤銷和重做棧中。
4)在撤銷和重做的過程中,分別從撤銷和重做棧中取出棧首對象,調用相應的方法即可。
通過上述方法,可以一致地完成矢量編輯系統的撤銷與重做功能。該方法的優點是對于所有的操作,當進行撤銷或重做時只需要調用相同的方法即可:對于撤銷調用Undo()函數,對于重做調用Redo()函數,簡單方便;其缺點是對于每種類型的操作,都需要派生一個繼承CUndoBase 或CRedoBase 的類,并定制其行為,代碼實現比較復雜。
通過對遙感影像進行分割,其最終目的是服務于遙感影像分類。因此,提供一些針對于遙感影像分類的工具,有助于分割后的工作。
1)對遺漏區域的處理。對遙感影像進行分類之后一個很重要的工作是評價其分類的精度,為此,必須建立一個地物類型庫,以對比分類后的結果。地物類型庫通常是以手工勾繪的方式進行的,在建立的過程中,勾繪出比較典型的地物,賦予屬性,對于不感興趣或不清楚其類型的地塊,往往不對其進行處理,因此,地物類型庫中的地塊對象中通常會存在遺漏的區域。在評價分類精度時,根據實際需要可能會要求對遺漏的區域進行補繪,賦予其屬性,更新原有的地物類型庫數據,因此,如果能提供添加遺漏區域的工具,將方便用戶工作的進行。為此,本文在矢量編輯系統中添加了用戶手動勾繪遺漏區域的工具,并提供了三種方式以方便用戶的操作:完全隨意勾繪、節點捕捉勾繪和弧段捕捉勾繪。
2)分類樣本采集工具。在進行分類的過程中,需要獲得比較典型的地物樣本,以這些樣本的特征來指導分割后數據的分類。由于矢量數據已經獲得了典型地物的邊界,因此,如果能夠通過矢量數據來提取典型地物樣本,將比通過柵格數據來進行要方便得多。為此,本文在矢量編輯系統中提供了樣本采集的工具,并以特定的格式將采集的樣本進行保存,方便用戶的使用。
3)對象等級網絡的建立。在進行分類的過程中,根據不同的應用目的可能需要在不同的等級上對分割數據進行處理。為此,本文利用分割地塊的類別信息將地塊由小到大建立了一個對象等級網絡,即在較粗糙等級上的地塊對象是由多個較精細的地塊對象所組成的,而這些較精細的地塊對象則是由多個更精細的地塊對象所組成的。效果如圖2 所示。

圖2 不同等級地物分類示意圖
通過該矢量編輯系統,對原始的分割影像進行編輯之后結果如下圖所示,其中圖3 為原始分割結果,圖4 為編輯后結果。通過對比可以看出,該對象編輯系統能方便地更新對象的邊界,形成良好的分割結果,以用于遙感影像分類。

圖3 影像原始分割圖

圖4 分割影像編輯結果圖
本文設計了一個小型的對象編輯系統,該系統采用面向對象和組件的方式進行實現,可重用性強。在實現該系統的過程中,采用多種技術解決了大數據量柵格、矢量數據顯示及捕捉時效率低下的問題,并實現了撤銷與重做功能。另外,為了滿足分類過程中采集樣本、獲取數據、評價分類結果的需求,本文設計實現了一系列的輔助工具,包括樣本采集、分類結果比較、地物等級網絡建立等,操作簡單方便,效果良好。
一個完善的矢量對象編輯系統的編輯方式應該多樣化。本文所實現的編輯系統只實現了點、線、面元素的選擇、基元多邊形的合并與拆分、節點移動以及生成等級網絡等功能,這些功能還不能完全滿足對象編輯的需要。本矢量對象編輯系統有待進一步擴充完善。