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