(陜西理工大學(xué) 電氣工程學(xué)院,陜西 漢中 723000)
在高速運(yùn)動(dòng)的導(dǎo)彈末端制導(dǎo)、彈道實(shí)驗(yàn)或機(jī)載武器姿態(tài)跟蹤系統(tǒng)中,需要快速地捕獲目標(biāo)與實(shí)時(shí)定位,完整記錄高速實(shí)驗(yàn)數(shù)據(jù),為目標(biāo)高速運(yùn)動(dòng)規(guī)律研究和性能分析提供數(shù)據(jù)支撐[1-2]。高幀頻圖像跟蹤系統(tǒng)的效果容易受到眾多因素干擾,這對(duì)高幀頻CMOS圖像傳感器、圖像接口模塊、圖像處理器和跟蹤機(jī)構(gòu)等提出了更高的要求[3-4]。
現(xiàn)有高幀頻圖像處理系統(tǒng)多采用并行工作方式的FPGA器件,實(shí)現(xiàn)與圖像傳感器接口及內(nèi)部算法并行處理功能。文獻(xiàn)[5]通過(guò)Camera Link接口,利用FPGA對(duì)分辨率為2048×1088像素、幀頻為280fps的圖像進(jìn)行采集、存儲(chǔ)、目標(biāo)粗定位等處理,利用DSP完成目標(biāo)準(zhǔn)確定位和實(shí)時(shí)跟蹤,系統(tǒng)處理數(shù)據(jù)量大,相對(duì)較為復(fù)雜。文獻(xiàn)[6]對(duì)分辨率為300×300像素、幀頻1 000 Hz信標(biāo)光斑圖像的進(jìn)行捕獲、預(yù)處理、閾值分割和形心定位,實(shí)現(xiàn)了高幀頻激光光斑跟蹤與瞄準(zhǔn)功能,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,但圖像采集與處理不能同步進(jìn)行。文獻(xiàn)[7]對(duì)分辨率為1280×1024、幀頻為500fps的圖像進(jìn)行圖像捕獲、高速緩存、千兆網(wǎng)傳輸、外部控制功能,系統(tǒng)采用一片SDRAM完成圖像采集和處理的緩沖功能,處理效率相對(duì)較低。文獻(xiàn)[8]將DRAM分割成兩個(gè)乒乓塊Bank0-1和Bank2-3,采用兵乓切換方式讀寫DRAM中Bank0-1和Bank2-3區(qū)域,這種工作方式一定程度上提高系統(tǒng)處理速度,但圖像保存和圖像處理分開,系統(tǒng)工作效率仍舊不高。
為了提高高幀頻圖像系統(tǒng)的實(shí)時(shí)采集、處理需求,本文利用CMOS圖像傳感器LUPA-300、CycloneIV EP4CE115和2片DDR2等設(shè)計(jì)了一種高幀頻圖像目標(biāo)跟蹤系統(tǒng),該系統(tǒng)能夠?qū)Ψ直媛蕿?40×480像素、幀頻250 Hz的圖像進(jìn)行捕獲、閾值分割、形心定位等處理,實(shí)現(xiàn)對(duì)高速運(yùn)動(dòng)目標(biāo)進(jìn)行精確跟蹤。
圖像跟蹤系統(tǒng)是利用FPGA對(duì)高幀頻CMOS圖像傳感器圖像進(jìn)行捕獲、預(yù)處理、目標(biāo)識(shí)別、形心跟蹤和云臺(tái)驅(qū)動(dòng)控制。系統(tǒng)結(jié)構(gòu)如圖1所示,主要包括FPGA模塊、高幀頻CMOS圖像傳感器模塊、外設(shè)時(shí)鐘模塊、2片DDR2模塊、二維云臺(tái)控制模塊和RS232、USB2.0、以太網(wǎng)等外設(shè)接口模塊等。
圖1 系統(tǒng)結(jié)構(gòu)框圖
FPGA是圖像跟蹤系統(tǒng)的核心芯片,實(shí)現(xiàn)與圖像傳感器、DDR2、VGA、上位機(jī)接口和目標(biāo)識(shí)別與跟蹤控制等功能,因而FPGA的內(nèi)部資源及工作頻率決定了整個(gè)系統(tǒng)的性能。高幀頻圖像傳感器選用Cypress公司CMOS圖像傳感器LUPA-300,該芯片內(nèi)置10位ADC,輸出的圖像數(shù)據(jù)長(zhǎng)度為10位,數(shù)據(jù)輸出最大速率為80 Mb/s。輸出圖像具有開窗功能,窗口分辨率為640×480時(shí)的幀頻數(shù)可達(dá)250fps;窗口分辨率為256×256時(shí)的幀頻數(shù)可達(dá)929fps。圖像緩存單元采用美光DDR2芯片MT47H64M16HR,該芯片容量為1 Gbit,數(shù)據(jù)總線寬度為16位,與FPGA之間數(shù)據(jù)頻率最高可達(dá)333 MHz。FPGA選用CYCLONE IV 系列EP4CE115F29C7N,該芯片擁有114480個(gè)邏輯單元、3888Kb嵌入式存儲(chǔ)器,266個(gè)18*18乘法器、4個(gè)PLL、528個(gè)I/O,可以滿足圖像乒乓存儲(chǔ)、外設(shè)接口需求;FPGA芯片的速度等級(jí)為C7,內(nèi)核時(shí)最高工作頻率為437.5 MHz,鎖相環(huán)輸出時(shí)鐘最高為450 MHz,能夠滿足高幀頻圖像傳感器數(shù)據(jù)傳輸和DDR2存儲(chǔ)需求。
FPGA中設(shè)計(jì)的功能模塊如圖1所示,主要包括鎖相環(huán)PLL、圖像采集、DDR2乒乓讀寫、圖像處理和運(yùn)動(dòng)跟蹤等幾個(gè)模塊。通過(guò)SPI總線配置LUPA-300芯片內(nèi)部寄存器、實(shí)時(shí)采集高幀頻圖像;DDR2乒乓讀寫模塊用于緩存采集與處理圖像幀,避免高幀頻圖像處理不及時(shí)的問(wèn)題;圖像處理模塊用于目標(biāo)動(dòng)態(tài)閾值分割及形心計(jì)算;運(yùn)動(dòng)跟蹤模塊用于控制云臺(tái)跟蹤目標(biāo)。
根據(jù)各功能模塊時(shí)鐘的需求配置PLL,CMOS圖像傳感器LUPA-300配置總線SPI的時(shí)鐘為20 MHz,像素輸出的主時(shí)鐘為80 MHz;DDR2存儲(chǔ)器MT47H64M16HR的時(shí)鐘頻率最高166.7 MHz,目標(biāo)識(shí)別模塊的時(shí)鐘為200 MHz。因而鎖相環(huán)模塊設(shè)計(jì)時(shí),選擇輸入時(shí)鐘信號(hào)為40 MHz的有源晶振,鎖相環(huán)內(nèi)部經(jīng)過(guò)分頻和倍頻配置后,輸出四路時(shí)鐘信號(hào)分別為20 MHz、80 MHz、160 MHz和200 MHz。PLL輸出的20 MHz時(shí)鐘信號(hào)用于CMOS圖像傳感器LUPA-300的SPI總線時(shí)鐘,PLL輸出的80 MHz用于讀取LUPA-300像素時(shí)鐘信號(hào),PLL輸出的160 MHz用于讀寫DDR2模塊時(shí)鐘信號(hào),PLL輸出的200 MHz其他模塊時(shí)鐘驅(qū)動(dòng)信號(hào)。
2.2.1 SPI總線時(shí)序驅(qū)動(dòng)
LUPA-300的工作模式由內(nèi)部16個(gè)寄存器決定,因而系統(tǒng)上電后,需要通過(guò)SPI總線接口(SPI_ENABLE、SPI_CLK和SPI_IN)對(duì)CMOS圖像傳感器LUPA-300的內(nèi)部寄存器進(jìn)行配置。依據(jù)LUPA-300寄存器參數(shù)設(shè)置主從工作模式、曝光時(shí)間、開窗大小和亞采樣等參數(shù)。通過(guò)配置X方向、Y方向的起始地址,設(shè)置圖像讀入X方向、Y方向的像素開始位置,也可配置圖像開窗的寬度和高度。外部40 MHz晶振信號(hào)經(jīng)鎖相環(huán)后產(chǎn)生80 MHz時(shí)鐘,再經(jīng)4分頻后產(chǎn)生的20 MHz為SPI時(shí)鐘。SPI_IN為SPI串行數(shù)據(jù)輸入線,有效數(shù)據(jù)為16位,其中前4位[15:12]為地址,后12位[11:0]為數(shù)據(jù)。SPI允許線SPI_ENABLE為低電平時(shí),每個(gè)SPI_CLK的上升沿將SPI_IN的串行數(shù)據(jù)送入LUPA-300內(nèi)部寄存器,具體配置時(shí)序如圖2所示。
2.2.2 圖像數(shù)據(jù)采集模塊設(shè)計(jì)
若LUPA-300的16個(gè)16位寄存器配置完畢,依據(jù)LUPA-300的幀有效FRAME_VALID和行有效LINE_VALID進(jìn)行圖像采集。如圖3所示,幀有效FRAME_VALID上升沿表示一幀圖像開始輸出,在FRAME_VALID為高電平期間,行有效LINE_VALID上升沿表示一行圖像開始輸出;在LINE_VALID為高電平期間,每個(gè)時(shí)鐘CLK(80 MHz)信號(hào)上升沿輸出一個(gè)像素?cái)?shù)據(jù)。當(dāng)一行像素輸出完畢,LINE_VALID變低電平,間隔一個(gè)ROT時(shí)間后 LINE_VALID再次變高電平,開始下一行的輸出;當(dāng)行有效LINE_VALID為低電平,輸出無(wú)效的像素?cái)?shù)據(jù);當(dāng)一幀圖像輸出完成后,幀有效FRAME_VALID輸出低電平,間隔一個(gè)FOT時(shí)間后,F(xiàn)RAME_VALID再次有效,開始下一幀圖像輸出。因而,一幀圖像的輸出周期可以表示為:Tframe=FOT+Nline·(ROT+Npixels·Tclk)=7.8 μs+480·(400 ns+640·12.5 ns)=4.039 ms。
其中,F(xiàn)OT和ROT分別表示幀開銷時(shí)間和行開銷時(shí)間,Nline和Npixels分別為圖像幀的行和列數(shù),Tclk為時(shí)鐘周期。
圖3 圖像幀讀取時(shí)序
如圖4所示,LUPA300 的狀態(tài)轉(zhuǎn)換圖主要分為空閑、讀FOT、讀ROT和讀像素四個(gè)狀態(tài)。每一幀圖像從幀開銷時(shí)間FOT開始,然后逐行讀取各行像素?cái)?shù)據(jù),則讀取第i幀480*640圖像的時(shí)間等于間隔幀開銷時(shí)間FOT與讀取480行的時(shí)間之和;每一行圖像從開銷時(shí)間ROT開始,然后依次讀取行中各像素?cái)?shù)據(jù),則讀取幀中一行的時(shí)間等于行開銷時(shí)間ROT與讀取640個(gè)像素時(shí)間之和。
圖4 LUPA 300讀圖像狀態(tài)轉(zhuǎn)移圖
LUPA-300圖像傳感器內(nèi)部集成4路10位ADC,因而分辨率為640×480的一幀圖像存儲(chǔ)大小為640×480×10 bit=3.072 Mb。FPGA要進(jìn)行程序存儲(chǔ)和圖像數(shù)據(jù)緩沖,內(nèi)部容量相對(duì)較小,不能滿足高速圖像存儲(chǔ)需求,故選用兩片DDR2作為圖像緩存。為了保證圖像采集與處理能并行執(zhí)行,系統(tǒng)使用兩片DDR2實(shí)現(xiàn)乒乓讀寫操作[9],采集到的圖像交替存入DDR2-1和DDR2-2存儲(chǔ)器。乒乓方式交替讀寫DDR2的流程[10]如圖5所示,將采集到的圖像數(shù)據(jù)寫入DDR2-1的同時(shí)讀取DDR2-2中圖像數(shù)據(jù),進(jìn)行目標(biāo)識(shí)別、跟蹤和云臺(tái)驅(qū)動(dòng)控制等處理;同理,在將采集到的圖像數(shù)據(jù)寫入DDR2-2的同時(shí)讀取DDR2-1中圖像數(shù)據(jù),進(jìn)行目標(biāo)識(shí)別、跟蹤和云臺(tái)驅(qū)動(dòng)控制等處理,如此交替乒乓方式讀寫DDR2。另外,DDR2內(nèi)部的兩個(gè)塊區(qū)域也采用乒乓讀寫模式,避免同時(shí)對(duì)一幅圖像進(jìn)行讀寫操作,保證能夠讀出完整的一幅圖像。
圖5 乒乓方式讀寫DDR流程
DDR2控制模塊主要包括讀寫兩部分控制功能,由于數(shù)據(jù)讀寫速率高,要求數(shù)據(jù)捕獲的精度也高,因而保證DDR2控制模塊的信號(hào)穩(wěn)定性和完整性相對(duì)較為復(fù)雜。利用Quartus軟件的MegaWizard管理器產(chǎn)生DDR2 SDRAM控制器IP核。設(shè)定該DDR控制模塊的參考輸入時(shí)鐘為40 Mhz,DDR2存儲(chǔ)器的驅(qū)動(dòng)時(shí)鐘為160 Mhz,采用全速數(shù)據(jù)模式讀寫DDR2器件MT47H64M16。DDR2控制模塊設(shè)計(jì)主要包括PLL、ALTMEMPHY和Memory Controller 三個(gè)部分,PLL模塊用于DDR2時(shí)鐘管理,根據(jù)輸入外設(shè)輸入的40 MHz時(shí)鐘產(chǎn)生160 MHz讀寫時(shí)鐘信號(hào);ALTMEMPHY模塊用于DDR2自動(dòng)校正和實(shí)現(xiàn)DDR2所需物理接口;Memory Controller模塊用于產(chǎn)生讀寫DDR2芯片所需數(shù)據(jù)和地址時(shí)序信號(hào)。在DDR2初始化階段,ALTMEMPHY模塊斷開用戶編寫的邏輯控制塊,所有讀寫操作都處于非活動(dòng)狀態(tài),由ALTMEMPHY完成DDR2器件的自動(dòng)校正。初始化完成后,才能依據(jù)控制要求對(duì)SDRAM執(zhí)行讀寫操作[11]。
SDRAM控制模塊的讀、寫模式都采用突發(fā)連續(xù)讀取模式,只要指定起始列地址與突發(fā)長(zhǎng)度,就會(huì)自動(dòng)進(jìn)行尋址與數(shù)據(jù)的讀取。根據(jù)SDRAM的讀、寫工作狀態(tài),SDRAM控制模塊產(chǎn)生SDRAM讀、寫需要的地址和控制信號(hào),并對(duì)SDRAM的數(shù)據(jù)進(jìn)行讀、寫操作。在將640*480圖像寫入SDRAM時(shí),輸出一行圖像數(shù)據(jù)的長(zhǎng)度為640×10bit;設(shè)置SDRAM讀寫的突發(fā)長(zhǎng)度(Burst Length)為640×16bit,SDRAM每寫完一行640×16bit后,發(fā)送Burst Stop命令終止當(dāng)前的突發(fā)操作;隨后執(zhí)行刷新操作,再繼續(xù)讀寫下一行數(shù)據(jù)。SDRAM存儲(chǔ)器中電容的數(shù)據(jù)有效保存期上限是64 ms,因而通過(guò)不斷刷新來(lái)保持?jǐn)?shù)據(jù)。讀寫640*480圖像數(shù)據(jù)時(shí)以一行圖像為單位進(jìn)行刷新,設(shè)定自動(dòng)刷新時(shí)間間隔為64 ms/480=133.3 μs(微秒),這樣不會(huì)造成數(shù)據(jù)失效。另外,LUPA 300輸出數(shù)據(jù)速率與SDRAM存取時(shí)間不匹配,因而SDRAM前端加入FIFO模塊進(jìn)行圖像數(shù)據(jù)緩沖。
2.5.1 目標(biāo)分割
要準(zhǔn)確跟蹤目標(biāo),首先需要將目標(biāo)從背景圖像中分割出來(lái)。不同的應(yīng)用場(chǎng)景下的背景圖像復(fù)雜多樣,而對(duì)于空域目標(biāo)跟蹤,背景圖像隨天氣的影響也較大,不能采用固定的閾值分割目標(biāo),而應(yīng)根據(jù)輸入圖像直方圖的灰度值選擇動(dòng)態(tài)閾值分割目標(biāo)。
2.5.2 目標(biāo)形心坐標(biāo)計(jì)算
利用形心法計(jì)算目標(biāo)邊界尺寸及中心坐標(biāo),具體的目標(biāo)中心計(jì)算方法如下:
2.5.3 目標(biāo)濾波
將目標(biāo)從背景之中分割出后,需要對(duì)分割的目標(biāo)進(jìn)一步數(shù)據(jù)清洗,濾除空域中云塊等干擾信號(hào)。由于高幀頻相機(jī)的相鄰兩幀圖像之間時(shí)間差異非常小,空域中穩(wěn)定飛行目標(biāo)的姿態(tài)和距離攝像頭距離不可能產(chǎn)生較大變化,因而相鄰兩幀圖像中分割的目標(biāo)形心位置和目標(biāo)區(qū)域面積變化也不會(huì)太大。分割出目標(biāo)后,計(jì)算當(dāng)前目標(biāo)的形心坐標(biāo)及統(tǒng)計(jì)目標(biāo)區(qū)域面積內(nèi)像素?cái)?shù)量,并與上一幀圖像中目標(biāo)的形心坐標(biāo)及像素?cái)?shù)量進(jìn)行比較。若形心坐標(biāo)之間距離及目標(biāo)圖像之間像素差異在允許閾值范圍內(nèi)時(shí),則認(rèn)為是正確的跟蹤目標(biāo)。形心坐標(biāo)之間距離及目標(biāo)圖像之間像素差異的閾值設(shè)置要合理,閾值設(shè)定與跟蹤目標(biāo)大小、距離遠(yuǎn)近有關(guān),閾值過(guò)小會(huì)導(dǎo)致跟蹤不及時(shí),閾值過(guò)大會(huì)導(dǎo)致跟蹤范圍廣,容易丟失目標(biāo)。
目標(biāo)跟蹤目的是目標(biāo)形心坐標(biāo)位于圖像視場(chǎng)中央(320,240)附近,分別依據(jù)橫向和縱向偏移量,利用增量式PID計(jì)算二維云臺(tái)控制量,加入帶死區(qū)和抗積分飽和控制,再根據(jù)控制量驅(qū)動(dòng)云臺(tái)俯仰和偏航舵機(jī)跟蹤目標(biāo)。在目標(biāo)跟蹤系統(tǒng)設(shè)計(jì)中,常常出現(xiàn)部分或全部被遮擋,引起跟蹤目標(biāo)丟失,這需要考慮云朵或其它障礙物遮擋時(shí)目標(biāo)跟蹤問(wèn)題。在幀序列圖像跟蹤中,用FIFO存儲(chǔ)500組(約2秒)跟蹤目標(biāo)的特征參數(shù)。當(dāng)分割出目標(biāo)圖像時(shí),釋放最早存入FIFO的目標(biāo)特征參數(shù),存入當(dāng)前分割目標(biāo)的特征參數(shù)。若跟蹤目標(biāo)部分或全部丟失時(shí),利用前期存儲(chǔ)的目標(biāo)特征參數(shù)預(yù)測(cè)當(dāng)前目標(biāo)特征參數(shù),并依據(jù)預(yù)測(cè)值驅(qū)動(dòng)云臺(tái)跟蹤;若長(zhǎng)時(shí)間仍未捕獲目標(biāo)時(shí),則認(rèn)為目標(biāo)丟失,控制云臺(tái)重新進(jìn)行全局掃描。
為了平滑跟蹤目標(biāo),當(dāng)目標(biāo)形心在圖像中心的四邊形區(qū)域時(shí),認(rèn)為目標(biāo)處于圖像中央,控制量不變;否則按照偏移量計(jì)算控制量。二維云臺(tái)控制主要分為偏航和俯仰兩個(gè)方向控制,具體控制量計(jì)算過(guò)程如下:
2.6.1 云臺(tái)偏航方向的控制量可表示為:
H_data=
2.6.2 云臺(tái)俯仰方向控制量可表示為:
V_data=
將LUPA-300圖像傳感器配置成分辨率為640×480,幀頻為250 fps。系統(tǒng)采用流水線方式并行執(zhí)行圖像讀取、圖像分割、形心跟蹤及二維云臺(tái)驅(qū)動(dòng)控制功能。由于圖像幀頻為250 fps,云臺(tái)的偏航和俯仰方向跟蹤舵機(jī)選用工作頻率在50~300 Hz的DS3120MG,舵機(jī)模塊的時(shí)鐘選用1 MHz,周期為4 ms。通過(guò)控制兩路PWM波的脈沖寬度,從而實(shí)現(xiàn)云臺(tái)偏航和俯仰角度。偏轉(zhuǎn)角度從0°~180°變化對(duì)應(yīng)的脈沖寬度為500~2 500 μs,偏航舵機(jī)的控制量范圍為1 000~2 000(對(duì)應(yīng)偏航轉(zhuǎn)角45°~135°),俯仰舵機(jī)的控制量為800~1 000(對(duì)應(yīng)俯仰角37°~45°)。
圖6為圖像采集時(shí)序圖,利用Quartus軟件內(nèi)部SignalTapII捕獲一幀圖像,捕獲的圖像分辨率640×480,line_cnt的計(jì)數(shù)范圍為0~479,每行圖像包括640個(gè)像素,line_pixel_cnt計(jì)數(shù)范圍為0~639。
圖6 圖像像素讀取時(shí)序圖
對(duì)比采用25fps和250fps的圖像跟蹤目標(biāo)光斑實(shí)驗(yàn),采用25fps圖像傳感器跟蹤慢速目標(biāo)時(shí),跟蹤效果差異不明顯;跟蹤快速目標(biāo)時(shí),采用25fps圖像跟蹤目標(biāo)時(shí),相鄰兩幀圖像之間形心水平方向相差9像素,輸出的舵機(jī)控制量變化率較大,容易引起不能及時(shí)響應(yīng),從而使目標(biāo)脫離圖像視場(chǎng)范圍。而采用250fps圖像傳感器跟蹤目標(biāo)時(shí),獲得的形心水平方向相差2像素,形心軌跡點(diǎn)較多,曲線相對(duì)光滑,控制量曲線平滑,跟蹤效果相對(duì)較好。
本文給出一種基于高幀頻圖像傳感器、FPGA及高速舵機(jī)的目標(biāo)跟蹤系統(tǒng),通過(guò)SPI總線對(duì)圖像傳感器的寄存器進(jìn)行配置,使CMOS圖像傳感器在像素分辨率為640×480時(shí)幀頻可達(dá)250 fps。采用流水線方式進(jìn)行圖像采集、動(dòng)態(tài)閾值分割目標(biāo)、目標(biāo)形心跟蹤、二維云臺(tái)跟蹤控制等,能夠滿足高幀頻圖像處理需求,提高了系統(tǒng)的跟蹤精度。