內容提要:論文實現了一種基于Visual C++及GDI+技術的電子海圖與雷達圖像實時疊加的軟件設計。闡述了電子海圖和雷達圖像單獨顯示時的關鍵技術及操作流程,針對兩者的疊加顯示問題,提出了解決方案。該設計滿足了實時性的要求,做到雷達靜態目標與海圖中的相應目標相互吻合,雷達動態目標在海圖上實時、準確地定位顯示。
關鍵詞:電子海圖 雷達圖像 疊加顯示 GDI+
0 引言
電子海圖顯示與信息系統(Electronic Chart Display Information System——ECDIS)集導航技術、計算機技術、計算機圖形顯示技術及軟件技術于一體,在海圖信息的基礎上完成各種有關船舶航行安全的綜合顯示,已成為現代船舶導航系統的核心設備。而用于航行和避碰的雷達又是狹水道、沿岸及霧中等復雜條件下航行所不可缺少的設備。若單獨使用電子海圖或雷達,雖然在一定程度上滿足了船舶安全航行的需求,但它們都存在各自的缺陷(電子海圖無法顯示動態目標,雷達則不能識別周圍目標的屬性)。如果將電子海圖與雷達圖像疊加顯示,則可實現兩者的優勢互補,并彌補了它們單獨使用時存在的缺陷。
近年來,隨著信息技術和導航技術的不斷發展,海圖和雷達信息數字化之后,兩者間實現了數據傳輸,使電子海圖與雷達圖像數據信息的疊加顯示成為可能,任何一方的“圖像”可以被疊加到另一方的圖像上。在電子海圖上疊加顯示雷達圖像數據信息,可在原航行水域海圖信息的基礎上提供本船、本船周圍的靜態目標與動態目標三者之間的位置關系。使本船對周圍的態勢和會遇到的局面一目了然,便于盡快作出判斷,避開航行危險和障礙物,及時采取避碰措施,并在電子海圖上跟蹤避碰決策的可行性。
1 總體實現思路
本設計主要在Visual C++6.0環境下采用GDI+技術,實現以電子海圖為顯示底層,以雷達圖像為動態層的雷達視頻信息的實時疊加顯示。
電子海圖的顯示主要按照讀取海圖數據、轉換海圖數據及顯示海圖的順序完成。為了保證S—52標準要求的顯示速度及內容,顯示海圖時采用雙緩存機制、內存拷貝方式和GDI+技術,來提高海圖顯示的速度,使海圖在漫游時能快速、平滑地移動;而繪制雷達圖像則運用快速坐標變換滿足實時性的要求。電子海圖與雷達圖象的疊加必須準確定位雷達中心在海圖上的位置,并且隨著海圖顯示比例尺和雷達量程的變化,兩者都將作出相應的變化。
2 電子海圖的顯示
2.1 S—57標準的數據結構
符合S—57標準的電子海圖文件中的數據結構由一些記錄和字段組成,而這些記錄和字段都由現實模型轉換而來,它們主要包括:特征記錄、空間記錄、矢量記錄、地理特征記錄、指針字段等。在S—57文件中,DDR包含了S—57數據結構中各個字段的描述:DR則包含了實際的海圖數據,主要由特征記錄和矢量記錄組成。
2.2 海圖顯示的方法
由于S—57海圖數據文件將ISO/IEC8211:1994作為其數據封裝的標準,而這個標準并不適合顯示時使用,所以需要定義自己的數據結構,以滿足IMO S—52標準要求的顯示速度及內容。海圖的顯示主要由三部分來完成,流程圖如圖1:
(1)讀取海圖數據:讀取按照ISO/IEC8211:1994標準封裝的海圖數據文件,并保存為S—57數據結構。此處主要有數據集DSPM字段、向量記錄VRID、特征信息記錄FRID以及海圖信息記錄MAPINFO等。通過自定義多個結構體,先存儲讀取的基本海圖信息,如海圖比例尺、海圖左上角及有下角經緯度和海圖中心等,然后將海圖數據進行分類、排序并分別讀人到對應的點、線、面鏈表中,以供下一步使用。
(2)轉換海圖數據:將前一部分輸出的鏈表記錄轉換成可顯示的數據格式。分別對點、線、面進行操作,將點劃分成孤立點和水深點,建立鏈表保存點信息及其對應的索引值;對于線和面則首先讀取顯示屬性數據文件,保存它們的屬性值到定義的鏈表中,然后根據其特征信息FRID來讀取空間信息VRID。此外,還要確定面物標的邊界及顏色值,水深線作為線物標的一部分單獨存儲并設置水深線間對應面物標的顏色值,最后將海圖信息按照顯示級別進行排序。以上保存的鏈表數據作為本部分的輸出供顯示時使用。
(3)顯示海圖:將第二部分得到的鏈表數據繪制到屏幕上完成海圖的顯示。由于海圖數據中的坐標是實際地理坐標,不能直接在屏幕上顯示,所以在顯示海圖之前,必須進行坐標變換。該變換主要有三步:
實際地理坐標®墨卡托投影坐標®屏幕坐標。
另外,還設置了屏幕顯示區域,根據Sutherland_Hodgeman原理將多邊形裁剪成匹配屏幕顯示區域的大小,這樣,隨著顯示比例尺的變化,可動態的顯示用戶所需要的那部分海圖。
為了保證S—52標準要求的顯示速度及內容,在顯示海圖時采用了雙緩存機制及內存拷貝方式。首先在內存中開辟一塊與當前DC(pDC)大小一樣的內存DC(pMemoryDC),然后分別利用GDI+技術繪制各個圖層,最后再在OnDraw()中使用雙緩存機制,做一個屏幕拷貝,將內存設備上的內容一次性顯示在屏幕上,完成顯示工作。因為各圖層的繪圖操作是不可見的,所以避免了窗口重繪時的閃爍現象。而雙緩存機制及內存拷貝方式的使用,不僅提高了顯示速度,同時也使海圖在漫游時能平滑移動而不產生滯留的感覺。
繪制電子海圖時使用的GDI+,是一種應用程序編程接口(API),在GDI的基礎上發展而來,是對原有GDI在功能上的升級。兩者在編程應用上的本質區別是GDI+用一個無狀態的模型取代了GDI中把選中項目放到設備環境(DC)對象上的主要狀態模型,每個繪圖操作都是相互獨立的。利用它的這個特點,可將電子海圖上相同圖層,不同顏色的點、線、面物標同時繪制而成,從而提高繪圖的速度。另外,應用程序開發人員在輸出屏幕信息的時候無須考慮具體顯示設備的細節,只需引入Graphics類即可,真正實現了圖形硬件和應用程序的相互隔離,使開發人員編寫設備無關的應用程序變得非常容易。
3 雷達顯示
3.1 快速坐標變換
高分辨率雷達掃描變換的關鍵技術是將天線掃描時的極坐標轉換為顯示時的直角坐標。雷達信號處理的實時性同樣也要求高速、高效的地址變換。所以,在雷達顯示中,采取一種快速的坐標變換算法尤為重要。本文主要采用進位值法來實現快速坐標變換。
當雷達觸發到來時,鎖定一個天線方位角度q,然后距離r由零計數依次增加,物理意義上表明該方位由雷達天線中心逐步顯示到量程的邊緣。由于雷達回波信號的數據是徑向分布的,其對應的直角坐標可表示為式(1):
由于︱cos(q)︳≤1,︱sin(q)︳≤1,所以每執行一次加法,結果的變化量都不會超過1。考慮到屏幕坐標的值為整數,故將X、Y的值分別取整賦予屏幕坐標。
從以上分析不難看出,執行加法操作后真正用到的數據只有進位信息,而這個值對于線性單調變化的r和q每次都是個定值并且非0即1,所以在具體實現時,可事先建立一個坐標查詢表,表中對應位存放每次加法操作執行后的進位信息,以便計算坐標時調用。
3.2 雷達顯示
由于雷達實時更新數據,所以采用描點的方式繪制,以反映船舶周圍目標的運動態勢。首先,通過CDC::SetMapMode(MM_ISOTROPIC)使x、y軸的邏輯坐標相同,來保證繪制的雷達圖像是圓形,接著利用CDC::SetWindowExt()和CDC::SetViewportExt()分別設置窗口和視口的范圍,然后通過CDC::SetViewportOrg()設置視口原點,最后在量化的方位上調用坐標變換子程序完成雷達圖像的繪制。
其中,坐標變換子程序負責計算并存儲量化方位上各點的直角坐標值及該點對應的顏色值,而在計算坐標值的時候又調用了由快速坐標變換得到的坐標查詢表。
為了實時的繪制雷達圖像,在OnDraw()中設定一個時間間隔為2.5 s(雷達轉動一周時間約為2.5~3 s)的定時器,通過調用SetTimer(1,2500,NULL)來實現,并且添加WM_TIMER的消息響應函數OnTimer(),在響應函數中實現雷達圖像的實時繪制。
4 電子海圖與雷達圖像的實時疊加
要將雷達圖像實時疊加在電子海圖上,選擇合理、精度高的坐標變化方式,才能使靜態目標完全吻合,動態目標實時準確定位。在這里,電子海圖和雷達圖像的繪制都采用了Visual C++的GDI或GDI+函數,無論是畫圖時的邏輯坐標還是顯示時的設備坐標,均具有相同的單位,保證了繪圖時各點對應位置的一致性;而兩者分別使用的坐標變換則提高了坐標變換的精度及繪圖的速度。
雷達圖像疊加于電子海圖,首先應準確定位雷達中心在海圖上的位置,將雷達實時位置信息通過顯示海圖時的坐標變換(即實際地理坐標®墨卡托投影坐標®屏幕坐標),轉換為屏幕坐標,從而實現船舶雷達實時動態的顯示船舶航行時周圍的所有動態和靜態目標。
電子海圖采用矢量圖的方式加以顯示,可以實現無極縮放、局部放大、漫游等功能,而雷達則采用描點方式顯示,可根據用戶需要選擇不同量程,還能動態地標出目標的距離及方位。一方面,雷達圖像能隨著電子海圖顯示比例尺的變化而放大、縮?。涣硪环矫?,電子海圖也能跟著雷達量程的變化而作出相應的改變。
對于用戶關心的動態目標,可根據用戶的選擇來進行動態的平滑跟蹤。同一海區的目標還可進行多目標的疊加顯示,并通過不同的顏色來標識目標的狀態。目標的動態數據信息,不僅可以實時地在海圖上進行疊加顯示,而且還可以在視窗中進行文本的對照顯示,使用戶直觀地了解目標的航行信息。
圖2是電子海圖與雷達圖像疊加顯示的效果圖(由于實驗條件的限制,兩者顯示的是不同地區,但在適當的雷達量程和海圖比例尺下,對應點坐標是相同的,符合疊加顯示的要求)。
5 結束語
本系統在Visual C++6.0下利用GDI+技術實現了電子海圖與雷達圖像的實時疊加顯示,較好地解決了電子海圖、雷達圖像單獨顯示和疊加顯示的問題,達到了實時性的要求。與單一的電子海圖相比,兩者的疊加,不僅突出了電子海圖系統的信息顯示能力,而且提高了使用雷達的避碰能力。同時,使調度人員能夠方便地了解到作業船舶在海上的準確位置,及時、直觀地了解船舶動態,便于準確下達調度命令,減少了調度失誤,從而在一定程度上減少了由調度人員的失誤而引起的時間延誤和作業難度的增加。
參考文獻
1 周永余,陳永冰等.艦船電子海圖顯示與信息系統發展評述.船舶工程,2005.4.
2 許開宇.符合國際標準的電子海圖顯示和信息系統(ECDIS).船舶工程,1999.
3 石京東.雷達圖像和電子海圖系統的疊加應用.航海技術,2007.1.
4 畢紅葵,王紅等.光柵掃描雷達顯示系統關鍵技術問題解決方案.2002.5.
5 夏志忠,馬紅,王淑靜.船舶動態監測系統的實現.微計算機信息,1999.2.
6 [美]David J.Kruglinski.Inside Visual C++,4th Edition[M].清華大學出版社,1999.
作者:劉毅 索繼東 曹蘭蘭 來源:航海技術