周先春,郭亮可,鄒 宇,朱 雯
(1.南京信息工程大學(xué) 電子與信息工程學(xué)院,江蘇 南京210044;2.南京信息工程大學(xué) 江蘇省大氣環(huán)境與裝備技術(shù)協(xié)同創(chuàng)新中心,江蘇 南京210044)
隨著計(jì)算機(jī)視覺、多媒體應(yīng)用的迅速發(fā)展,人們對圖像處理技術(shù)的要求越來越高[1]。FPGA能夠滿足計(jì)算量大和計(jì)算結(jié)構(gòu)、類型相似的應(yīng)用[2]。由于FPGA的自身特點(diǎn)以及科技的進(jìn)步與發(fā)展,在數(shù)字圖像處理中FPGA越來越占據(jù)優(yōu)勢,并將會成為信號處理的主流。
當(dāng)前,國內(nèi)外學(xué)者在圖像處理領(lǐng)域也進(jìn)行了很多相應(yīng)的研究,在圖像去噪[3-5]、圖像分割[6-7]、圖像邊緣檢測等方面都有重要技術(shù)突破。
Perona和Malik在1990年率先建立一個(gè)二階偏微分處理模型,其能夠有效地完成在圖像的噪聲濾除以及圖像邊緣的提取間的平衡。文獻(xiàn)[8-9]等提出的去噪方法,能夠保護(hù)圖像的紋理特征,但計(jì)算復(fù)雜、運(yùn)行效率慢;Fedorov V和Ballester C采用非本地仿射的方法構(gòu)造圖像去噪的研究模型[10];Ma Z B等采用二維的濾波器矩陣即卷積核在二維圖像進(jìn)行滑動(dòng)濾波,對于圖像的每一個(gè)像素點(diǎn),計(jì)算與它的相鄰的像素?cái)?shù)據(jù)和卷積核上對應(yīng)權(quán)重值的乘積[11];Farouj Y等采用雙Fisz波進(jìn)行圖像去噪研究[12];文獻(xiàn)[13]也對在FPGA端映射數(shù)字圖像處理算法進(jìn)行了研究。
本文提出基于FPGA實(shí)現(xiàn)多種二維卷積濾波器的綜合圖像處理方案,從算法方面研究二維卷積濾波器的性能提高方案。在FPGA平臺進(jìn)行相關(guān)算法映射,從而完成圖像處理,由此可以進(jìn)一步從減少占用硬件資源、提高運(yùn)算速度等方面有效提高圖像處理的性能。本文同時(shí)完成了將實(shí)現(xiàn)的二維卷積濾波器應(yīng)用到RGB彩色圖像的處理、圖像的灰度轉(zhuǎn)換以及圖像的Sobel算子的邊緣檢測工作,有一定的研究意義和實(shí)用價(jià)值。
本文主要以3×3卷積核為例,將卷積核在FPGA端實(shí)現(xiàn)映射,并將實(shí)現(xiàn)的卷積核加以應(yīng)用。樣本圖像先通過Matlab進(jìn)行預(yù)處理,生成可初始化ROM的.mif數(shù)據(jù)文件,隨后FPGA生成原圖像數(shù)據(jù)和處理后數(shù)據(jù)供TFT觸摸屏顯示。
1.2.1 空間域卷積
這里通過空間域方法在硬件上實(shí)現(xiàn)圖像的二維卷積濾波處理。本文采用圖解掩膜法,先將某一離散矩陣的掩膜翻轉(zhuǎn)180°,再將其在另一離散矩陣的掩膜上進(jìn)行滑動(dòng)求對應(yīng)乘積和,在圖像處理領(lǐng)域中,即為圖像矩陣與一個(gè)卷積核矩陣的卷積運(yùn)算。對于圖像的每一個(gè)像素點(diǎn),先計(jì)算與其相鄰的像素?cái)?shù)據(jù)和卷積核上對應(yīng)權(quán)重值的乘積,然后再將這些乘積累加作為該位置的新像素值。
1.2.2 圖像邊界處理
當(dāng)對圖像邊緣進(jìn)行濾波時(shí),卷積核的一部分會超出圖像邊界部分。
設(shè)輸入圖像矩陣為I,本文假設(shè)輸入圖像矩陣I是無限大的,經(jīng)卷積濾波器處理之后的新圖像矩陣為J。超出該指定圖像邊界的部分是用圖像的邊界值無限延伸的,此時(shí)J(1,4)=(-1)+0+1+(-1)+0+1+(-3)+0+7=4;此方法不會在圖像邊界處理時(shí)產(chǎn)生較大的顏色跳變,能夠結(jié)合本文的硬件設(shè)計(jì)特點(diǎn),在第二種邊界填充方案的基礎(chǔ)上加以調(diào)整,采用硬件實(shí)現(xiàn)圖像的邊界填充。
1.2.3 卷積核處理流程
圖1 為本文著重研究的基于FPGA進(jìn)行映射的二維卷積核流程。
1)逐像素讀取單端口ROM中的圖像數(shù)據(jù),圖像數(shù)據(jù)事先通過Matlab軟件編寫的程序存入.mif文件中,由其對ROM進(jìn)行初始化。
圖1 卷積核處理流程圖
2)從ROM中讀取的圖像數(shù)據(jù)逐像素進(jìn)入Shift-RAM中,Shift-RAM包含3條Taps,每條Taps的長 度 為N,與圖像寬度一致。當(dāng)每條Taps中數(shù)據(jù)填滿,在繼續(xù)推進(jìn)的過程中,每個(gè)時(shí)鐘周期會輸出最右側(cè)的像素?cái)?shù)據(jù)。
3)三條Taps分別抽頭逐像素輸送圖像數(shù)據(jù)形成3×3矩陣,進(jìn)入Altmult-Adder中與卷積核對應(yīng)位置的權(quán)值進(jìn)行乘法累加計(jì)算。
4)三個(gè)Altmult-Adder的計(jì)算結(jié)果并行進(jìn)入Parallel-Adder中再次相加,輸出所得結(jié)果。
整個(gè)系統(tǒng)涵蓋了二維卷積濾波器的設(shè)計(jì)以及應(yīng)用。其中,RGB彩色圖像處理是對128×128像素的RGB565格式的彩色圖像進(jìn)行處理;灰度處理部分的對象同樣是RGB565格式的彩色圖像,對其進(jìn)行處理輸出灰度圖像;邊緣檢測的對象是灰度處理部分輸出的灰度圖像,采用Sobel算子對其進(jìn)行邊緣檢測。在彩色處理模式下可以對圖像處理的卷積核進(jìn)行選擇,得到不同的處理效果;在邊緣檢測模式下可以對檢測的閾值進(jìn)行設(shè)置,得到不同效果的處理結(jié)果。系統(tǒng)的整體流程如圖2所示。
1.3.1 RGB彩色圖像處理設(shè)計(jì)方案
基于RGB彩色圖像的每一個(gè)像素由R(Red),G(Green),B(Blue)三個(gè)通道的數(shù)值同時(shí)定義。一般彩色圖像的每一個(gè)像素為24 bit,即R,G,B分別為8 bit。為節(jié)省資源,本文所處理的為128×128像素的RGB565圖像,即R,B通道為5 bit,G通道為6 bit,一共16 bit,故一個(gè)像素可減少占用8 bit的資源,一幅128×128像素的圖像共可節(jié)省131 072 bit資源。
圖2 系統(tǒng)整體流程
1.3.2 灰度圖像處理設(shè)計(jì)方案
由于彩色圖像的每一個(gè)像素點(diǎn)都是有R,G,B三個(gè)通道的值決定的,而灰度圖像的每一個(gè)像素只有一個(gè)采樣顏色的值。本文選擇加權(quán)法中的移位法對三通道的加權(quán)整合,此方法是考慮到顏色值在計(jì)算機(jī)中是以二進(jìn)制形式保存的,所以為了方便對權(quán)重進(jìn)行放大處理時(shí)應(yīng)取2的冪次方倍,一般放大256倍,即:
對二進(jìn)制數(shù)據(jù)進(jìn)行縮小256倍等同于數(shù)據(jù)左移8位,從而實(shí)現(xiàn)彩色圖像轉(zhuǎn)灰度圖像的操作。
1.3.3 邊緣檢測處理設(shè)計(jì)方案
將X卷積核和Y卷積核分別與圖像像素矩陣進(jìn)行二維卷積濾波操作,所得結(jié)果分別為Gx和Gy,再將其分別平方的和開根號得到最終結(jié)果,即最后還需進(jìn)行閾值判斷,才算完成邊緣檢測。若G大于閾值則判斷其為邊緣,將其賦值使其顯示白色,最后將得到顯示白色邊緣的黑底二值圖像。
本文以QuartusⅡ13.1作為軟件開發(fā)平臺,以ALINX的AX415開發(fā)板作為硬件開發(fā)平臺實(shí)現(xiàn)了圖像的二維卷積濾波處理。開發(fā)板FPGA芯片提供的是Altera公司的cyclone IV EP4CE15F17C8N芯片。系統(tǒng)由ROM存儲、二維圖像處理和TFT觸摸屏顯示三個(gè)子部分組成。其中各個(gè)子系統(tǒng)完成以下任務(wù):
1)ROM存儲。存儲原始圖像像素?cái)?shù)據(jù),在數(shù)據(jù)讀取時(shí)對圖像進(jìn)行上下邊界的像素值填充。
2)二維圖像處理。以RGB彩色圖像處理、灰度圖像處理、邊緣檢測處理三種可選擇的模式對128×128的RGB565圖像進(jìn)行圖像處理。
3)TFT顯示。對原始圖像和濾波后圖像進(jìn)行顯示,可切換顯示不同模式的處理效果以及同一模式下不同卷積核或不同閾值的處理效果。
二維卷積核要實(shí)現(xiàn)滑動(dòng)濾波的效果所以采用移位寄存器Shift-RAM、Altmult-Adder和Parallel-Adder共同實(shí)現(xiàn)。卷積核架構(gòu)圖如圖3所示,I1~I(xiàn)9為形成的3×3矩陣的像素?cái)?shù)據(jù),X1~X9為180°翻轉(zhuǎn)后卷積核對應(yīng)位置的權(quán)值。
圖3 卷積核架構(gòu)圖
1)Shift-RAM支持一個(gè)時(shí)鐘周期移位一個(gè)或多個(gè)bit的數(shù)據(jù),位寬是可以設(shè)置的。工作冊上Shift-RAM的移位示意圖設(shè)置的行數(shù)是4行,每行的寬度是3。此處的數(shù)據(jù)抽頭是將4個(gè)8 bit的數(shù)據(jù)整合成一個(gè)32 bit的數(shù)據(jù)輸出。
2)Shift-RAM是以移位存儲的方式工作的。后面存儲的數(shù)據(jù)將前面的數(shù)據(jù)不斷推進(jìn),當(dāng)?shù)?行存儲空間占滿的時(shí)候,再繼續(xù)推向第2行存儲,以此類推,先進(jìn)先出,依次進(jìn)行移位存。
中國土木工程學(xué)會2015年首批標(biāo)準(zhǔn)計(jì)劃項(xiàng)目《建筑工程信息交換實(shí)施標(biāo)準(zhǔn)》由聯(lián)盟成員單位主編?!稑?biāo)準(zhǔn)》結(jié)合了我國建筑工程實(shí)踐特點(diǎn),全面梳理、系統(tǒng)規(guī)劃了建筑工程全生命周期P-BIM技術(shù)體系,分布式BIM模型體系及建模、應(yīng)用軟件體系,以指導(dǎo)我國自主知識產(chǎn)權(quán)的BIM建模和應(yīng)用軟件開發(fā),實(shí)現(xiàn)數(shù)據(jù)互用。標(biāo)準(zhǔn)已通過審查,即將報(bào)批。
設(shè)置Shift-RAM移位寄存器的仿真時(shí)將Shift-RAM的每一行的寬度設(shè)為3,可以看出Taps0x先推滿數(shù)據(jù),之后原先Taps0x中的數(shù)據(jù)再繼續(xù)推進(jìn)Taps1x,以此類推,當(dāng)3條Taps都推滿了數(shù)據(jù)時(shí),每條Taps同時(shí)抽頭3次可以生產(chǎn)3×3數(shù)據(jù)矩陣。因?yàn)樾纬傻?×3矩陣不是按照1~9的順序,而是先輸出7,4,1三個(gè)數(shù)據(jù),下一個(gè)時(shí)鐘周期輸出8,5,2三個(gè)數(shù)據(jù),第3個(gè)時(shí)鐘周期輸出9,6,3三個(gè)數(shù)據(jù),因此經(jīng)過180°翻轉(zhuǎn)后的卷積核中的權(quán)值也應(yīng)按此順序?qū)?yīng)相乘。
實(shí)際生成數(shù)據(jù)矩陣的大小是卷積核大小決定的,而實(shí)際每行的寬度需要與所處理圖像的數(shù)據(jù)寬度保持一致。本文所需處理的圖像尺寸為128×128,故移位寄存器寬度設(shè)置為128。下圖所示是當(dāng)每條Taps寬度為128,一個(gè)時(shí)鐘周期為100 ps時(shí),0 ps開始讀取地址數(shù)據(jù),延遲50 ps開始輸出第一個(gè)地址的數(shù)據(jù),第12 850 ps時(shí)第一條Taps即Taps0x開始抽頭輸出第一個(gè)數(shù)據(jù)。
RGB彩色圖像處理的實(shí)現(xiàn)除調(diào)用卷積核之外,還包含數(shù)據(jù)判值以及數(shù)據(jù)整合。
1)調(diào)用卷積核。R,G,B三通道分別調(diào)用一個(gè)卷積核實(shí)現(xiàn)通道的卷積濾波處理。因?yàn)槿ǖ牢粚挷煌?,所以?yīng)調(diào)用位寬相匹配的卷積核,即R,B通道調(diào)用5 bit的卷積核,G通道調(diào)用6 bit的卷積核。
2)數(shù)據(jù)判值。R,G,B三通道分別進(jìn)行判值。使每通道輸出數(shù)值在0~31(63)之間。
3)數(shù)據(jù)整合。將R,G,B三通道值分別作為高5位、中6位、低5位進(jìn)行整合。
灰度圖像處理的頂層模塊的數(shù)據(jù)輸入同樣來自ROM的數(shù)據(jù)讀取輸出,因此對應(yīng)的數(shù)據(jù)輸入端口同樣命名為rddata_r0;clken_p端口為輸出有效數(shù)據(jù)標(biāo)志端;odata為16 bit數(shù)據(jù)輸出端。灰度圖像處理部分僅包含乘法、加法等簡單運(yùn)算,計(jì)算復(fù)雜度低,因此當(dāng)clken置高時(shí)延遲200 ps左右即能輸出有效數(shù)據(jù)。
邊緣檢測處理除調(diào)用一個(gè)6 bit的卷積核之外,另調(diào)用了QuartusⅡ13.1自帶的開根號IP核,該IP核的輸出結(jié)果還需進(jìn)行閾值比較才能得到邊緣檢測的最終結(jié)果。邊緣檢測處理的輸入為灰度圖像,由灰度圖像處理得到的圖像數(shù)據(jù)R,G,B三通道數(shù)值相近,故取G通道數(shù)據(jù)進(jìn)行邊緣檢測處理即可,因此只需調(diào)用一個(gè)6 bit的卷積核。
邊緣檢測處理的頂層模塊的數(shù)據(jù)輸入來自灰度圖像處理模塊的輸出,即16 bit灰度圖像數(shù)據(jù);iTHRESHOLD為閾值,范圍為0~256可自定義,大于閾值的數(shù)據(jù)即認(rèn)為白色邊緣,其余顯示黑色;clken_p端口同樣為有效數(shù)據(jù)輸出標(biāo)志端;Abs_mag為的結(jié)果,即所調(diào)用開平方IP核的輸出,輸出觀察Abs_mag的輸出值可以檢查sobel算子對圖像的處理情況;odata端口為16 bit二值圖像的數(shù)據(jù)輸出,輸出非0即65 535,即16位全部為0或1。
3.1.1 卷積核為[0,0,0;-1,1,0;0,0,0]
該卷積核為平移卷積核,可用于水平邊緣檢測,由于卷積核權(quán)值之和為0,所以處理完的整體圖像亮度較暗,如圖4所示。經(jīng)對比,兩者均能明顯展示出圖像中較為水平的邊緣,但本文方案對人物帽檐的水平邊緣檢測效果更為平滑。對比FPGA,Matlab所處理的圖像最右側(cè)有未處理的圖像痕跡,且圖像最左側(cè)邊界有缺失,因?yàn)镸atlab直接用卷積核對圖像進(jìn)行處理,無法對圖像邊界做填充處理,所以實(shí)際參與卷積的圖像像素為高度和寬度的第2~第127個(gè)像素,因此有像素缺失和未處理的痕跡,整體效果不及本文方案。
圖4 卷積核為[0,0,0;-1,1,0;0,0,0]時(shí)兩方案處理結(jié)果圖與原圖對比
3.1.2 卷積核為[1,1,1;1,-7,1;1,1,1]
該卷積核起圖像銳化濾波的作用,本文方案和Matlab方案的處理效果較為接近,無明顯差異.因?yàn)樵摼矸e核權(quán)重值之和為1,因此處理完后的圖像亮度與原圖一致,更方便與原圖進(jìn)行比較,如圖5所示。Matlab所處理的圖像邊緣右側(cè)和下側(cè)有更為明顯的黑線,同樣是因?yàn)镸atlab中的卷積處理無法覆蓋圖像的所有像素,而本文方案在圖像讀取和處理中能夠?qū)吔邕M(jìn)行像素值填充。一方面使得卷積處理覆蓋了所有圖像像素,使得處理完的圖像尺寸不變;另一方面在圖像邊界進(jìn)行卷積運(yùn)算時(shí),不會產(chǎn)生較為突兀的像素值跳變,因?yàn)樯婕暗降倪吔缤獾南袼厥且詫?yīng)邊界上的像素值填充的,處于同一色階。
圖5 卷積核為[1,1,1;1,-7,1;1,1,1]時(shí)兩方案處理結(jié)果圖與原圖對比
兩種方案的灰度圖像處理除圖像亮度有區(qū)別外,均未有明顯失真,處理效果均較好。理論上講,Matlab的處理不僅實(shí)現(xiàn)了轉(zhuǎn)灰度處理,且沒有改變圖像原來的亮度水平。而本文方案雖然實(shí)現(xiàn)了灰度處理的目標(biāo)但是使圖像的亮度產(chǎn)生了變化。
兩種方案均是采用0.299R+0.587G+0.114B的加權(quán)平均法將彩色圖像轉(zhuǎn)化為灰度圖像的,但是Matlab中可以直接對像素?cái)?shù)據(jù)進(jìn)行浮點(diǎn)運(yùn)算,而本文FPGA方案不能直接進(jìn)行浮點(diǎn)乘法,是通過先放大后縮小的移位法實(shí)現(xiàn)以上加權(quán)平均的。
R,G,B三通道的權(quán)值分別放大為77,150和29,說明放大倍數(shù)有誤差,另外在灰度值計(jì)算完成后將其賦值給R,G,B通道時(shí),R通道和B通道均是取 左移8位 后 的高5位,而實(shí)際左移8位后數(shù)據(jù)還有6位。若此時(shí)數(shù)據(jù)值較小,僅取高5位會造成較大的誤差,放大倍數(shù)的誤差和取值的誤差造成了最終處理結(jié)果的區(qū)別。兩方案灰度圖像處理結(jié)果如圖6所示。
圖6 兩方案灰度圖像處理結(jié)果
1)本文基于FPGA硬件實(shí)現(xiàn)方案在閾值為20,25,35時(shí)圖像處理結(jié)果圖如圖7所示。
2)Matlab中調(diào)用edge函數(shù),直接采用Sobel算子處理完成的圖像。Matlab編程先實(shí)現(xiàn)Sobel算子對圖像的處理之后經(jīng)閾值比較得到的圖像處理結(jié)果如圖8所示。處理閾值分別為60,130,160。
圖7 本文方案邊緣檢測處理結(jié)果
圖8 Matlab邊緣檢測處理結(jié)果
對比以上兩組方案的處理效果,第二組方案處理效果與本文方案處理效果較為類似,隨著閾值增大,圖像重要邊緣的檢測越清晰,但是會有部分邊緣缺失的現(xiàn)象。因?yàn)楸疚姆桨冈趫D像數(shù)據(jù)經(jīng)過Sobel算子處理后并未對負(fù)值和溢出數(shù)據(jù)進(jìn)行判斷和處理,而是直接進(jìn)行平方和開根號操作。
在根號操作后這些數(shù)據(jù)雖然能夠正確展示出圖像邊緣,但是會因?yàn)橐绯龆@色變成藍(lán)色邊緣,因此在判斷時(shí)所需的閾值較小。因?yàn)閳D像最終都會經(jīng)過閾值比較流程,作為二值圖像顯示,因此只會對閾值大小有影響,不會對圖像的邊緣檢測產(chǎn)生較明顯的影響;而在Matlab中,edge函數(shù)直接調(diào)用Sobel算子進(jìn)行邊緣檢測,在閾值為0.76時(shí)獲得最佳效果,可以明顯看出第二種方案的圖像邊緣更纖細(xì)。
本文通過二維卷積核運(yùn)算,在FPGA硬件端映射了RGB彩色圖像處理,灰度處理和Sobel算子邊緣檢測處理三個(gè)模式,并在每種模式下進(jìn)行多種情況運(yùn)算,將其不同數(shù)據(jù)結(jié)果與Matlab的理想仿真結(jié)果進(jìn)行比對,得到以下結(jié)論:
1)在RGB圖像處理模式下,F(xiàn)PGA可以保證更加滿意的處理結(jié)果,其對樣本圖像的邊緣信息保持相對完整,且不容易失真。
2)在進(jìn)行灰度圖像處理時(shí),F(xiàn)PGA的處理效果稍遜于Mtalab仿真效果,這是由于在實(shí)際硬件平臺環(huán)境下,數(shù)據(jù)多要進(jìn)行浮點(diǎn)數(shù)轉(zhuǎn)換,以此保證最高計(jì)算性價(jià)比;
3)在進(jìn)行邊緣檢測時(shí),都采取Sobel算子的情況下,F(xiàn)PGA的處理結(jié)果與Matlab仿真結(jié)果類似。綜上所述,本文在FPGA硬件平臺下映射了多種基于Matlab進(jìn)行圖像處理仿真的二維卷積應(yīng)用,故此能夠說明基于FPGA平臺實(shí)現(xiàn)圖像處理二維卷積算法的高效性與實(shí)用性。