魏洪健,徐琦琳,張 瑛,孫科學(xué),2*
(1.南京郵電大學(xué) 電子與光學(xué)工程學(xué)院,江蘇 南京 210023;2.射頻集成與微組裝技術(shù)國(guó)家地方聯(lián)合工程實(shí)驗(yàn)室,江蘇 南京 210023)
實(shí)時(shí)視頻處理技術(shù)在工業(yè)生產(chǎn)、缺陷檢測(cè)、自動(dòng)駕駛等領(lǐng)域有不可替代的作用,同時(shí)各個(gè)領(lǐng)域也對(duì)圖像處理帶寬、實(shí)時(shí)性及清晰度有了更高的要求。以往的基于ARM(Advanced RISC Machine)數(shù)字圖像處理系統(tǒng)[1-2]雖然能滿(mǎn)足復(fù)雜的圖像處理需求,但因?yàn)槠涮幚砥魅勇实停y以得到帶寬及實(shí)時(shí)性的保障。而基于DSP(Digital Signal Processing)的處理框架[3]能滿(mǎn)足高實(shí)時(shí)性的需求,但在開(kāi)發(fā)高復(fù)雜度的集成系統(tǒng)時(shí)周期長(zhǎng),且系統(tǒng)并行度低。在目標(biāo)識(shí)別、機(jī)器驗(yàn)布、流水線(xiàn)產(chǎn)品缺陷檢測(cè)等領(lǐng)域[4-6],圖像處理系統(tǒng)需要采集產(chǎn)品實(shí)時(shí)的高清畫(huà)面,并且同步處理視頻特征信息,圖像的有效信息通常只會(huì)存在1~2幀,這就要求系統(tǒng)要具有極高的實(shí)時(shí)性。此外對(duì)不同產(chǎn)品檢測(cè)時(shí)算法的選擇也不同,這便要求處理系統(tǒng)不僅需要具有高實(shí)時(shí)性的特點(diǎn),也要具有一定的靈活性。而ARM+FPGA(Field Programmable Gate Array)的異構(gòu)處理框架可以很好地兼顧兩者。FPGA在處理高帶寬視頻數(shù)據(jù)時(shí)能充分展現(xiàn)其強(qiáng)大的并行計(jì)算能力[7],對(duì)已經(jīng)相對(duì)成熟的圖像預(yù)處理算法可以用Verilog HDL硬件描述語(yǔ)言來(lái)實(shí)現(xiàn)硬件的加速。因此以FPGA來(lái)實(shí)現(xiàn)數(shù)字圖像處理算法,用ARM進(jìn)行控制的系統(tǒng)框架可以滿(mǎn)足對(duì)視頻處理有較高實(shí)時(shí)性需求的領(lǐng)域。
該文設(shè)計(jì)了一種基于Xilinx公司推出的ZYNQ系列ARM+FPGA異構(gòu)結(jié)構(gòu)作為處理核心的視頻數(shù)據(jù)實(shí)時(shí)采集、處理、控制、輸出的框架,可支持高清1 280×720分辨率下60幀的實(shí)時(shí)處理。結(jié)合了雙核ARMCortex-A9處理器強(qiáng)大的驅(qū)動(dòng)能力、高靈活性、可配置性與FPGA并行、高速、再編程的特點(diǎn),實(shí)現(xiàn)了軟硬均可重復(fù)編程的結(jié)構(gòu)。基于Verilog HDL硬件描述語(yǔ)言實(shí)現(xiàn)了圖像的均值模糊,中值濾波,高斯模糊、邊緣特征銳化、二值化、色彩空間轉(zhuǎn)化、sobel邊緣檢測(cè)、形態(tài)學(xué)腐蝕與膨脹等經(jīng)典圖像預(yù)處理算法,均采用流水處理的形式最大化處理速度來(lái)保障系統(tǒng)的實(shí)時(shí)性[8],并且可以通過(guò)上位機(jī)來(lái)實(shí)現(xiàn)不同預(yù)處理算法的組合與實(shí)時(shí)切換,所有算法均封裝為IP核來(lái)增加算法的靈活性與可移植性。主要由軟件處理系統(tǒng)PS(Processing System)端與硬件可編程邏輯PL(Programmable Logic)端的軟硬協(xié)同方式進(jìn)行工作。
系統(tǒng)采用ZYNQ系列的XC7Z020-CLG400芯片作為主控,OV5640攝像頭作為視頻數(shù)據(jù)源,另外還包括一臺(tái)支持HDMI高清接口的顯示器。搭建了視頻數(shù)據(jù)的輸入、輸出通路以及硬件算法模塊,整體結(jié)構(gòu)框圖如圖1所示。PL硬件部分負(fù)責(zé)完成視頻輸入、硬件算法設(shè)計(jì)、視頻輸出等部分。PS處理器部分實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的控制,包括硬件初始化流程,本地網(wǎng)絡(luò)初始化以及UDP網(wǎng)絡(luò)數(shù)據(jù)的接收與判斷,并且通過(guò)AXI4總線(xiàn)對(duì)圖像處理算法模塊進(jìn)行控制。PL與PS通過(guò)AXI(Advanced eXtensible Interface)協(xié)議進(jìn)行數(shù)據(jù)互通,實(shí)現(xiàn)軟硬件的協(xié)同工作。
從視頻數(shù)據(jù)采集并在系統(tǒng)中的傳輸處理直至顯示角度,可將系統(tǒng)按功能劃分為如下主要模塊:
(1)視頻數(shù)據(jù)采集模塊:系統(tǒng)通過(guò)500萬(wàn)像素CMOS攝像頭采集外界視頻數(shù)據(jù),輸入至PL硬件部分完成數(shù)據(jù)采集。攝像頭初始化由PL部分IIC時(shí)序控制器完成,在上電后2秒內(nèi)即可完成初始化,正常輸出視頻流數(shù)據(jù)。
(2)視頻輸入模塊:攝像頭RAW數(shù)據(jù)傳入后,通過(guò)Video in to AXI4StreamIP將數(shù)據(jù)格式轉(zhuǎn)化為 AXI-stream格式進(jìn)入demosaic模塊,對(duì)視頻色彩進(jìn)行插值還原,同時(shí)將單個(gè)像素?cái)?shù)據(jù)由RAW轉(zhuǎn)化為RGB888格式,最后再經(jīng)VDMA(Video Direct Memory Access)緩存至DDR3中,完成視頻輸入通路搭建。
(3)視頻輸出模塊:首先通過(guò)AXI4Stream to Video out將圖像數(shù)據(jù)按行從DDR存儲(chǔ)器中讀出,再經(jīng)過(guò)硬件算法處理模塊,對(duì)視頻數(shù)據(jù)進(jìn)行流水線(xiàn)式處理,實(shí)時(shí)輸出處理后的視頻數(shù)據(jù),在經(jīng)過(guò)HDMI編碼器,將標(biāo)準(zhǔn)VGA時(shí)序協(xié)議視頻編碼為HDMI差分信號(hào)進(jìn)行輸出。
系統(tǒng)的圖像源由OmniVision公司的OV5640攝像頭進(jìn)行采集,其擁有2 592×1 944(500萬(wàn)像素)的感光陣列,最大輸出能達(dá)到QSXVGA(2 592×1 944)下的15幀輸出,支持SCCB(Serial Camera Control Bus)協(xié)議控制。SCCB協(xié)議是一種向上兼容IIC協(xié)議的攝像頭寄存器配置協(xié)議,在主機(jī)以單字節(jié)發(fā)送數(shù)據(jù)至從機(jī)時(shí)完全兼容IIC協(xié)議。系統(tǒng)選擇了1 280×720(92萬(wàn)像素)下60 FPS格式的視頻流輸出。由硬件PL端完成IIC時(shí)序控制器對(duì)攝像頭內(nèi)部控制寄存器以單字節(jié)寫(xiě)的格式進(jìn)行初始化設(shè)置,表1列出了部分關(guān)鍵寄存器地址、功能及配置值。系統(tǒng)總共對(duì)OV5640內(nèi)部寄存器進(jìn)行253次SCCB讀寫(xiě)配置。
表1 OV5640部分關(guān)鍵寄存器配置
輸出圖像的水平寬度為0x0500為1 280,豎直高度為0x02d0為720,即設(shè)定為1 280×720的輸出分辨率。此時(shí)可計(jì)算出輸出像素的時(shí)鐘為1 650×750×60=74.25 MHz。
CMOS攝像頭是由覆蓋在硅襯底上的濾色片測(cè)量不同波長(zhǎng)的光強(qiáng)度來(lái)采集圖像數(shù)據(jù),且每種濾色片只能對(duì)應(yīng)一種顏色,即每個(gè)像素原始數(shù)據(jù)只包含一種顏色信息,要通過(guò)臨近像素的可用信息來(lái)還原出原像素的三種顏色分量,而人眼對(duì)綠色的敏感度最高,因此往往CFA(Color Filter Array)陣列由1/2的綠色分量與1/4的紅色與藍(lán)色分量組成,bayer陣列共有四種排列模式,如圖2所示。
從CMOS攝像頭輸出的RAW格式的數(shù)據(jù),通過(guò)Video in to AXI4Steam轉(zhuǎn)化為AXI-stream格式的數(shù)據(jù)進(jìn)入Sensor Demosaic電路,利用5×5矩陣通過(guò)色度方差來(lái)抑制在還原像素時(shí)產(chǎn)生的顏色混疊效應(yīng),提升傳感器輸出圖像色彩質(zhì)量。同時(shí)由于CMOS攝像頭OV5640數(shù)據(jù)輸出引腳只有10位,實(shí)際上攝像頭的輸出為每2個(gè)pix clock輸出一個(gè)RGB565格式的像素?cái)?shù)據(jù),Sensor Demosaic同時(shí)也對(duì)按字節(jié)接收到的RAW數(shù)據(jù)進(jìn)行格式重構(gòu),轉(zhuǎn)換RAW格式為24 bit的RGB888格式。Sensor Demosaic偏移地址0x28寄存器[1:0]的值對(duì)應(yīng)了全部四種bayer陣列格式??梢栽赑S端通過(guò)AXI總線(xiàn)來(lái)設(shè)定像素的陣列模式,色彩還原后仍然以AXI4-Stream格式輸出到DDR中進(jìn)行視頻緩存。
圖像卷積運(yùn)算作為圖像預(yù)處理中應(yīng)用最廣泛的方式,由FPGA實(shí)現(xiàn)流水線(xiàn)運(yùn)算時(shí),能達(dá)到最高的實(shí)時(shí)性[9],這是因?yàn)镕PGA在處理圖像進(jìn)行運(yùn)算時(shí)以行為單位,而CPU、GPU、DSP在處理時(shí)是以幀為單位。如圖3(左)所示,圖像的傳輸是從左上角的第一個(gè)像素開(kāi)始,向右輸出1整行1 280個(gè)像素點(diǎn)后,向下移動(dòng)一行開(kāi)始傳輸?shù)诙械南袼財(cái)?shù)據(jù),直至720行掃描結(jié)束后完成整幀的輸出。通過(guò)ShiftRegister緩存圖像的前兩行數(shù)據(jù),同時(shí)接受當(dāng)前數(shù)據(jù)作為第三行,就實(shí)現(xiàn)了三行數(shù)據(jù)的同時(shí)緩存。每個(gè)時(shí)鐘的上升沿到來(lái)時(shí),ShiftRegister中每個(gè)數(shù)據(jù)會(huì)向后移動(dòng)一位,移位寄存器將最后一個(gè)數(shù)據(jù)作為當(dāng)前的輸出。圖3(右)結(jié)構(gòu)中ROW1~3即為當(dāng)前的三行像素?cái)?shù)據(jù)輸出,通過(guò)對(duì)三行數(shù)據(jù)的一個(gè)緩存打拍處理,就可得到圖3(左)中原圖像左上角像素的3×3矩陣窗口,此時(shí)每經(jīng)過(guò)一個(gè)時(shí)鐘周期,就相當(dāng)于該3×3矩陣窗口在像素陣列中向右移動(dòng)一格,即實(shí)現(xiàn)步長(zhǎng)為1的圖像卷積運(yùn)算。
得到圖像的3×3像素矩陣后,通過(guò)與不同的卷積模板進(jìn)行運(yùn)算后再替換原像素點(diǎn)數(shù)據(jù),如此遍歷整幅圖像之后即可實(shí)現(xiàn)圖像的濾波操作。常見(jiàn)的處理有用9個(gè)數(shù)據(jù)平均值代替原像素點(diǎn)值的均值濾波;用9個(gè)值中的中值來(lái)代替原像素點(diǎn)的中值濾波。
以sobel邊緣檢測(cè)[10]為例,其原理是根據(jù)像素灰度值與其周?chē)碾x散差值來(lái)近似計(jì)算出該點(diǎn)不同方向上的梯度。根據(jù)式(1)求出原像素矩陣I與兩個(gè)3×3核的卷積結(jié)果水平積分因子Gx與豎直積分因子Gy,再通過(guò)式(2)求出近似梯度G,判斷G與邊界閾值S大小即可判斷出該點(diǎn)是否為邊緣點(diǎn)。
(1)
(2)
(3)
為驗(yàn)證硬件算法的實(shí)時(shí)性,通過(guò)Vivado與Modelsim進(jìn)行聯(lián)合仿真,編寫(xiě)測(cè)試文件模擬VGA時(shí)序驅(qū)動(dòng),每幀讀取不同的圖片,經(jīng)過(guò)硬件處理后再保存為新的圖片,共進(jìn)行三幀的仿真即處理三張不同的圖片,第四幀開(kāi)始時(shí)結(jié)束仿真。結(jié)果表明,所述設(shè)計(jì)能滿(mǎn)足視頻處理實(shí)時(shí)性的要求。
現(xiàn)代數(shù)字圖像處理的模型一般分為多級(jí)的形式,由視頻采集前端、圖像預(yù)處理以及圖像信息提取三個(gè)部分構(gòu)成。其中視頻采集前端往往是由采集端對(duì)原生圖像數(shù)據(jù)進(jìn)行最基本的處理,不會(huì)對(duì)原始圖像數(shù)據(jù)的信息特征產(chǎn)生較大影響。本系統(tǒng)中OV5640攝像頭內(nèi)部已集成了ISP圖像信號(hào)處理單元,其中包括AEC(自動(dòng)曝光控制)、AWB(自動(dòng)白平衡)、gamma矯正、BLC(黑電平矯正)等圖像補(bǔ)償功能。
該系統(tǒng)針對(duì)圖像預(yù)處理以及圖像信息提取給出了不同的方案,讀者可根據(jù)實(shí)際情況選擇或者增刪圖像處理模塊。系統(tǒng)硬件算法內(nèi)部結(jié)構(gòu)如圖4所示,其中圖像處理算法包括三種預(yù)處理濾波、邊緣檢測(cè)以及基于拉普拉斯算子的圖像邊緣增強(qiáng)、圖像形態(tài)學(xué)腐蝕與膨脹。均采用PL端硬件流水的形式完成圖像處理,封裝為通用視頻接口的IP核,保證了系統(tǒng)的可擴(kuò)展性與靈活性。視頻選擇器為封裝了AXI接口的數(shù)據(jù)接收自訂IP核,接收PS端的控制,可從輸入的視頻數(shù)據(jù)中選擇一路輸出。PS端通過(guò)對(duì)視頻選擇器的控制即可實(shí)時(shí)調(diào)整系統(tǒng)硬件算法的組合。
PS軟件部分[11]主要實(shí)現(xiàn)的內(nèi)容包括開(kāi)啟DDR視頻緩存通道[12],初始化硬件算法模塊,設(shè)置開(kāi)發(fā)板IP地址以及對(duì)UDP網(wǎng)絡(luò)數(shù)據(jù)的處理。SDK中處理的流程框圖如圖5所示。系統(tǒng)上電后,首先PS端將通過(guò)AXI總線(xiàn)對(duì)硬件算法模塊中的3個(gè)視頻選擇器進(jìn)行初始化配置,設(shè)置其默認(rèn)輸出原始視頻數(shù)據(jù)。隨后通過(guò)AXI總線(xiàn)向PL端的IIC時(shí)序控制器發(fā)送啟動(dòng)信號(hào),開(kāi)始對(duì)OV5640攝像頭內(nèi)部寄存器進(jìn)行配置,共發(fā)送253個(gè)SCCB協(xié)議數(shù)據(jù)。PL端寄存器配置數(shù)據(jù)完成后,硬件端通過(guò)ZYNQ中IRQ_F2P接口發(fā)送硬件的中斷信號(hào)。IRQ_F2P為ZYNQ提供的硬件中斷接口,硬件中斷號(hào)ID有[91:84],[68:61]共16個(gè),可以設(shè)置邊沿觸發(fā)或電平觸發(fā),本系統(tǒng)中使用上升邊沿觸發(fā)模式進(jìn)入中斷處理函數(shù)。通過(guò)硬件中斷功能軟件端可以在硬件信號(hào)觸發(fā)后最快地做出響應(yīng),即最優(yōu)先處理中斷處理函數(shù)中的程序部分。中斷處理函數(shù)中包括PS端對(duì)PL端VDMA進(jìn)行初始化配置。 視頻數(shù)據(jù)的DDR讀寫(xiě)地址為0x01100000,緩存三張圖像。則從0x01100000開(kāi)始的1 280×720×3個(gè)地址內(nèi)會(huì)按BGR順序存放第一幀的圖像數(shù)據(jù),從地址0x013A3000(0x01100000+1 280×720×3)開(kāi)始會(huì)存放第二幀數(shù)據(jù),以此類(lèi)推。
物聯(lián)網(wǎng)技術(shù)已被廣泛應(yīng)用在SOC領(lǐng)域,本系統(tǒng)基于RTL8211E千兆路由芯片[13-14],PS端部署lwip(light weight IP)輕量化IP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信。通過(guò)UDP協(xié)議完成與上位機(jī)的數(shù)據(jù)交互,實(shí)現(xiàn)對(duì)系統(tǒng)的遠(yuǎn)程控制。PS端不斷讀取上位機(jī)發(fā)送的UDP網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)網(wǎng)絡(luò)指令通過(guò)AXI總線(xiàn)協(xié)議對(duì)圖4中的3個(gè)視頻選擇器的輸出進(jìn)行切換,也可以改變二值化閾值與sobel邊緣檢測(cè)閾值。
在vivado平臺(tái)與modelsim仿真器完成系統(tǒng)的設(shè)計(jì)與仿真后,進(jìn)行工程的綜合、實(shí)現(xiàn)、生成比特流文件,導(dǎo)出hardware進(jìn)入SDK環(huán)境進(jìn)行ps端程序開(kāi)發(fā)。完成后創(chuàng)建FSBL(First Stage Boot Loader)工程對(duì)SDK中C程序進(jìn)行固化。
開(kāi)啟系統(tǒng)等待初始化流程結(jié)束后顯示器通過(guò)HDMI線(xiàn)接收來(lái)自系統(tǒng)的1 280×720分辨率下60幀視頻數(shù)據(jù),圖6為在正光源照射下的書(shū)本文字顯示結(jié)果,其中左上至右下依次為原圖(a)、高斯濾波(b)、圖像銳化(c)、sobel邊緣檢測(cè)(d)、中值濾波+sobel邊緣檢測(cè)(e)、中值濾波+sobel邊緣檢測(cè)+圖像腐蝕(f)的處理效果圖。
圖7為拍攝帶有浮雕表面二維碼圖像的處理結(jié)果,其中左上至右下依次為原圖(a)、圖像銳化(b)、sobel邊緣檢測(cè)(c)、高斯濾波+sobel邊緣檢測(cè)(d)、高斯濾波+sobel邊緣檢測(cè)+圖像腐蝕(e)、二值化顯示(f)的處理結(jié)果。
上述兩種不同物體的實(shí)時(shí)圖像采集結(jié)果很好地證明了所述系統(tǒng)功能完備性以及算法有效性,通過(guò)不同的算法組合最終均可獲得較好的圖像特征信息,并且能直觀地觀察到每個(gè)中間級(jí)算法處理的結(jié)果。
以硬件流水線(xiàn)實(shí)現(xiàn)圖像處理算法時(shí),其延時(shí)是可以計(jì)算出的[15]。該文所述設(shè)計(jì)中,處理算法使用的3×3緩存矩陣會(huì)使圖像同步時(shí)鐘延遲一行來(lái)進(jìn)行數(shù)據(jù)同步,1 280 p分辨率下則會(huì)延遲1 560個(gè)延時(shí),后續(xù)則在進(jìn)行不同流水線(xiàn)算法時(shí)處理所用的延時(shí)不同。表2中給出了該系統(tǒng)中通過(guò)硬件算法與在ZYNQ芯片中ARM端調(diào)用OpenCV庫(kù)[16]處理一幀圖像的延時(shí)對(duì)比。
表2 不同算法處理延遲時(shí)間
對(duì)比軟硬件在圖像處理速度上的差異,該系統(tǒng)在進(jìn)行各種圖像的處理時(shí)均有更快的速度,且實(shí)現(xiàn)的算法復(fù)雜度越高,則硬件流水處理的提升越大。
該文提出并實(shí)現(xiàn)了一種基于ZYNQ-7020芯片的視頻實(shí)時(shí)采集、處理、顯示平臺(tái),充分結(jié)合了ARM的靈活性與FPGA在圖像處理領(lǐng)域的高實(shí)時(shí)性。平臺(tái)集成了多種經(jīng)典的圖像預(yù)處理算法,延時(shí)低、易于替換與擴(kuò)展,為復(fù)雜圖像處理算法實(shí)現(xiàn)提供良好的基礎(chǔ)平臺(tái)。經(jīng)測(cè)試所述系統(tǒng)實(shí)時(shí)性高、性能穩(wěn)定,可應(yīng)用于動(dòng)態(tài)捕捉、缺陷檢測(cè)、視頻前端處理等領(lǐng)域。