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