楊 碩,原彤彤,童志波
(中北大學 信息與通信工程學院,太原030051)
(中北大學 電子測試技術國防科技重點實驗室,太原030051)
(中北大學 信息探測與處理山西省重點實驗室,太原 030051)
在設計基于FPGA的數字圖像處理系統時,有兩種主要的實現方式: 一種是傳統的基于硬件描述語言(HDL)的開發方法,另一種是基于圖形化設計工具的實現方法[1-3].傳統的開發方式采用層次化和模塊化的設計思路,通過編寫HDL代碼和調用IP核來描述處理過程.這種設計方法需要編寫大量代碼,并且工作量很大[4].調試時間長,重復勞動嚴重,對算法處理模塊仿真的結果也只能是時鐘沿和海量的數字信息組成的時序,若要得到直觀的圖像處理結果,還需要進行預存數據、虛擬數據傳輸接口、數據結果分析等后續工作,導致系統開發周期大大延長.而圖形化編程方式的出現為FPGA設計提供了新的設計思路,這種方法使用人們熟悉的圖標表達設計內容,使用連線來表示子系統之間的互動關系,開發者可以通過直觀的可視化操作完成處理算法的搭建[5].相比傳統的開發方式,圖形化編程簡單直接,易于理解,由計算機負責對代碼的編寫,避免了人為錯誤的引入,大大提升了開發效率.
常用的圖形化編程工具包括NI公司的LabView、若貝公司的Robei、Altera公司的Dsp Builder和Xinlinx公司的System Generator等[6,7].基于這些開發工具,國內外對FPGA的圖形化編程有過很多較為深入的研究.比如: 高靜等通過LabVIEW圖形化編程實現了增量式數字PID控制算法[8];馬濤,陳娟等利用系統工具DSP Builder給出了數字下變頻器的FPGA設計方法[9].郭俊位等針對USDR軟件無線平臺基于simulink環境設計了一套FPGA圖形化設計工具為算法工程師掃除了硬件編程的障礙[10].本文基于System Generator工具,Sobel算子作為圖像邊緣檢測中最重要的算子之一,在機器學習、數字媒體、計算機視覺等信息科技領域起著舉足輕重的作用[11,12],以Sobel邊緣檢測算法為例,在Matlab/Simulink平臺搭建了數字圖像處理系統,完成了該算法的圖形化建模及在線仿真并對系統進行了功能驗證和測試結果分析.
System Generator是Xinlinx公司推出的一款基于Matlab/simulink平臺的圖形化設計工具,目的是為了簡化傳統的FPGA開發流程.它為硬件設計提供了合適的數字圖像處理建模環境,可以使得基于FPGA的數字信號處理系統硬件的設計開發變的簡單快捷[13-15].System Generator可以看作是Matlab環境下的硬件設計工具包,內部提供了豐富的子模塊,用戶只需通過拖拽和連接子模塊就可以搭建數字系統,最后把模型化的設計結果通過編譯器直接轉化為硬件描述語言,再通過ISE軟件綜合、布線等過程即可完成算法模塊的硬件設計.這樣的設計方法已在許多大型復雜的系統中體現出巨大的優勢和強大的潛能,借助于這個高層次的圖形化設計工具,我們可以對數字信號的處理算法進行系統建模并將圖形化的設計模型直接編譯為硬件設計結果,從而成功連接了高層次的算法設計與硬件描述工具.
圖像邊緣檢測是計算機視覺和數字圖像處理研究領域的基礎概念,邊緣指的是數字圖像矩陣中灰度急劇變化的邊界.它是圖像分析和理解的重要基礎,如區分目標與背景,分析目標紋理特征和形狀特征[16].研究者們根據圖像邊緣處灰度值突變的特點提出了多種以一階導數為基礎的梯度算子.
索貝爾算子(Sobel operator)是邊緣檢測中常用的算子之一,分別為橫向和縱向,它們的模版分別為:

這種離散型的差分算子,對圖像的每個像素以檢測像素點為中心,考察其3×3領域內像素灰度的加權差,根據該點是否處于極值狀態進行邊緣檢測,其本質上是一種梯度的幅度,通過選取適當的門限,當大于門限時判定為邊緣點[17].

