劉志方
(廣州南洋理工職業(yè)學(xué)院,廣州 從化 510900)
現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)。 系統(tǒng)中每一單元模塊都會由相連接的布線通道實(shí)現(xiàn)互通,可以在編程現(xiàn)場依照用戶實(shí)際需求靈活配置。 FPGA 在實(shí)時圖像邊緣提取系統(tǒng)設(shè)計(jì)中的應(yīng)用能夠提高數(shù)據(jù)提取的質(zhì)量,并且還具有實(shí)時性特點(diǎn),資源的占有率與傳統(tǒng)的提取系統(tǒng)相比可以得到有效縮減[1]。
基于FPGA 的內(nèi)部陣列特點(diǎn),設(shè)計(jì)時選用模塊化的方式進(jìn)行整體架構(gòu)的設(shè)計(jì)最為合理,這樣不僅能夠降低系統(tǒng)結(jié)構(gòu)布設(shè)的復(fù)雜性,還可以在后期系統(tǒng)運(yùn)營出現(xiàn)問題時通過分布調(diào)試與維修的方式,保證系統(tǒng)的運(yùn)行質(zhì)量,減少不安全因素,便于維修人員的作業(yè),同時也能夠根據(jù)使用需求的變更進(jìn)行子模塊功能的改變。 在進(jìn)行功能構(gòu)思時,研究人員充分堅(jiān)持了實(shí)用主義的原則,讓系統(tǒng)不僅具備了圖像邊緣提取功能,還可以對實(shí)時圖像的邊緣進(jìn)行檢測與顯示,主要通過三大板塊對前端的按鍵、攝像頭、顯示器進(jìn)行控制。 首先,當(dāng)按鍵輸入指令以后,系統(tǒng)會進(jìn)行按鍵信息的檢測,并完成攝像頭配置模塊的轉(zhuǎn)換,利用SCCB 總線對攝像頭中的寄存器進(jìn)行控制,將報文格式轉(zhuǎn)化成可以支撐后續(xù)模塊處理的標(biāo)準(zhǔn)。 其次,圖像采集以及輸入模塊會對相應(yīng)的數(shù)據(jù)進(jìn)行采集以及預(yù)處理,通過RGB 灰度轉(zhuǎn)化、高斯濾波、二值化等模塊的操作,經(jīng)過Sobel 檢測,輸出數(shù)據(jù)。 最后,利用鎖相環(huán)分頻對FPGA 的時鐘進(jìn)行分頻操作,通過VGA 配置與驅(qū)動模塊,將所有的提取與處理完畢的信息,完整地展現(xiàn)在顯示器之中。 上述架構(gòu)的設(shè)定可以進(jìn)一步提高攝像頭時鐘頻率的穩(wěn)定性,減少在識別以及提取過程中所出現(xiàn)的干擾。
2.2.1 RGB 灰度轉(zhuǎn)化模塊
在設(shè)計(jì)1RGB 灰度轉(zhuǎn)化模塊時,應(yīng)首先明確灰度化原理。 灰度化指轉(zhuǎn)化彩色圖像為灰度化圖像。 事實(shí)上,彩色圖像取決于3 個像素通道,即R,G 和B,而普通圖像的組成方式則以8 bit 數(shù)據(jù)為主,所以可從每一分量中提取256 個值,這意味著每個像素點(diǎn)具備256×256×256 種不同的組合顏色。 而針對灰度化圖像而言,每個像素通道像素點(diǎn)處于256 種變化范圍內(nèi),這會使計(jì)算量大幅減少。 因此,利用灰度化圖像可使邊緣檢測的速度加快。 而目前有兩種常用的灰度化,其一是在求解像素點(diǎn)三分量RGB 平均值的基礎(chǔ)上對其予以賦值;其二是結(jié)合YUV 色彩空間實(shí)行灰度化,主要在于以YCbCr 的格式轉(zhuǎn)化RGB 圖像,其中,Y,Cb,Cr 分別表示亮度、藍(lán)像素分量以及紅像素分量,只要在提取Y 的基礎(chǔ)上,便可使圖像轉(zhuǎn)換為相應(yīng)的灰度化圖像。
傳統(tǒng)的實(shí)時圖像邊緣提取系統(tǒng)所要處理的數(shù)據(jù)信息量較大,因此受干擾的因素也較多,而通過將RGB 值轉(zhuǎn)化成灰度值的方式,能夠使得算法變得更加簡單,將系統(tǒng)所有的處理重心都放在實(shí)時圖像的邊緣信號中,在運(yùn)行時需要將2 個字節(jié)像素點(diǎn)壓縮成1個字節(jié)灰度像素,即可得到相應(yīng)的灰度值,完成由彩色系統(tǒng)圖像向灰色圖像的轉(zhuǎn)換,其計(jì)算公式可以參考如下內(nèi)容:
公式中Gray 代表了灰度值;R 為彩色圖像中的紅色值;G 為彩色圖像中的綠色值;B 為彩色通道中的藍(lán)色值[2]。 在系統(tǒng)運(yùn)行的過程中必須保證所有數(shù)據(jù)通道的位寬相等才能夠進(jìn)行加減操作,而在設(shè)計(jì)時將傳入的數(shù)據(jù)已設(shè)定為了RGB565,因此在轉(zhuǎn)換格式時,需要將其變?yōu)閭蜶GB888 格式,這樣每一個通道的高位都會被保留下來,通道中的低位會取得原數(shù)據(jù)以后再進(jìn)行填充,此處也可以使用全零進(jìn)行填充,所使用的代碼可參考如下內(nèi)容:
assign red= {din[15:11],din[13:11]}
assign green= {din[10:5],din[6:5]}
assign blue= {din[4:0],din[2:0]}
考慮到在計(jì)算的過程中系統(tǒng)模塊會涉及多個小數(shù)的運(yùn)算,較為復(fù)雜煩瑣,因此對其進(jìn)行了簡化處理,基于FPGA 使用邏輯綜合運(yùn)算和除法器會更加消耗資源的特點(diǎn),在運(yùn)算時則將小數(shù)部分全部乘以256,得出相應(yīng)的整值后再除以256 即可完成轉(zhuǎn)換,有效地節(jié)約了系統(tǒng)資源。
2.2.2 高斯濾波模塊
在采集和傳輸圖像時,噪聲會影響圖片質(zhì)量,而基于濾波模塊可對這一現(xiàn)象予以有效解決。 濾波在于應(yīng)用平滑方式計(jì)算圖像信息中心冗余的信息,使其修正至平滑狀態(tài)。 例如,中值濾波主要在排序矩陣像素框的基礎(chǔ)上提取中間值,以此作為最終像素值,進(jìn)行濾波的方式。 這一方法通過排序?yàn)V波,獲得相對平滑的圖像,實(shí)現(xiàn)降噪處理。 中值濾波原理簡單,較易實(shí)現(xiàn),但其關(guān)鍵在于明確排序方法,排序方法的選擇會對濾波計(jì)算速度造成影響。 以往使用的排序方法包括冒泡、選擇、插入等方式,其中,冒泡排序是在比對兩數(shù)大小后將大數(shù)放在前方,以此類推向前進(jìn)行比較。 比如,系統(tǒng)中具有9 個像素點(diǎn),在對比中需要實(shí)施9+8+7+6+…+1 共25 次;選擇排序是先在序列中找出數(shù)值最大的數(shù),將其放在后方,找出數(shù)值最小的數(shù),將其放在前方,待完成上述兩步后,繼續(xù)以此操作處理剩余的數(shù),其同樣需要進(jìn)行25 次對比;插入排序則是在選擇序列中的一個數(shù),將其放在其他兩數(shù)中間,并保證一側(cè)數(shù)大于其自身,另一側(cè)數(shù)小于其自身,以此繼續(xù)排列,這種排序方法相較于前兩種較為復(fù)雜,所以并不適用。 因此,在設(shè)計(jì)高斯濾波模塊時,應(yīng)首先明確其原理。
(1)模塊運(yùn)作原理。
圖像信息的提取主要是通過攝像頭,其視頻中會產(chǎn)生相應(yīng)的噪點(diǎn)信號,噪點(diǎn)信號會導(dǎo)致區(qū)域像素與周圍像素之間顯示效果出現(xiàn)落差,從而影響到最終的邊緣數(shù)據(jù)提取質(zhì)量。 為能夠解決這一問題,則要利用高斯濾波,將其濾除,在實(shí)際運(yùn)作時圖像可以利用平面直角坐標(biāo)系進(jìn)行分解,通過橫縱坐標(biāo)以及行、列來表示噪點(diǎn)信號的具體位置。 例如:選取圖像中3×3 的矩陣,那么高斯濾波的處理公式則為:
公式中B 表示處理完畢后的矩陣;A 表示在處理之前的圖像3×3 矩陣,將A 代入其中即可獲得處理結(jié)果B(2,2)= 111。
(2)模塊具體實(shí)現(xiàn)。
在系統(tǒng)運(yùn)行時為能夠得到B 結(jié)果,需要將每一個像素點(diǎn)周圍都設(shè)定8 個像素點(diǎn)并將其圍繞才可實(shí)現(xiàn),為避免出現(xiàn)邊界像素點(diǎn)不足的情況,可以通過移位寄存器級聯(lián)的方式來解決。 以3×3 的矩陣大小為例,其移位寄存器的級聯(lián)數(shù)目同樣也是3,當(dāng)前一個寄存器輸出信號以后,下一個移位寄存器便會接收輸入,當(dāng)數(shù)據(jù)1 傳輸至第3 個寄存器的邊界時,那么數(shù)據(jù)4 和7 也會將數(shù)據(jù)傳輸?shù)街皟蓚€移位寄存器的邊界處,同樣2,5,8 數(shù)據(jù)也會在下一個時鐘周期到達(dá)邊界處。在設(shè)計(jì)的過程中還需要注意,根據(jù)所要運(yùn)算的列元素,進(jìn)行移位寄存器的輸出延時緩存,例如:所運(yùn)算的是3 個列元素,則要做兩次的延時緩存。
2.2.3 二值化處理模塊
設(shè)置二值化處理模塊的目的便在于需要對系統(tǒng)中所生成的閾值進(jìn)行處理,通過對閾值的調(diào)整可以保證系統(tǒng)在不同的光源之下,也可以達(dá)成自適應(yīng)的目標(biāo)。在運(yùn)作時首先要輸入模塊像素信號,其要大于閾值,則設(shè)置為1,如果比閾值小則要設(shè)置為0,同時需要將灰度信號8 bit 轉(zhuǎn)化成黑白信號1 bit,這樣可以最大限度地減少在邊緣數(shù)據(jù)計(jì)算過程中所占用的資源。
2.2.4 Sobel 邊緣檢測模塊
(1)Sobel 算子介紹。
進(jìn)入21 世紀(jì),信息技術(shù)得到了快速發(fā)展,在圖像邊緣檢測領(lǐng)域已經(jīng)延伸和發(fā)展出了多種梯度算子,針對不同的系統(tǒng)應(yīng)選擇相應(yīng)的算子,從而提高其適應(yīng)性。 Roberts 算子在最早提出的時候矩陣結(jié)構(gòu)較為簡單,主要由2×2 矩陣結(jié)構(gòu)構(gòu)成,但也存在一些問題,主要是由于噪聲對其影響較大。 而后又發(fā)展出一種更高級的一階邊緣檢測算子,像當(dāng)前在邊緣檢測中常見的Prewitt,Kirsch,Sobel 算子等,其中Prewitt 和Sobel算子均采用了3×3 的矩陣形式,但二者不同的是Sobel 算子在系數(shù)之中又加入了權(quán)值,這樣可以減少噪聲對其的干擾性。 而在這之后所提出的Canny 算子,雖然在圖像邊緣處理的精準(zhǔn)度方面更高,但是由于算法較為復(fù)雜,因此對資源的消耗量較大。 經(jīng)綜合考慮,最終將邊緣檢測模塊選定為Sobel 算子。
(2)Sobel 原理實(shí)現(xiàn)。
邊緣提取主要處理、呈現(xiàn)圖像的邊緣信息,而亮度變化較大是其關(guān)鍵特點(diǎn)。 所以,針對圖像邊緣像素點(diǎn)通常以梯度大小予以衡量。 Sobel 算子為梯度加權(quán)計(jì)算并對比閾值所得,其主要在計(jì)算圖像亮度函數(shù)中應(yīng)用,作為計(jì)算中的梯度值。 Sobel 算子基于卷積因子提取圖像邊緣,但這一卷積因子通常包括兩個卷積方向,一為Y 軸,二為X 軸,算子在這兩個卷積方向上具有較好的水平、豎直邊緣特性。 不過在科技快速發(fā)展的背景下,現(xiàn)已提出四方向卷積因子,甚至八方向卷積因子,而愈發(fā)精確的卷積因子,其計(jì)算量也會顯著加大。
在圖像檢測時,Sobel 算子可以列為一階差分算子,其主要由兩個3×3 的結(jié)構(gòu)組成,在這里可以分別將其表示為Gx和Gy,方便后期像素點(diǎn)梯度幅值的表示,以坐標(biāo)系的橫縱方向所提取的像素點(diǎn),可以將檢測表達(dá)公式總結(jié)為如下內(nèi)容:
公式中,A 表示在上一個模塊中所輸出的矩陣,在整理之后,最終的公式可以表示為:
然后,將G 現(xiàn)矩陣值與給定閾值之間進(jìn)行比較,從而判定出所檢測的像素點(diǎn)是否在邊緣處。 在系統(tǒng)實(shí)際運(yùn)行的過程中,由于Sobel 檢測模塊也需要處理矩陣數(shù)據(jù),因此可以沿用高斯濾波模塊中的運(yùn)作原理,通過3 個移位寄存器進(jìn)行矩陣列的操作,同時進(jìn)行一幀圖像的邊界值處置。
2.2.5 VGA 配置模塊
VGA 系統(tǒng)在對接顯示器時,需要通過接口將信號轉(zhuǎn)換成顯示器可以識別顯示的數(shù)據(jù)。 而系統(tǒng)所銜接的攝像頭在經(jīng)過相關(guān)數(shù)據(jù)的收集與處理之后,無法直接輸出以VGA 時序?yàn)闃?biāo)準(zhǔn)的數(shù)據(jù)信息,因此本文則提出了利用雙RAM 來解決這一問題,通過存儲和緩沖可以保證存儲時模塊輸入與VGA 輸出之間的讀寫速率相匹配,并且不會出現(xiàn)使用一個RAM 所出現(xiàn)的讀空與溢出等風(fēng)險,通過兩個雙RAM 乒乓操作,可以充分滿足系統(tǒng)運(yùn)作需求。
在運(yùn)行時,如果RAM1 沒有將信息數(shù)據(jù)讀取完畢,但RAM0 已經(jīng)寫完,那么新的數(shù)據(jù)信息則可以舍棄不寫,直到RAM1 讀完,將兩個RAM 進(jìn)行讀寫的對調(diào),再寫入一幅新的數(shù)據(jù)信息。 通過該種設(shè)計(jì)思路,即便是系統(tǒng)在提取的過程中出現(xiàn)丟幀的情況,可以通過另一RAM 的處理,從而在顯示器中完整顯示出相關(guān)圖像信息。
但在實(shí)際處理的過程中,即便系統(tǒng)處置的是一幅圖像信息,在通過二值化壓縮以后,也需要占用307.2 Kb 的空間,而顯然設(shè)計(jì)系統(tǒng)時所選用的MP802 板RAM 資源無法滿足實(shí)際的運(yùn)作需求,因此需要通過對圖像信息的實(shí)時處理來解決這一問題。如果是在外接沒有格外存儲設(shè)備的情況之下,由于系統(tǒng)所收集的信號即為視頻信號,因此可以對其中的圖像進(jìn)行實(shí)時處理,并利用移動攝像頭的方式,從而達(dá)到所檢測提取圖像輸出的目的。
硬件的選擇不僅要滿足軟件的實(shí)際作業(yè)需求,還要充分考慮其經(jīng)濟(jì)性,和投入運(yùn)營之后是否便于相關(guān)人員的故障檢測以及維修。 因此,通過綜合性的考量,最終將系統(tǒng)的圖像處理開發(fā)板選擇為MP802 型號,板載為XC7K70T-2FBG676C,與同一系列的其他產(chǎn)品相比具有較強(qiáng)的實(shí)用性,可以滿足FPGA 實(shí)時圖像邊緣提取硬件的實(shí)際運(yùn)行需求。 攝像頭則選擇了OV 公司所生產(chǎn)的7670 型號,其不僅具備體積較小便于安裝的特點(diǎn),還能夠減少工作電壓,符合經(jīng)濟(jì)性的要求[3]。
在對系統(tǒng)進(jìn)行測試時,重點(diǎn)測試內(nèi)容有兩點(diǎn):一是,針對系統(tǒng)在不同圖像中所呈現(xiàn)的邊緣提取信息質(zhì)量進(jìn)行檢測,這樣可以保證即便是攝像頭采集到了不同的圖像信息邊緣數(shù)據(jù),也可以經(jīng)過系統(tǒng)模塊的處理,最終滿足實(shí)際的應(yīng)用需求。 在測試時可以通過文字、字母、圖形、色彩、圖案進(jìn)行綜合鑒別,利用肉眼便可觀測出不同圖像邊界的識別效果。 二是,需要確認(rèn)系統(tǒng)在不同光源環(huán)境之中的適應(yīng)能力,通過閾值的調(diào)節(jié)來對比系統(tǒng)在加入閾值之后所呈現(xiàn)出的效果,通過手動調(diào)整,便可以提高系統(tǒng)的光源適應(yīng)性。 因此可以斷定此種系統(tǒng)設(shè)計(jì)方法具有較強(qiáng)的可行性,能夠精準(zhǔn)識別出圖像邊緣的信息數(shù)據(jù),并進(jìn)行提取顯示。
將系統(tǒng)應(yīng)用到實(shí)際的作業(yè)過程之中,通過對各類重要測試內(nèi)容的鑒別,發(fā)現(xiàn)基于FPGA 的實(shí)時圖像邊緣提取系統(tǒng),僅利用少數(shù)的系統(tǒng)資源,就可以完成對圖像的實(shí)時檢測,其資源的利用率為0.67% ~23.70%,可以將其應(yīng)用到后期的大型EPGA 圖像處理工程中,是相關(guān)作業(yè)不同類型圖像和不同光源環(huán)境的理想應(yīng)用程序。
綜上所述,該系統(tǒng)的設(shè)計(jì)能夠有效提升實(shí)時圖像邊緣數(shù)據(jù)的提取質(zhì)量,相比傳統(tǒng)的實(shí)時圖像邊緣系統(tǒng),利用FPGA 技術(shù),可以通過移位寄存器級聯(lián),從而實(shí)現(xiàn)對矩陣邊緣的填充,在相關(guān)模塊之中所使用的灰度圖像二值化處理技術(shù),能夠在導(dǎo)入可調(diào)整閾值的同時,降低像素點(diǎn)數(shù)據(jù)的位寬,因此也可以有效縮減FPGA 資源,并且通過雙RAM 乒乓的輸出也提升了讀寫速率的匹配效率。