基于DSP的實(shí)時(shí)紅外熱成像系統(tǒng)的數(shù)據(jù)交換及實(shí)時(shí)顯示
摘要:在以PC機(jī)和DSP數(shù)字信號(hào)處理板構(gòu)成的實(shí)時(shí)紅外熱成像系統(tǒng)原理的基礎(chǔ)上,闡述了主機(jī)通過PCI口與DSP實(shí)現(xiàn)數(shù)據(jù)交換及在Windows下實(shí)現(xiàn)實(shí)時(shí)圖像顯示的技術(shù)。由于通過PCI口數(shù)據(jù)交換速度快,在數(shù)據(jù)顯示時(shí)采用直接寫屏和翻頁技術(shù),系統(tǒng)可達(dá)到理想圖像實(shí)時(shí)顯示效果。
本文引用地址:http://m.butianyuan.cn/article/225740.htm關(guān)鍵詞:紅外圖像 實(shí)時(shí)性 DSP
隨著科學(xué)技術(shù)的高速發(fā)展,紅外熱像儀在軍事、科研、工農(nóng)業(yè)生產(chǎn)、醫(yī)療衛(wèi)生等領(lǐng)域的應(yīng)用越來越廣泛。由于紅外焦平面固有的非均勻性,在紅外圖像處理過程中,必須對(duì)每幀中的每個(gè)像元進(jìn)行非均性校正處理,才能到較好的效果。因此紅外圖像實(shí)時(shí)處理的數(shù)據(jù)量很大,如256×256的一個(gè)紅外焦平面面陣,像元數(shù)為64K,如果每個(gè)像元用12bit表示,每秒顯示24幀圖像,則每秒傳輸?shù)臄?shù)據(jù)量高達(dá)2.25Mbyte;如果要進(jìn)行校正運(yùn)算,計(jì)算量更大。目前國(guó)內(nèi)的紅外熱成像系統(tǒng)大多采用計(jì)算機(jī)進(jìn)行數(shù)據(jù)采集,用軟件實(shí)現(xiàn)非均勻性校正。由于軟件處理速度慢,很難實(shí)現(xiàn)實(shí)時(shí)成像,只能對(duì)單幀圖像進(jìn)行處理。
本文介紹采用PC機(jī)和基本DSP的數(shù)字信號(hào)處理板(數(shù)字板)構(gòu)成的主從式成像系統(tǒng)。由于非均勻性校正的典型算法是乘累加,在一般計(jì)算機(jī)上處理速度比較慢。DSP具有高速數(shù)據(jù)處理能力,采用DSP進(jìn)行圖像處理的運(yùn)算,通過計(jì)算機(jī)進(jìn)行系統(tǒng)的控制和數(shù)據(jù)的顯示,正好發(fā)揮軟硬件的特長(zhǎng),從而提高了系統(tǒng)的運(yùn)算速度。
1 系統(tǒng)組成及基本原理
一個(gè)完整的紅外成像系統(tǒng)不但要具備圖像信號(hào)的采集功能,還要能對(duì)圖像進(jìn)行實(shí)時(shí)顯示,且要完成圖像信號(hào)的分析及處理算法(如非均勻性校正等)。通常這些算法的運(yùn)算量大,再加上要滿足實(shí)時(shí)顯示的要求,因此采用高速DSP芯片作為數(shù)據(jù)核心處理單元。另外,要求系統(tǒng)滿足通用性的同時(shí),針對(duì)不同的應(yīng)用和不斷出現(xiàn)的新處理方法,還要求系統(tǒng)例于功能的改進(jìn)和擴(kuò)展。為此,我們以PC機(jī)為主機(jī),以TI公司的DSP(TMS320C6201)為輔助機(jī)作為數(shù)字信號(hào)處理板的核心[1~2],設(shè)計(jì)出紅外圖像處理系統(tǒng)。圖1是基于DSP的實(shí)時(shí)紅外熱成像系統(tǒng)的原理圖。
1.1 TMS320C6201的優(yōu)點(diǎn)[3]
TMS320C6201是TMS320C6x系列中的高速定點(diǎn)數(shù)字處理芯片,是TI公司二十世紀(jì)90年代后期的最新一代DSP產(chǎn)品。每秒最大處理能力為1600MIPS,具有特殊的VelociTI結(jié)構(gòu)獨(dú)特的指令集,從而保證了它強(qiáng)大的運(yùn)算能力、高度的并行性和良好的靈活性。同時(shí)其外圍設(shè)備包括DMA控制器、主機(jī)接口(HPI)、中斷選擇器,能夠很方便快速地與外圍設(shè)備進(jìn)行數(shù)據(jù)交換。
1.2 系統(tǒng)組成原理
系統(tǒng)由模擬信號(hào)板、數(shù)字信號(hào)處理板,PC機(jī)三部分構(gòu)成。模擬信號(hào)用于進(jìn)行信號(hào)提取,包括IRFPA、驅(qū)動(dòng)信號(hào)源、前置放大器。IRFPA由信號(hào)驅(qū)動(dòng)源驅(qū)動(dòng),根據(jù)外部紅外光線的感應(yīng)強(qiáng)度,輸出窗形波的模擬信號(hào),經(jīng)前置放大器放大后與數(shù)字信號(hào)處理板相連。
數(shù)字信號(hào)算是板由數(shù)據(jù)采集和數(shù)據(jù)處理兩部分組成。數(shù)據(jù)采集部分以一片F(xiàn)PGA構(gòu)成控制器,用于控制整個(gè)處理板的時(shí)間同步和選擇存儲(chǔ)器及圖像預(yù)處理等。數(shù)據(jù)處理部分包括一片DSP,一片雙口RAM和兩片RAM(SRAM和SBSRAM,分別用于靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)的存儲(chǔ))。在圖像采集中,模擬信號(hào)進(jìn)入A/D轉(zhuǎn)換器之后,由FPGA提供采樣控制,并將轉(zhuǎn)換后的數(shù)字信號(hào)存入雙口RAM,它為DSP提供數(shù)據(jù)。校正的參數(shù)放在主程序中,用以對(duì)圖像進(jìn)行校正,同時(shí)主程序還要進(jìn)行其它運(yùn)算,以便生成DSP處理后的圖像。DRAM和SBSRAM為DSP在進(jìn)行數(shù)據(jù)處理過程中提供存儲(chǔ)空間。經(jīng)過處理之后的數(shù)據(jù)可通過PCI接口與主機(jī)交換數(shù)據(jù)。
數(shù)字板通過PCI卡與計(jì)算機(jī)相連,由于PCI總線具有高速數(shù)據(jù)交換的優(yōu)點(diǎn)(120Mbyte/S),足以滿足數(shù)據(jù)實(shí)時(shí)處理的要求。數(shù)據(jù)通過DSP的HPI口,經(jīng)由PCI口與PC機(jī)相連。PC機(jī)讀取數(shù)字板上任意存儲(chǔ)器上的數(shù)據(jù),再由計(jì)算機(jī)實(shí)現(xiàn)實(shí)時(shí)顯示。DSP的運(yùn)行程序由PC機(jī)通過PCI口加載到DSP上運(yùn)行。
2 數(shù)據(jù)的交換及Windows下數(shù)據(jù)實(shí)時(shí)顯示
在主從式結(jié)構(gòu)系統(tǒng)中,主機(jī)與從機(jī)的數(shù)據(jù)交換及數(shù)據(jù)的顯示是十分關(guān)鍵的環(huán)節(jié),下面將重點(diǎn)講述其實(shí)現(xiàn)方法。本系統(tǒng)的Windows程序是在C++ Builder下開發(fā)的。
2.1 數(shù)據(jù)的交換
2.1.1 實(shí)時(shí)性
根據(jù)人眼的視覺特點(diǎn),數(shù)字圖像成像系統(tǒng)每秒鐘至少要讀取和處理合成24幀圖像(假設(shè)對(duì)于256×256×8bit=64KByte),則進(jìn)行實(shí)時(shí)數(shù)據(jù)處理時(shí)要求每秒處理數(shù)據(jù):256×256×8bit×24幀=1.5Mbyte,并將它顯示出來,圖像才不失連續(xù)性。這樣就要求相鄰兩幀連續(xù)采術(shù)的圖像數(shù)據(jù)的讀取及合成時(shí)間間隔不能過大,因此必須滿足“數(shù)據(jù)讀取時(shí)間≤幀時(shí)隔”。主機(jī)通過PCI口對(duì)DSP芯片進(jìn)行訪問,采用PCI總線可以保證高速的數(shù)據(jù)交換。為了實(shí)現(xiàn)顯示實(shí)時(shí)性,則要求數(shù)據(jù)讀取的間隔越小越好。
2.1.2 PCI卡的驅(qū)動(dòng)問題
在Windows開發(fā)環(huán)境下,C++ Builder不能直接訪問PCI設(shè)備,需借助其它軟件實(shí)現(xiàn)。KRFTech公司主推產(chǎn)品WinDriver是進(jìn)行PCI接口程序開發(fā)的首選驅(qū)動(dòng)程序開發(fā)工具。用戶要訪問PCI口上的數(shù)字信號(hào)處理卡,一般來說有兩種途徑[4]:一是直接訪問,即用C++ Builder直接訪問PCI設(shè)備的接口函數(shù)(這種方法需要相關(guān)軟件支持);二是間接訪問,即用C++ Builder調(diào)用其它語言(如匯編或C/C++等)編寫的底層驅(qū)動(dòng)模塊(一般封裝成動(dòng)態(tài)鏈接庫DLL形式)實(shí)現(xiàn)。本系統(tǒng)采用調(diào)用動(dòng)態(tài)鏈接庫的方法。
2.1.3 從DSP讀取數(shù)據(jù)的過程
本系統(tǒng)對(duì)于PCI卡的底層驅(qū)動(dòng)程序封裝成動(dòng)態(tài)鏈接庫(evm6X.dll),其頭文件為evm6xdll.h,以便其它函數(shù)十分方便地調(diào)用。在調(diào)用動(dòng)態(tài)鏈接庫(DLL)時(shí),首先要聲明DLL,然后就可以像調(diào)用C++函數(shù)一樣使用動(dòng)態(tài)鏈接庫中的函數(shù)了。C++ Builder允許調(diào)用其它語言編寫的動(dòng)態(tài)鏈接庫,而用戶一般不知道其它函數(shù)是用何種語言編程,因此應(yīng)該注意函數(shù)標(biāo)識(shí)符和參數(shù)傳遞,以便解決調(diào)用的約定問題。
用C++ Builder編寫的CP機(jī)讀取數(shù)字板數(shù)據(jù)的模塊化程序如下:
#inchude evm6xdll.h
HANDLE hBd=NULL; //板子句柄
Short iBd=0; //板號(hào)
BOOL bExcl=1; //獨(dú)占打開=TRUE
LPVOID hHpi=NULL; //HPI接口句柄
short iMp; //Map選擇器=MAP0 //DSP啟動(dòng)方式
EVM6XDLL_CLOCK_MODE clkMode;
EVM6XDLL_ENDIAN_MODE ednMode;
ULONG ulDW[1024*16]; //定義數(shù)據(jù)緩存
Void ReadWordFromMem (LPVOID hHpi,ULONG ulDataAddr, ULONG ulDataWord,ULONG Ilength, ULONG *ulDW)
{
hBd=evm6x_open(iBd,bExcl); /打開板卡
evm6x_reset_board(hBd); //對(duì)目標(biāo)進(jìn)行reset
evm6x_set_board_config(hBd,clkMode,ednMode,0xff); //對(duì)目標(biāo)板進(jìn)行初始化配置
mode=iMp ? HPI_BOOT : HPI_BOOT_MAP0; //設(shè)置啟動(dòng)方式
evm6x_reset_dsp(hBd,mode); //復(fù)位DSP
hHpi=evm6x_hpi_open(hBd); //建立從主機(jī)到hpi的連接
if(!evm6x_hpi_read(hHpi,ulDW,ulLength,ulDataAddr)) //從DSP讀取數(shù)據(jù)
{ShowMessage(內(nèi)存讀時(shí)發(fā)生錯(cuò)誤!);} //系統(tǒng)復(fù)位操作
evm6x_hpi_close(hHpi);
evm6x_unreset_dsp(hBd);
evm6x_close(hBd);
}
由于PCI口數(shù)據(jù)交換快速度(可高達(dá)120Mbyte/s),且能方便地讀取數(shù)字板上內(nèi)存的數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)交換,因此,通過PCI口實(shí)現(xiàn)PC機(jī)與數(shù)字板數(shù)據(jù)的交換便于實(shí)時(shí)系統(tǒng)的實(shí)現(xiàn)。
2.2 數(shù)據(jù)的實(shí)時(shí)顯示
通過PCI口讀取的數(shù)據(jù)為每幀中單個(gè)像元的亮度值,因而要在Windows下實(shí)現(xiàn)實(shí)時(shí)顯示,不但要解決顏色配置問題,而且要求圖像實(shí)時(shí)顯示速度快,因此本系統(tǒng)在Windows下采用寫屏技術(shù)實(shí)現(xiàn)圖像的顯示。
2.2.1 顏色控制
由于紅外圖像傳感器只能反映外界溫度的高低,因而在處理過程中,對(duì)焦平面的每個(gè)像元采用8bit(256灰度)來表示。而Windows下顏色表的顏色采用的是R、G、B即紅、綠、藍(lán)三基色,每種顏色都是從0到255。由這三種基色可構(gòu)成屏幕上的各種顏色(即24位真彩色)。如果將每個(gè)像元的RGB值均設(shè)為所取得的像元亮度值,則得到的顏色為只有亮暗的灰度圖像(256級(jí)灰度);如果按照其256級(jí)灰度來進(jìn)行偽彩色處理,則得到加偽彩色的圖像。為了使偽彩色處理,則得到加偽彩色的圖像。為了使偽彩色圖像的顯示得到增強(qiáng),可以只用256顏色表中的部分顏色來表示。通過選擇差異較大的顏色來表示熱圖像中幀測(cè)目標(biāo)的溫度范圍,即可得到增強(qiáng)圖像顯示效果的目的。
2.2.2 實(shí)時(shí)顯示的實(shí)現(xiàn)
將數(shù)字板上所讀取的幀結(jié)束點(diǎn)標(biāo)志(FLAG)用于實(shí)現(xiàn)幀同步控制,以保證每幀圖像的刷新以及圖像中間隔時(shí)間的延時(shí)。由于在Window下不能像DOS那樣直接訪問視頻存儲(chǔ)器,因而系統(tǒng)采用DirectDraw技術(shù)[5],并利用Win32下提供的DirectDraw API函數(shù)來實(shí)現(xiàn)。Win32中的DirectDraw提供了對(duì)屏幕以及屏幕分辨率的控制而不需要操作SVGA芯片,可以實(shí)現(xiàn)極快的圖像顯示速度、線性內(nèi)存和翻頁。DirectDraw還可對(duì)屏幕的分辨率及色彩模式進(jìn)行配置。通過設(shè)備屏幕的主表面(前臺(tái)Buffer)和附屬表面(后臺(tái)Buffer),開啟兩幀圖像的視頻存儲(chǔ)空間。這樣的直接訪問視頻存儲(chǔ)器,將圖形數(shù)據(jù)極快地合成圖像代碼,提高顯示速度。同時(shí),在圖像寫顯示時(shí),首先將圖像寫到后臺(tái),待幀標(biāo)記來時(shí),再將圖像傳到前臺(tái)(翻頁技術(shù))。這種翻頁技術(shù)的使用,可以從視覺上形成整幀像顯示的切換,而非單點(diǎn)的切換,從而達(dá)到平滑的實(shí)時(shí)圖像顯示的視覺效果,而時(shí)還可以延緩讀數(shù)的時(shí)間,實(shí)現(xiàn)實(shí)時(shí)處理。圖2是圖像實(shí)時(shí)顯示處理流程圖。
3 實(shí)驗(yàn)結(jié)果
圖3是系統(tǒng)通過PCI口實(shí)現(xiàn)讀數(shù)和實(shí)時(shí)顯示而獲得的128×128面陣256級(jí)灰度的圖像。實(shí)驗(yàn)表示,該系統(tǒng)可以獲得理想的平滑圖像實(shí)時(shí)顯示結(jié)果,且圖像清晰,結(jié)果較為理想。
理論分析與實(shí)驗(yàn)研究表明,本文介紹的基于DSP的紅外熱成像系統(tǒng),由于采用PC機(jī)的PCI口實(shí)現(xiàn)數(shù)據(jù)交換,具有高速的數(shù)據(jù)交換能力;通過對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示處理,能實(shí)現(xiàn)圖像的灰度和偽彩色處理;采用 Windows下的DirectDraw技術(shù),可直接訪問視頻存儲(chǔ)器,實(shí)現(xiàn)圖像數(shù)據(jù)的直接寫屏和圖像的翻面技術(shù);用幀結(jié)束點(diǎn)作為幀同步信號(hào),可實(shí)現(xiàn)紅外圖像平滑的實(shí)時(shí)顯示,達(dá)到理想的圖像顯示視覺效果。
紅外熱像儀相關(guān)文章:紅外熱像儀原理
評(píng)論