楊美娜 肖世偉 馮祥虎 杜 軍
(哈爾濱師范大學(xué)計(jì)算機(jī)科學(xué)與信息工程學(xué)院,黑龍江 哈爾濱 150025)
隨著數(shù)字圖像處理領(lǐng)域的不斷發(fā)展,能夠高效優(yōu)秀處理數(shù)據(jù)的嵌入式圖像處理數(shù)據(jù)系統(tǒng)逐漸成為學(xué)界研究的熱潮。FPGA(Field Programmable GateArray,現(xiàn)場(chǎng)可編程邏輯門陣列)在圖像處理領(lǐng)域有著巨大優(yōu)勢(shì)。其內(nèi)部包括眾多的可配置邏輯模塊,可編程存儲(chǔ)資源,內(nèi)部總線和I/O模塊組成的專用電路。另一方面,它還具有優(yōu)秀的并行計(jì)算能力而且提供一定的帶寬資源。因此FPGA可以完美契合實(shí)時(shí)視頻處理需求,將視頻傳輸數(shù)據(jù)以數(shù)據(jù)流的形式傳遞與計(jì)算,并能根據(jù)圖像處理算法的變化重構(gòu)硬件系統(tǒng)。
邊緣檢測(cè)是進(jìn)行計(jì)算機(jī)以及人類視覺和模式識(shí)別與圖像處理技術(shù)的重要前提,它不僅可以減少圖像處理的數(shù)據(jù)量,同時(shí)能夠最大限度保留圖像中物體的形狀信息,所以它在目標(biāo)識(shí)別與跟蹤、計(jì)算機(jī)視覺領(lǐng)域廣泛應(yīng)用。它可以提取圖像中像素發(fā)生明顯變化的像素點(diǎn),即圖像中的邊緣。由于視頻分辨率的不斷提高,傳統(tǒng)嵌入式邊緣檢測(cè)系統(tǒng)中一直存在丟幀和實(shí)時(shí)性與功耗無(wú)法滿足要求的現(xiàn)象。
為了更好地提高視頻流數(shù)據(jù)接收的實(shí)時(shí)性,本系統(tǒng)在視頻傳輸方式上選擇了第三代USB(Universal Serial Bus)接口,即USB3.0總線接口。其傳輸速度是上一代USB2.0接口的十倍以上,最高可以達(dá)到640MB/s,同時(shí)傳輸方式由原來(lái)的半雙工通信方式改為全雙工通信方式。
考慮以上內(nèi)容,本文提出了一種基于FPGA和USB3.0的實(shí)時(shí)邊緣檢測(cè)系統(tǒng),硬件采用AC6102開發(fā)板與OV5640攝像頭模塊設(shè)計(jì)實(shí)現(xiàn),最終達(dá)到了實(shí)時(shí)邊緣檢測(cè)的預(yù)期效果,并且片上資源占用率小于1%。
系統(tǒng)由OV5640攝像頭、FPGA、ARM9(FX3)、USB3.0和PC(Personal Computer)機(jī)組成,由FPGA控制采集并實(shí)時(shí)處理攝像頭采集到的數(shù)據(jù),同時(shí)將處理好的數(shù)據(jù)通過(guò)GPIF II接口(通用可編程接口)發(fā)送給ARM處理器,ARM處理器則負(fù)責(zé)接收數(shù)據(jù)并將數(shù)據(jù)按照USB3.0的視頻傳輸協(xié)議(UVC)通過(guò)USB3.0接口發(fā)送至PC上位機(jī),在上位機(jī)安裝好驅(qū)動(dòng)以及Cypress官方提供的VirtualDub工具就能查看到系統(tǒng)處理后的視頻,系統(tǒng)整體框架如圖1所示。
圖1 硬件總體框架
系統(tǒng)對(duì)OV5640攝像頭初始化模塊配置包括:攝像頭初始化配置與IIC總線控制模塊;攝像頭接收模塊增設(shè)寄存器對(duì)數(shù)據(jù)流進(jìn)行時(shí)鐘控制。系統(tǒng)邏輯框圖如圖2所示。
圖2 系統(tǒng)邏輯框圖
(1)對(duì)攝像頭初始化的主要參數(shù)配置為:輸入與輸出時(shí)鐘為24MHz、幀率30fps、輸出圖像格式Y(jié)UV422、輸出接口DVP。由于OV5640支持圖像質(zhì)量控制:色飽和度調(diào)節(jié)、色調(diào)調(diào)節(jié)、自動(dòng)曝光控制和色彩飽和度調(diào)整等,因此在初始化配置時(shí)也需要配置這些功能對(duì)應(yīng)的寄存器參數(shù)。
(2)采用IIC總線的原因是接口直接在組件之上,因此IIC總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。不僅如此,IIC接口還具有簡(jiǎn)單性和有效性、代碼簡(jiǎn)潔等優(yōu)點(diǎn)。IIC接口有兩條總線線路,一條是串行數(shù)據(jù)線SDA,一條是串行時(shí)鐘線SCL。SCL為高電平時(shí),SDA數(shù)據(jù)需保持穩(wěn)定;SCL為低電平時(shí),SDA數(shù)據(jù)發(fā)生變化。在進(jìn)行數(shù)據(jù)傳輸時(shí)狀態(tài)機(jī)包括:寫請(qǐng)求、起始位請(qǐng)求、讀請(qǐng)求、停止位請(qǐng)求、應(yīng)答位請(qǐng)求和無(wú)應(yīng)答請(qǐng)求。
圖像的邊緣通常被我們認(rèn)為是圖像中灰度值或亮度發(fā)生明顯變化的局部區(qū)域,即圖像的亮度信息發(fā)生陡峭變化的區(qū)域。圖像邊緣可以劃分為三種形式:階梯型邊緣、斜坡型邊緣、線性邊緣。根據(jù)圖像的邊緣區(qū)域存在陡峭的灰度值或亮度變化這一特性,采取合適的數(shù)字方法,對(duì)目標(biāo)圖像進(jìn)行檢測(cè)運(yùn)算操作,能夠提取出目標(biāo)圖的邊界線。當(dāng)前的邊緣檢測(cè)方法大體可以分為三類:基于一階微分運(yùn)算的梯度邊緣檢測(cè)方法,基于二階微分運(yùn)算的邊緣檢測(cè)算子,以及運(yùn)算復(fù)雜但是效果理想的Canny算子。由于Sobel算子在實(shí)際應(yīng)用的場(chǎng)景中檢測(cè)效率高,并且其算法的運(yùn)算可由FPGA可編程宏功能模塊實(shí)現(xiàn),故選取Sobel算子作為邊緣檢測(cè)算法。
Sobel算子是一種基于一階微分運(yùn)算的邊緣檢測(cè)算法,是圖像邊緣檢測(cè)中最重要的算子之一。該算子包含兩組3×3的矩陣,分別為橫向及縱向,將之與當(dāng)前時(shí)鐘的目標(biāo)圖像的3×3矩陣進(jìn)行二維卷積操作,即可分別得出橫向及縱向的亮度差分近似值。其中Sobel算子的橫向算子與縱向算子如式(1)、(2)所示,其中A為目標(biāo)圖像3×3矩陣。
在得到縱向算子與橫向算子后,根據(jù)兩個(gè)方向的結(jié)果進(jìn)行處理,求得圖像的梯度向量,計(jì)算公式如式(3)所示。很多系統(tǒng)設(shè)計(jì)者為了計(jì)算方便,而采用取模的方式代替公式(3),但是本系統(tǒng)為了追求邊緣檢測(cè)算法結(jié)果的精確性,依舊采取原公式對(duì)橫向算子與縱向算子進(jìn)行計(jì)算。
對(duì)于視頻流處理,首先根據(jù)YUV422格式的數(shù)據(jù)存儲(chǔ)方式,設(shè)置計(jì)數(shù)器負(fù)責(zé)提取視頻流數(shù)據(jù)中的灰度數(shù)據(jù)(Y通道),其中剩余的色度分量會(huì)被覆蓋。其次將一維的視頻數(shù)據(jù)流轉(zhuǎn)變?yōu)橹辽倬彺鎯尚械母袷?,調(diào)用一個(gè)深度為3的Shift_RAM IP核對(duì)前兩行數(shù)據(jù)進(jìn)行緩存,使用Shift_RAM移位寄存器的優(yōu)點(diǎn)是因?yàn)榭梢赃M(jìn)行自動(dòng)移位換行,Shift_RAM的工作原理是移位存儲(chǔ),后一個(gè)數(shù)據(jù)進(jìn)入后將前一個(gè)數(shù)據(jù)往前推,當(dāng)填滿此行時(shí),跳到下一行再繼續(xù)移位存儲(chǔ),最終得到3×3陣列,其數(shù)據(jù)流原理如圖3所示。Shift_RAM可以實(shí)時(shí)存儲(chǔ)當(dāng)前時(shí)鐘的一幀圖像的3×3矩陣數(shù)據(jù),隨著時(shí)鐘的跳變,達(dá)到二維卷積中的滑窗操作。
圖3 Shift_RAM原理
得到當(dāng)前3×3陣列后將其與Sobel算子分別進(jìn)行乘加運(yùn)算,得到縱向算子與橫向算子,其中乘2運(yùn)算使用左移一位實(shí)現(xiàn)。將算子分別與自己相乘求和得到需要求平方根的數(shù)據(jù),在這里調(diào)用了altsqrt IP核進(jìn)行開平方的運(yùn)算。將得到的梯度值與閾值(設(shè)置為100)比較,大于閾值則判定為邊緣,小于閾值則相反。將輸出圖像數(shù)據(jù)值進(jìn)行翻轉(zhuǎn),即讓檢測(cè)到的圖像邊緣為白色,非邊緣顯示為黑色。
UVC(全稱USB video class)是USB規(guī)范協(xié)議中設(shè)備類規(guī)范的其中一種。根據(jù)UVC協(xié)議的視頻功能可以分為單元和終端兩種實(shí)體,它們分別有自己的描述符,每個(gè)單元的描述符包含了這個(gè)單元的所有信息,終端描述符則提供了所有終端的信息。單元描述符和端點(diǎn)描述符一起描述了端點(diǎn)和單元的組合方式。視頻的終端有輸入和輸出終端,在此基礎(chǔ)上擴(kuò)展功能的相機(jī)終端和媒體傳輸終端。視頻的單元包含選擇單元、處理單元和擴(kuò)展單元。對(duì)于一個(gè)USB視頻類設(shè)備,它們?cè)诮尤胫鳈C(jī)后主要通過(guò)描述符讓主機(jī)獲得各自的屬性和被確認(rèn)為標(biāo)準(zhǔn)的USB類設(shè)備,這些描述符是標(biāo)準(zhǔn)的USB描述符并在其子描述符中定義了USB設(shè)備的各種功能。從端口來(lái)看,主要可以分為視頻控制端口和視頻流端口兩個(gè)部分。
按照UVC協(xié)議的規(guī)定,在傳輸無(wú)壓縮的視頻數(shù)據(jù)時(shí)需要在前面加一個(gè)12B的包頭,主要是包含一些傳輸圖像的屬性信息,對(duì)于每一次圖像傳輸都要加上UVC的包頭。由于USB3.0圖像采集系統(tǒng)需要傳輸大量的視頻數(shù)據(jù),所以在傳輸時(shí)本系統(tǒng)采用USB3.0塊傳輸?shù)姆绞?,傳輸?shù)淖畲笸话l(fā)為16,數(shù)據(jù)包的最大字節(jié)數(shù)為1024,一次USB3.0傳輸?shù)臄?shù)據(jù)量最大為16KB。
這部分設(shè)計(jì)使用到了Cypress官方提供的GPIF II Designer、EZ USB Suite、Control Center工具。通過(guò)GPIFIIDesigner工具對(duì)GPIFII接口進(jìn)行配置端口與狀態(tài)機(jī)設(shè)計(jì),配置完成后需要生成相應(yīng)的.h頭文件以用來(lái)后面的固件程序開發(fā);通過(guò)EZ USB Suite工具進(jìn)行固件架構(gòu)設(shè)計(jì),其作用包括接收FPGA發(fā)來(lái)的數(shù)據(jù),并將數(shù)據(jù)按照UVC協(xié)議的通信方式傳給上位機(jī),固件總體架構(gòu)如圖4所示。
圖4 固件總體框架
該系統(tǒng)主程序main()函數(shù)部分主要用來(lái)對(duì)芯片時(shí)鐘、端口的初始化,在主程序中啟動(dòng)ThreadX RTOS后,為固件應(yīng)用創(chuàng)建兩個(gè)線程:一個(gè)是UVC應(yīng)用線程,主要用來(lái)接收?qǐng)D像數(shù)據(jù);另一個(gè)是UVC控制線程,主要用于響應(yīng)用戶的請(qǐng)求命令。在應(yīng)用線程入口函數(shù)中初始化UART端口,構(gòu)建DMA通道,配置Endpoint端口,在UVC控制線程入口函數(shù)中設(shè)置圖像的亮度、對(duì)比度等參數(shù)。
ARM9處理器完成外設(shè)間的配置后,DMA結(jié)構(gòu)直接管理傳輸,不需要CPU干預(yù),其數(shù)據(jù)傳輸寬帶不會(huì)受到CPU性能影響,提高了數(shù)據(jù)傳輸速度。傳輸過(guò)程中為圖像傳輸創(chuàng)建了兩個(gè)DMA通道,每個(gè)DMA通道都有兩個(gè)端口,分別為producer socket和consumer socket。在這里兩個(gè)DMA通道共用一個(gè)consumer socket,傳輸數(shù)據(jù)采用乒乓的方式,兩個(gè)DMA輪流接收來(lái)自FPGA的數(shù)據(jù)。其DMA結(jié)構(gòu)如圖5所示。
圖5 DMA通道結(jié)構(gòu)圖
根據(jù)系統(tǒng)結(jié)構(gòu)設(shè)計(jì),將編寫好的代碼編譯運(yùn)行和燒錄下載后,即可在上位機(jī)查看視頻結(jié)果。為了更直觀地查看結(jié)果,首先燒錄的是進(jìn)行Sobel邊緣檢測(cè)前的程序得到其原圖,其結(jié)果如圖6(a)所示。然后燒錄加入Sobel算子處理的程序,其結(jié)果如圖6(b)所示??梢钥闯?,設(shè)計(jì)的基于FPGA和USB3.0的實(shí)時(shí)Sobel邊緣檢測(cè)系統(tǒng)能夠達(dá)到預(yù)期的效果,可以很好地提取圖像邊緣信息,幀率達(dá)到30fps。并且片上資源占用率小于1%,為后續(xù)設(shè)計(jì)提供了足夠的硬件資源。
圖6 系統(tǒng)結(jié)果對(duì)比
本文對(duì)Sobel邊緣檢測(cè)進(jìn)行了深入研究與設(shè)計(jì),提出了一種軟件與硬件結(jié)合的架構(gòu)即USB3.0高速接口與FPGA流水線的架構(gòu)。通過(guò)實(shí)驗(yàn)所得的圖像可以看出,設(shè)計(jì)的系統(tǒng)達(dá)到了預(yù)期效果,實(shí)現(xiàn)了實(shí)時(shí)的邊緣檢測(cè)系統(tǒng)。不僅如此,系統(tǒng)占用資源極少,為后續(xù)的圖像處理操作留下了大量的系統(tǒng)空間。基于以上內(nèi)容,接下來(lái)將繼續(xù)使用該架構(gòu)實(shí)現(xiàn)更高層次的實(shí)時(shí)數(shù)字圖像處理系統(tǒng)。