其中,Gx表示基于橫向算子的濾波結果,Gy表示基于縱向算子的濾波結果.A表示由檢測到的元素周圍的3×3陣列中的所有元素組成的矩陣[18].
設A矩陣中處于3×3矩陣正中間的元素為g(x,y),則A可以表示為:

將式(3)分別帶入(1),(2)得:

圖像的每一個像素的梯度的大小可由以下公式計算.

如果梯度值G或者G2大于某一閾值則認為該點屬于邊緣點.
基于System Generator的Sobel邊緣檢測算法仿真系統模型如圖1所示.

圖1 Sobel邊緣檢測算法仿真系統模型
數據源模塊(Image_In_1D)是圖像數據的輸入模塊,通過調用Simulink中Souce目錄下的From Workspace模塊并加載Matlab程序來實現,其功能是讀入圖像并將二維矩陣數據轉化一維數據作為系統的數據源輸入.
圖像顯示模塊(Image_out)是圖像數據的輸出模塊,通過調用Simulink中Souce目錄下的To Workspace模塊并加載Matlab程序來實現,用于把算法模塊輸出的一維數據流重新組合為二維矩陣并顯示為圖像.
Sobel邊緣檢測模塊的處理模型如圖2: 圖像數據經過三行緩存后同時通過X方向和Y方向兩個濾波器,在這兩個濾波器中完成卷積運算,對二者的運算結果平方后求和,再經過閾值判斷變為二值圖像.

圖2 Sobel邊緣檢測模塊的處理模型
圖2中3LineBuffer子模塊的功能是緩存三行圖像數據并同時輸出,這個過程通過調用雙口RAM資源來實現,將一塊RAM資源分成大小相等的兩部分,低地址部分實現一行緩存,其輸出經過高地址部分實現第二行緩存,如圖3.
XSobelFilter子系統如圖4,該子模塊實現的功能是計算式(4),其中,濾波系統的2倍運算是通過移位來實現的,系統中T,T1,T2的作用是屏蔽掉懸空引腳的報錯信息.YSobelFilter設計結構與之類似.
其中,兩個濾波系統的2倍運算是通過移位來實現的.閾值判決子系統如圖5,該子模塊實現的功能是根據預設的閾值將圖像二值化.
對系統進行在線仿真得到原圖和邊緣檢測后的處理效果圖,由圖6與圖7,可見系統較好地完成了邊緣檢測的任務.
將System Generator的設計結果編譯為硬件描述語言并在ISE軟件上建立工程,進行綜合得到RTL級視圖.對比圖8的RTL級視圖和圖2的Sobel邊緣檢測模塊的處理模型,可以發現基于Syetem Generator的設計結果與ISE軟件的綜合結果在結構上是完全一樣的,從而進一步證明了設計的正確性.
基于Matlab環境仿真Sobel邊緣檢測算法可知:對一副300×246的圖像執行一次Sobel邊緣檢測大約耗時0.007 206 s.而使用該算法模塊完成一次運算需要約74 100(300×246+300)個時鐘周期,如果以50 M的時鐘作為驅動,耗時約0.001 482 s,即每秒可處理約674幀圖片,處理速度提高了約7倍.
以Spartan6系列csg324型號FPGA內部擁有的資源情況為基準,考察該設計資源消耗情況可以發現: 該算法模塊消耗較少的資源,這為后續實現更為復雜的算法留下了很大的空間.

圖3 三線緩存模塊

圖4 X方向Sobel濾波計算模塊

圖5 閾值判斷模塊
本文在Matlab/Simulink平臺上實現了基于System Generator的Sobel邊緣檢測算法的圖形化建模.實現了對該算法的在線仿真并將設計結果編譯為硬件描述語言(HDL).相比傳統的基于HDL語言的設計方案,在實現同樣功能的前提下,本設計極大的縮短了開發周期并支持在線查看圖像處理結果.文章最后還對算法模塊的設計結果進行了分析,討論了圖像的直觀處理結果、RTL級視圖、實際消耗資源以及運行速度等情況.

圖6 處理前圖像

圖7 處理后圖像

圖8 RTL級視圖

表1 資源使用情況表