葉惠嬌 冉 全 成 果
(武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 湖北 武漢 430205)
圖像作為人類(lèi)感知世界的視覺(jué)基礎(chǔ),是獲取、表達(dá)及傳遞信息的重要媒介。其中,邊緣信息是圖像的基本特征之一,在實(shí)現(xiàn)特征提取、機(jī)器視覺(jué)等過(guò)程中起著關(guān)鍵作用[1]。
隨著圖像數(shù)據(jù)規(guī)模日漸龐大,其處理算法日益復(fù)雜,傳統(tǒng)通用的軟件處理平臺(tái)逐漸滿(mǎn)足不了處理速度及實(shí)時(shí)性的需求。FPGA具有流水線(xiàn)結(jié)構(gòu),在并行處理數(shù)據(jù)方面有一定的優(yōu)勢(shì),可極大程度提高數(shù)字圖像處理的速度[2]。本文設(shè)計(jì)一種基于FPGA的圖像處理系統(tǒng),集圖像數(shù)據(jù)采集、存儲(chǔ)、算法處理、顯示等功能于一體。同時(shí),針對(duì)傳統(tǒng)Sobel算法需要人為設(shè)置閾值所帶來(lái)的缺陷,引入中值濾波的思想來(lái)生成自適應(yīng)動(dòng)態(tài)閾值,更加準(zhǔn)確地提取圖像邊緣信息[3]。
硬件平臺(tái)可分為圖像采集模塊、存儲(chǔ)模塊、處理模塊及顯示模塊。選用Altera公司的Cyclone IV 系列FPGA芯片為控制核心,協(xié)調(diào)控制SD卡和LCD顯示屏的驅(qū)動(dòng)、SDRAM存儲(chǔ)器的數(shù)據(jù)轉(zhuǎn)存,并且實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的算法處理。系統(tǒng)總體框架如圖1所示。
圖1 系統(tǒng)總體框架
(1) 數(shù)據(jù)獲取模塊 通過(guò)計(jì)算機(jī)將圖像數(shù)據(jù)存儲(chǔ)到片外SD卡后,將SD卡插入硬件平臺(tái)的卡槽中。在SPI模式下,SD卡采用發(fā)送應(yīng)答機(jī)制,通過(guò)時(shí)鐘、片選、數(shù)據(jù)輸出、數(shù)據(jù)輸入4條總線(xiàn)以串行方式與FPGA進(jìn)行數(shù)據(jù)傳輸,其時(shí)鐘控制頻率為25 MHz[4]。
SD控制器由初始化和讀寫(xiě)操作組成,表1是系統(tǒng)需要用到的SD卡控制命令。FPGA向SD卡發(fā)送CMD0命令以進(jìn)入初始狀態(tài),發(fā)送CMD8、CMD55和ACMD41命令并返回?zé)o誤后確定SD卡的協(xié)議,完成SD卡的初始化;發(fā)送CMD17命令,以扇區(qū)為單位連續(xù)讀取SD卡中的數(shù)據(jù),直至讀到結(jié)束字節(jié)0xFE[4]。
表1 SD卡常見(jiàn)命令
(2) 存儲(chǔ)模塊 存儲(chǔ)模塊由RFIFO、WFIFO和片外芯片SDRAM組成。FIFO是一種順序讀寫(xiě)的數(shù)據(jù)緩存器,由于沒(méi)有外部讀寫(xiě)地址線(xiàn),所以使用簡(jiǎn)單,同時(shí)能解決不同時(shí)鐘頻率模塊間傳輸數(shù)據(jù)的問(wèn)題[5]。SDRAM存儲(chǔ)器的時(shí)鐘控制頻率為100 MHz,內(nèi)存大小為256 MB,其中含有4個(gè)Bank存儲(chǔ)塊,每個(gè)Bank的內(nèi)存為4 MB,數(shù)據(jù)位寬為16 bits,能滿(mǎn)足顯示模塊對(duì)數(shù)據(jù)傳輸速率的需求。
在FPGA的控制下,SDRAM存儲(chǔ)模塊中的WFIFO將SD卡中的圖像數(shù)據(jù)寫(xiě)入片外的SDRAM芯片中進(jìn)行緩存,RFIFO則將SDRAM芯片中的數(shù)據(jù)以串行方式讀出,這個(gè)過(guò)程中的數(shù)據(jù)都是16 bits。
(3) 處理模塊 當(dāng)存儲(chǔ)模塊接收到來(lái)自顯示模塊的“讀數(shù)據(jù)請(qǐng)求”信號(hào)時(shí),RFIFO將16 bits數(shù)據(jù)從SDRAM中讀出傳輸至算法處理模塊。但是,圖像邊緣檢測(cè)一般是對(duì)像素的灰度值進(jìn)行處理,即需要將24 bits的真彩色圖像數(shù)據(jù)轉(zhuǎn)換為8 bits的灰度圖像。轉(zhuǎn)換方法有浮點(diǎn)算法、整數(shù)方法、均值法、移位法以及僅取綠色五種。本文直接提取每個(gè)像素的綠色通道的數(shù)據(jù)作為其灰度值[6],使用一個(gè)數(shù)據(jù)轉(zhuǎn)換模塊將其轉(zhuǎn)換為24 bits數(shù)據(jù)后,再提取其中的綠通道數(shù)據(jù)傳遞給圖像處理模塊進(jìn)行數(shù)據(jù)處理。
(4) 顯示模塊 顯示模塊所采用的LCD液晶屏的大小為4.7英寸,可顯示分辨率為480×272的彩色圖像。因此,本文將480×272大小的真彩色圖像作為研究對(duì)象,每個(gè)像素由R、G、B三個(gè)顏色通道,每通道一個(gè)字節(jié)數(shù)據(jù)共同控制色彩信息。LCD顯示器采用SYNC接口模式,由行同步信號(hào)HSYNC和列同步信號(hào)VSYNC共同控制數(shù)據(jù)傳輸?shù)臅r(shí)序[7]。即當(dāng)LCD控制器完成行掃描和列掃描,HSYNC和VSYNC同時(shí)有效時(shí),顯示模塊會(huì)向存儲(chǔ)模塊發(fā)送“讀取數(shù)據(jù)請(qǐng)求”信號(hào),以驅(qū)動(dòng)數(shù)據(jù)的傳輸。
數(shù)字圖像可被看作二維離散矩陣,使用MATLAB軟件可得到圖像的像素矩陣。圖2是一幅分辨率為480×272的真彩色圖像的像素矩陣。其中,每個(gè)數(shù)值代表一個(gè)顏色通道的分量,圖2方框中的三個(gè)數(shù)據(jù)依次是一個(gè)像素點(diǎn)的R、G、B三個(gè)通道的數(shù)值。
圖2 圖像像素矩陣
邊緣檢測(cè)是將一幅圖像中亮度變化明顯的點(diǎn)標(biāo)識(shí)出來(lái),剔除不相關(guān)信息,同時(shí)保留圖像重要的結(jié)構(gòu)屬性。Irwin Sobel提出的Sobel邊緣檢測(cè)算法屬于查找類(lèi)算法[8-9],通過(guò)計(jì)算每個(gè)像素的灰度值的一階梯度變化來(lái)判斷邊沿的位置。采用兩組3×3模板作為水平卷積核和垂直卷積核,對(duì)圖像的每一個(gè)像素點(diǎn)的灰度值,計(jì)算它的鄰域像素與卷積核的卷積,分別得到圖像在該點(diǎn)的水平梯度Gx和垂直梯度Gy:
(1)
(2)
式中:A是3×3像素矩陣,然后將兩者結(jié)合求出其均方根作為實(shí)際梯度:
(3)
最后將梯度與人為設(shè)定的閾值θ相比較,確定其是否為邊緣:
(4)
Sobel算法原理較為簡(jiǎn)單,易于在FPGA上實(shí)現(xiàn)。但是,該算法需要人為設(shè)定閾值,并通過(guò)大量實(shí)驗(yàn)進(jìn)行驗(yàn)證,以確保選擇最合適的閾值,取得良好的檢測(cè)結(jié)果。在實(shí)際情況中,對(duì)于不同圖像而言,取得最佳效果所需要的閾值各不相同[10-11]。因此,本文引入中值濾波的思想,根據(jù)被測(cè)圖像的局部像素信息生成自適應(yīng)動(dòng)態(tài)閾值,有效解決以上兩個(gè)問(wèn)題,進(jìn)一步提高檢測(cè)精度。
中值濾波算法使用一個(gè)奇數(shù)窗口,如3×3窗口、5×5窗口,對(duì)圖像進(jìn)行掃描,將窗口內(nèi)的所有像素灰度值進(jìn)行大小排序后,取中值作為該窗口中心點(diǎn)的灰度值,從而抑制噪聲。
張琪等[12]采用中值濾波思想生成自適應(yīng)動(dòng)態(tài)閾值,本文在此基礎(chǔ)之上做出了改進(jìn),其過(guò)程如圖3所示。首先,按列對(duì)3×3窗口像素進(jìn)行排序,得到每一列的最大值、中間值、最小值,將第一行像素歸為Max組,第二行像素歸為Mid組,第三行像素歸為Min組;其次,再一次排序,依次提取Max組像素的最小值Min_max、Mid組像素的中間值Mid_mid、Min組像素的最大值Max_min;再次,求出這三個(gè)值的平均值Middle作為閾值,與對(duì)應(yīng)的梯度值G(x,y)進(jìn)行比較,以確定是否為圖像的邊緣點(diǎn)[13]。隨著像素位置的改變,閾值也會(huì)發(fā)生變化,因此,可直接將其應(yīng)用到對(duì)不同圖像的邊緣提取中,所取得的圖像邊緣信息具有良好的適應(yīng)性。
圖3 中值濾波算法步驟
2.3.1 生成3×3窗口
3×3像素矩陣是卷積運(yùn)算和中值濾波的基礎(chǔ)。調(diào)用Quartus庫(kù)中的移位寄存器Shift-Register(RAM-based)IP core將數(shù)據(jù)轉(zhuǎn)化模塊輸出的串行數(shù)據(jù),以三行并行數(shù)據(jù)輸出,其原理圖4所示。其中,模塊輸入8 bits灰度數(shù)據(jù),每行數(shù)據(jù)的長(zhǎng)度定義為圖像的寬,即480。同時(shí)寄存兩行,以保證移位寄存器能并行輸出三行數(shù)據(jù)。
圖4 Shift-Register原理圖
圖5是Model Sim仿真軟件對(duì)移位寄存器的工作過(guò)程進(jìn)行仿真的結(jié)果??梢园l(fā)現(xiàn),數(shù)據(jù)從data_in接口連續(xù)進(jìn)入移位寄存器,然后并行從tap2、tap1、tap0接口流出,每列有480個(gè)數(shù)據(jù)間隔,以確保并行數(shù)據(jù)與圖像像素相對(duì)應(yīng)。
圖5 移位寄存器工作仿真結(jié)果
2.3.2 卷積與梯度合成
ALTMULT_ADD模塊由乘法器和加法器組合而成,其原理如圖6所示。數(shù)據(jù)流dataa_0分別與datab_0、datab_1、datab_2相乘之后,再相加。其中,當(dāng)dataa_0與移位寄存器的數(shù)據(jù)輸出端口tap0連接獲取圖像數(shù)據(jù)時(shí),datab_0、datab_1、datab_2分別賦值為X9、X8、X7,實(shí)現(xiàn)像素矩陣的第三行數(shù)據(jù)與對(duì)應(yīng)的水平Sobel算子的部分卷積。依此類(lèi)推,完成一個(gè)像素矩陣與兩組算子的卷積需要6個(gè)ALTMULT_ADD模塊。
圖6 ALTMULT_ADD模塊
PARALLEL_ADD模塊的核心是一個(gè)三路加法器,用于對(duì)ALTMULT_ADD輸出的數(shù)據(jù)進(jìn)行加法處理,如圖7所示。因此,同時(shí)調(diào)用三個(gè)ALTMULT_ADD和一個(gè)PARALLEL_ADD則可實(shí)現(xiàn)一個(gè)Sobel算子與像素矩陣的卷積運(yùn)算,得到水平梯度或垂直梯度。
圖7 PARALLEL_ADD模塊
最后直接調(diào)用ALTSQRT模塊,求得水平梯度與垂直梯度的均方根,即為圖像的實(shí)際梯度G(x,y)。圖8是卷積運(yùn)算與梯度合成的Model Sim仿真圖。其中,方框1是移位寄存器模塊生成的一個(gè)3×3像素矩陣,中心像素為18。ALTMULT_ADD模塊經(jīng)過(guò)3個(gè)時(shí)鐘周期,并行完成像素矩陣與Sobel算子每一行元素的累積運(yùn)算,其結(jié)果分別為方框2和方框3。PARALLEL_ADD模塊經(jīng)過(guò)2個(gè)時(shí)鐘周期,并行完成數(shù)據(jù)累加,其結(jié)果分別為方框4和方框5。ALTSQRT模塊經(jīng)過(guò)2個(gè)時(shí)鐘周期求取實(shí)際梯度。該過(guò)程共消耗7個(gè)時(shí)鐘周期,運(yùn)算過(guò)程采用流水線(xiàn)結(jié)構(gòu)。
圖8 卷積運(yùn)算仿真結(jié)果
2.3.3 生成自適應(yīng)閾值
首先使用中值濾波器對(duì)移位寄存器輸出的列數(shù)據(jù)tap0、tap1、tap2的大小進(jìn)行排序,如圖9所示,得到Max、Mid、Min三行數(shù)據(jù)。隨后對(duì)每一行數(shù)據(jù)分別使用兩個(gè)D觸發(fā)器進(jìn)行數(shù)據(jù)緩存,同時(shí)獲取相鄰的三個(gè)數(shù)據(jù)。使用濾波器對(duì)其進(jìn)行排序,則可以得到Max組的最小值min_max、Mid組的中值mid_mid以及Min組的最大值max_min。最后求出三者的平均值作為局部區(qū)域的閾值。
圖9 中值濾波模塊
圖10是中值濾波模塊的仿真結(jié)果。其中:方框1是移位寄存器生成的3×3像素矩陣;方框2是第一次排序結(jié)果;方框3是第二次排序結(jié)果;方框4是min_max、mid_mid、max_min三者之和;方框5是最后生成即局部閾值,可以看出每一步消耗了1個(gè)時(shí)鐘周期。因此,生成閾值后需要再次使用3個(gè)D觸發(fā)器進(jìn)行延時(shí),以確保閾值與梯度的同步性。仿真結(jié)果表明,當(dāng)使用50 MHz的時(shí)鐘頻率處理一幅分辨率為480×272的圖像時(shí),算法處理模塊共消耗2.640 ms,流水線(xiàn)結(jié)構(gòu)可有效提高算法處理的速率。
圖10 中值濾波仿真結(jié)果
為進(jìn)一步驗(yàn)證系統(tǒng)的有效性,可在硬件平臺(tái)上進(jìn)行板級(jí)測(cè)試。圖11是LCD屏幕顯示的原始圖像。圖12是改進(jìn)的自適應(yīng)閾值Sobel算法檢測(cè)的結(jié)果。其中:數(shù)碼管顯示了系統(tǒng)的運(yùn)行時(shí)間,最高位“1”表示完成“讀取圖像數(shù)據(jù)——算法處理——顯示檢測(cè)結(jié)果”這一過(guò)程,最后兩位“24”表示該過(guò)程共耗時(shí)24 ms。圖13是使用MATLAB軟件平臺(tái)處理同一幅圖像,共耗時(shí)約0.262 s,即262 ms。對(duì)比可知,兩者都能完整地檢測(cè)出圖像的邊緣信息,然而,以FPGA為控制核心的硬件平臺(tái)處理圖像的速度比軟件平臺(tái)快10倍以上。
圖11 原始圖像
圖12 改進(jìn)算法檢測(cè)結(jié)果
圖13 MATLAB仿真結(jié)果
本文采用硬件方案實(shí)現(xiàn)了并行的圖像邊緣檢測(cè)算法,快速而準(zhǔn)確地提取圖像的邊緣信息,為FPGA硬件平臺(tái)實(shí)現(xiàn)更復(fù)雜的圖像處理算法提供了基礎(chǔ)。仿真及測(cè)試結(jié)果表明,硬件平臺(tái)對(duì)圖像的處理速度遠(yuǎn)遠(yuǎn)高于軟件平臺(tái),系統(tǒng)實(shí)用價(jià)值較高。