摘 要: 介紹了合成孔徑雷達" title="合成孔徑雷達">合成孔徑雷達(SAR)圖像實時顯示" title="實時顯示">實時顯示技術。利用該技術并結合機載SAR實時成像處理器的硬件環(huán)境,實現(xiàn)了具有多種功能的滾動顯示軟件,軟件開發(fā)采用了基于DirectDraw的技術。目前該軟件已成功運行于中科院電子所研制的機載SAR實時成像處理器上。該項技術可方便地移植到其他類似的雷達圖像顯示系統(tǒng)中。
關鍵詞: DirectDraw 實時顯示 合成孔徑雷達圖像
合成孔徑雷達(SAR)是一種全天時、全天候的主動式微波遙感手段,它以飛機或衛(wèi)星為載體對地進行觀測。與光學成像不同,把SAR回波數(shù)據轉換為SAR圖像需要一系列復雜的信號處理步驟,通常只能采取記錄回波數(shù)據、事后處理得到圖像的方法。近年來隨著數(shù)字技術的迅速發(fā)展,以及嵌入式DSP芯片速度的不斷提高,機上實時成像處理技術已成為現(xiàn)實。
SAR實時成像處理器可以在載機平臺飛行的同時獲得所觀測區(qū)域的SAR圖像,這對于實時偵察具有重要意義。圖像實時滾動顯示是SAR實時成像處理器的一個重要功能,它用來直觀地把處理器生成的圖像按載機飛行速度,同步地輸出到顯示設備上。
本文介紹的基于DirectDraw的SAR圖像實時滾動顯示軟件已成功地運行于中科院電子所開發(fā)的機載SAR實時成像處理器上,獲得了良好的應用效果。
1 運行的硬件環(huán)境及功能需求
本軟件運行于中科院電子所研制的機載SAR實時成像處理器上,硬件環(huán)境如圖1所示。
機上雷達通過天線對地面測繪區(qū)域發(fā)射信號,并將接收到的地物回波經過放大、下變頻和正交解調后,生成視頻回波信號(分為I/Q兩路),進入機上的實時成像處理器中。
在實時成像處理器中,首先視頻信號經A/D轉換為數(shù)字信號,再經成像處理(包括方位預濾波、距離壓縮、CTM、方位壓縮、ICTM等硬件單元)生成實時連續(xù)的SAR圖像數(shù)據" title="圖像數(shù)據">圖像數(shù)據,其具體參數(shù)如表1所示。圖像數(shù)據通過PCI接口卡(總線寬度為32位)傳入主控計算機。在主控計算機中,SAR圖像數(shù)據經本軟件處理后,通過顯示器完成雷達圖像的實時滾動顯示,其中,圖像的顯示分辨率為1024×768,顯示字長為8bit,顯示圖像灰度級為256級。
根據上述技術參數(shù),本軟件設計思想及所完成的功能如下:
(1)屏幕顯示模式為圖像自下而上進行滾動顯示,其中水平方向為距離向,垂直方向為方位向。
(2)雷達數(shù)據在成像時,圖像數(shù)據持續(xù)顯示速度應符合大于6.25Mbps(762.5×4096×2)的標準,否則,會造成數(shù)據的擁塞,導致顯示的圖像出錯。
(3)雷達成像時讀入16bit" title="16bit">16bit無符號數(shù)據,而顯示字長為8bit,所以,要從16bit數(shù)據中選取連續(xù)的8bit用來成像,而且選取的位置必須可調,即可以動態(tài)改變圖像的亮度。
(4)雷達圖像每行4096點。普通的顯示器能顯示的最大尺寸為1024×768,所以,雷達圖像不可能一次全部顯示出來,必須動態(tài)地分區(qū)域顯示。這樣就產生了兩種圖像顯示模式:全分辨率——起始距離可選,顯示距離向0~4096點中的任意1024點(如圖2所示);低分辨率——距離向4抽1,方位向4抽1,從而在1024×768的顯示器上就能顯示出整體的雷達圖像(如圖3所示)。
(5)每行圖像數(shù)據中都附加了輔助數(shù)據,它包含了雷達圖像的信息,輸出顯示可把其疊加到圖像上。
過去在顯示合成孔徑雷達(SAR)圖像時,一般采用圖形設備接口GDI。利用GDI顯示雷達滾動圖像,優(yōu)點是使用方法簡單,只需較少的代碼便能實現(xiàn),但Windows的設備無關性原則使得應用程序" title="應用程序">應用程序不能直接訪問設備硬件,處理圖像必須通過GDI,這樣就大大限制了圖形的顯示速度,并且在縮放圖像時還容易引起失真和屏閃現(xiàn)象。
DirectDraw是DirectX SDK的主要部分之一。它允許直接對顯示內存操作,支持硬件位塊傳輸、硬件覆蓋、表面翻轉,并且保持同目前的基于Windows的應用程序和驅動程序兼容。作為一種軟件接口,使用DirectDraw可以很容易地操作顯示內存,充分利用不同類型顯示設備的位塊傳輸和顏色解壓功能,而不必依賴特定的硬件。可見,DirectDraw技術能更好地支持雷達圖像的實時滾動顯示功能。
2 DirectDraw工作原理
2.1 DirectDraw的層次結構
DirectDraw通過一個設備相關的抽象層直接訪問硬件設備。一般地,DirectDraw通過硬件抽象層(HAL),提供設備無關操作。HAL是由設備生產商提供的特定設備接口,DirectDraw直接對顯示硬件進行操作,為應用程序顯示圖形提供一組統(tǒng)一的接口和方法。HAL可以是顯示設備驅動程序的一部分,或是獨立的DLL,通過驅動程序編寫者定義的一個私有接口與顯示驅動程序進行通信。
當硬件抽象層不支持某種特性時,DirectDraw會嘗試進行軟件仿真,仿真的功能是由硬件仿真層(HEL)提供的。同HAL一樣,應用程序也從來不直接與HEL一起工作,DirectDraw對硬件的主要特性都提供透明的支持,不管它是由HAL支持還是由HEL仿真的。
從圖4中可以看出,DirectDraw既擁有底層的高性能接口,具有設備無關的靈活性,又將圖形功能揉和在Win32程序中,得以充分利用其中存在的硬件加速功能。應用程序通過API直接訪問顯存,大大提高了顯示速度,進而產生快速、平穩(wěn)的圖形。
2.2 DirectDraw的工作機制
在使用DirectDraw技術顯示圖像時,一般要創(chuàng)建若干個圖形數(shù)據緩沖區(qū)(以下稱為“表面”),并把這些圖形數(shù)據裝入其中,再進行轉換、拉伸、拷貝等操作,并且還可以顯示這些緩沖區(qū)中的圖形數(shù)據。表面可以分為幾類,這里主要用到主表面和離屏頁面。
主表面是用戶在屏幕上可以看到的,它是顯示內存的一部分。所有DirectDraw程序都有主表面,而且只有一個,且不能改變它的尺寸、格式和位置。主表面有一個很重要的特性——翻頁。一個可以翻頁的主表面實際上是兩個表面,一個是可見的,即主表面;一個是不可見的,稱為后備緩沖區(qū)。當翻頁后,將原后備緩沖區(qū)頁中的內容拷貝到可見主表面頁,而同時將原可見主表面頁的內容拷貝到后備緩沖區(qū)頁。
顯示器屏幕雖然每秒中刷新很多次,但每次都是一遍一遍地讀取可見主表面中存儲的顯示頁信息,而對后備緩沖區(qū)的改動則不會顯示出來,也不會影響到可見主表面的顯示,只有當施行翻頁操作后,兩頁的內容互換,在原后備緩沖區(qū)的改動才會顯示在屏幕上,而這個互相拷貝的時間比起每次刷新所用的時間少了幾十萬個數(shù)量級,人眼是根本察覺不到的,所以用這種方法可以獲得不閃爍、平滑、優(yōu)質的動畫效果。
還有一種表面叫離屏表面,它是不能直接看到的。離屏表面作為存儲緩沖區(qū),有助于表面之間的互相切換,它的大小是可以改變的。
本軟件中DirectDraw各個表面之間的交互如圖5所示。
3 DirectDraw在雷達圖像實時顯示中的應用
3.1 軟件設計
在本軟件中,選用Win32應用程序開發(fā)環(huán)境來開發(fā)基于DirectDraw的雷達圖像實時顯示程序。之所以選用Win32而不用MFC,主要因為MFC集成了大量的數(shù)據和方法,在編制基于圖形顯示和多媒體的應用程序時會帶來極大的麻煩。首先是無法觸及系統(tǒng)的內核,而且,MFC事先建好的類的許多功能對該程序來說是無用和低效的,使用它們只會給程序帶來冗余和不便。
3.1.1 整體設計
為更好地支持實時顯示,使圖像保持平滑和連貫,筆者在軟件中引入了多線程技術。除主線程外,另創(chuàng)建兩個線程,一個用來從外部設備中獲得實時數(shù)據,將其放到內存中(寫線程);另一個用來將內存中的數(shù)據利用DirectDraw技術進行滾動顯示(讀線程)。
具體地,在內存中設置一個大小適宜的緩沖區(qū),當有外部數(shù)據傳來,且緩沖區(qū)不滿時,寫線程接收外部數(shù)據,依次填充到緩沖區(qū)內,否則寫線程等待;當緩沖區(qū)中有未顯示的數(shù)據時,讀線程將其取出送去前端顯示,否則讀線程等待。為了避免發(fā)生“死鎖”、“不一致讀”或者“臟數(shù)據”現(xiàn)象,在讀寫線程之間加入同步事件機制,通過事件來對二者進行協(xié)調。
圖6給出了本軟件的主要流程,初始化主窗口后,首先對PCI卡進行初始配置,以通過它來進一步獲得雷達圖像的實時數(shù)據,然后分別創(chuàng)建寫線程和讀線程,來協(xié)助實時數(shù)據的顯示;進入消息循環(huán)后,根據從PCI卡處獲得的數(shù)據消息,激活讀、寫線程,將實時數(shù)據處理之后通過DirectDraw滾動顯示,當顯示完畢時,關閉讀寫線程,退出軟件。
3.1.2 圖像顯示設計
在進入消息循環(huán)后,讀寫線程就會將外部的實時圖像數(shù)據依次送到前端顯示。這里的圖像顯示主要是基于DirectDraw的圖像顯示技術來實現(xiàn)的。創(chuàng)建一個主頁面、一個后臺緩沖頁面和一個離屏頁面,刷新圖像時,直接訪問離屏頁面, 從外部獲得數(shù)據賦值給離屏頁面;然后從離屏頁面中復制1024×768的塊到后臺緩沖頁面中,最后,調用換頁函數(shù),實現(xiàn)主頁面和后臺緩沖頁面的交換,即實現(xiàn)主頁面的刷新。頁面刷新的頻率主要靠PCI的實時消息來確定,在每次消息到來時,調用更新頁面函數(shù),實現(xiàn)頁面的動態(tài)刷新。
此外,根據雷達圖像的要求,為了使顯示范圍和區(qū)域可以動態(tài)改變,筆者把顯示模式分為全屏顯示和區(qū)域顯示兩種。全屏顯示模式下,距離向和方位向均4抽1顯示,整個雷達圖像在方位向就可以全部顯示出來,但如果僅僅是4抽1的話,顯示的圖像一定很不平滑。所以,在抽點顯示的同時,對圖像做平滑處理,即將選中點的周圍16個點取平均值作為此點的灰度值。在區(qū)域顯示模式下,將方位向分成4個區(qū)域,每個區(qū)域大小為1024,顯示時,只顯示其中一個區(qū)域,所以,屏幕上顯示出來的圖像的分辨率為原始分辨率。在這種顯示模式下,雖然圖像的每個像素點都可以看到,但在各區(qū)域的交界處不能看到其周圍像素點,不能很好地理解圖像。所以,在區(qū)域顯示時,設計使其在水平方向能夠小幅度移動。具體處理流程如圖7所示。
同時為了使得圖像亮度可以動態(tài)改變,選擇16bit數(shù)據中不同位置的連續(xù)8bit數(shù)據,并在讀取8bit數(shù)據時,做飽和處理,即如果所選擇的8bit數(shù)據的高位有任意一位為1,則此8bit數(shù)據定為255。
3.2 軟件運行的實際效果
經測試,此軟件已達到設計要求,完成所要求的全部功能,即:
(1)可以在圖像下方實時顯示正在顯示的圖像區(qū)域范圍、亮度信息、滾動速度及圖像的距離向位置等各種參數(shù);
(2)具備切換是否顯示幫助菜單,以及是否顯示各種飛行參數(shù)的功能;
(3)實現(xiàn)了圖像滾動速度可以調節(jié)的功能;
(4)支持兩種顯示模式,即全屏顯示模式和區(qū)域顯示模式;
(5)在區(qū)域顯示時,可以選擇4個不同區(qū)域,通過操作4個鍵進行快速切換,也可以操作左右方向鍵,實現(xiàn)圖像的左右小幅度移動;
(6)可以通過按鍵控制選取不同位置的8bit數(shù)據,實現(xiàn)圖像亮度的控制;
(7)為了方便使用者更準確地知道每個點的具體位置,可以選擇在圖像上打上網格。
目前,基于DirectDraw的雷達圖像實時顯示技術已應用在中科院電子所研發(fā)的機載SAR實時成像處理器項目的實踐中,現(xiàn)已通過測試,投入實際運行,性能良好。由于本軟件設計中所采用技術的通用性和靈活性,使其可應用于其它相似的雷達圖像實時顯示系統(tǒng)中,因此具有廣泛的應用前景。
參考文獻
1 武永康.DirectDraw原理與API參考.北京:清華大學出版社,2000
2 劉永坦.雷達成像技術.哈爾濱:哈爾濱工業(yè)大學出版社,1999
3 王險峰, 劉寶宏.Windows環(huán)境下的多線程編程原理與應用.北京:清華大學出版社,2002