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