摘 要: 介紹了合成孔徑雷達(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)行觀測。與光學(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í)獲得所觀測區(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ì)地面測繪區(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)測試,,此軟件已達(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)已通過測試,投入實(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