摘 要:針對(duì)傳像光纖束成像的算法結(jié)構(gòu),提出一種基于FPGA 的傳像光纖束圖像預(yù)處理器設(shè)計(jì)方案。該圖像預(yù)處理器相對(duì)于傳統(tǒng)的圖像預(yù)處理器具有充分利用FPGA有限的片上資源,合理安排數(shù)據(jù)操作之間的并行性和流水性等優(yōu)點(diǎn)。具體實(shí)驗(yàn)結(jié)果表明,該預(yù)處理器能滿足傳像光纖束成像系統(tǒng)的實(shí)時(shí)性要求,達(dá)到預(yù)期效果。
關(guān)鍵詞:FPGA;傳像光纖束成像;圖像預(yù)處理;片上資源
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)04-042-03
Preprocessor for Image of Image-carrying Fiber Bundles Based on FPGA
WANG Jingming
(Network Education College,Shanghai Jiaotong University,Shanghai,200030,China,)
Abstract:A preprocessor for the image of image-carrying fiber bundles based on FPGA is presented for the algorithm structure of the imaging with image-carrying fiber bundles.Comparing with the traditional image- preprocessor,this preprocessor has several advantages like making best of the limited on-chip resources,reasonable arrangements of the parallelism and pipeline among the data operation.Experimental results show that the design can meet the real-time requirement of the imaging system and achieve the expecting purpose.
Keywords:FPGA;image-carrying fiber bundles;image preprocessing;on chip resource
0 引言
在傳像光纖束成像系統(tǒng)中,基于FPGA的圖像預(yù)處理都會(huì)涉及到矩陣化運(yùn)算,這就勢(shì)必需要用存儲(chǔ)器(內(nèi)部或者外部的)暫存幾行或者整個(gè)一幀圖像數(shù)據(jù),然后按照矩陣相乘的方法來處理。如果需要處理一個(gè)n×n圖像陣列,則需要大于等于n個(gè)RAM或FIFO作為圖像數(shù)據(jù)緩沖,特別是對(duì)于高分辨率的掃描圖像進(jìn)行處理而言,不僅浪費(fèi)了很多FPGA寶貴的片上RAM資源,而且會(huì)使邊界效應(yīng)的處理復(fù)雜化。不僅如此,由于在處理前需要存儲(chǔ)多行圖像數(shù)據(jù),導(dǎo)致整個(gè)系統(tǒng)的實(shí)時(shí)性不高。
在此提出一種基于FPGA 的傳像光纖束圖像預(yù)處理器設(shè)計(jì)與實(shí)現(xiàn)方案,合理利用FPGA有限的片上資源,使邊界效應(yīng)的處理簡(jiǎn)便化,并充分利用數(shù)據(jù)操作之間的并行性和流水性,生成圖像數(shù)據(jù)流,以滿足傳像光纖束成像算法對(duì)圖像傳輸系統(tǒng)的功能要求和實(shí)時(shí)性要求。
1 傳像光纖束成像系統(tǒng)
傳像光纖束的成像算法主要涉及預(yù)處理算法和一些核心的成像算法,因此根據(jù)成像算法的特殊性構(gòu)建了基于FPGA和DSP傳像光纖束的成像系統(tǒng)。其中,用FPGA來完成傳像光纖束圖像的預(yù)處理;用DSP實(shí)現(xiàn)光纖束成像的核心算法;用USB芯片完成將處理完的數(shù)據(jù)傳送至上位機(jī)的任務(wù)。系統(tǒng)中FPGA采用Xilinx的150萬門級(jí)芯片XC3S1500;Spartan-3 FPGA采用90 nm制造技術(shù)來獲得較低的硅裸片成本。該系列器件也是惟一擁有高效率可實(shí)現(xiàn)DSP功能所需要的所有系統(tǒng)特點(diǎn)(這些特點(diǎn)一度屬于高端FPGA所專有)的低成本FPGA;DSP 采用的是TI 公司的TMS32DM642;USB選用Cypress公司的CY7C68013。該成像系統(tǒng)硬件結(jié)構(gòu)圖如圖1所示。
圖1 成像系統(tǒng)硬件結(jié)構(gòu)
先由FPGA對(duì)攝像頭采集到的圖像數(shù)據(jù)進(jìn)行預(yù)處理,以減輕DSP的運(yùn)算負(fù)擔(dān),使得DSP能夠工作在核心算法上,之后再由FPGA將處理后的圖像送至DSP。DSP通過EDMA將圖像數(shù)據(jù)搬運(yùn)至片外SDRAM,然后對(duì)圖像進(jìn)行傳像光纖束成像算法。經(jīng)算法處理好的圖像數(shù)據(jù)由DM642發(fā)送至FPGA,由FPGA通過在其內(nèi)部設(shè)置FIFO完成圖像數(shù)據(jù)緩沖功能,并控制USB傳輸圖像數(shù)據(jù)。最后由68013完成USB數(shù)據(jù)的封裝,并將封裝后的數(shù)據(jù)傳送到上位機(jī)。
2 預(yù)處理器的設(shè)計(jì)和實(shí)現(xiàn)
系統(tǒng)中的500萬像素CMOS鏡頭輸出圖像格式為2 592×1 944×12 b的Bayer圖像數(shù)據(jù)格式,為了后續(xù)DSP能夠更好地處理數(shù)據(jù),并減輕DSP的運(yùn)算負(fù)擔(dān),需先將輸出的圖像數(shù)據(jù)提取成8 b,再通過使用RGB插值算法,將Bayer圖像數(shù)據(jù)格式轉(zhuǎn)換成RGB信號(hào)和亮度信號(hào)[1]。圖1為是CMOS圖像傳感器輸出的Bayer圖像格式[2]:
圖2 CMOS圖像感器輸出的Byer圖像格式
顏色插值方法有很多種,常用的算法有鄰域插值法、線性插值法、Mondriaan 的彩色圖像信息模型法[3]、神經(jīng)網(wǎng)絡(luò)插值法、顏色差空間的線性插值法[4]等。鄰域插值法和線性插值法能在圖像相對(duì)平滑區(qū)域得到較好的結(jié)果。但是,在圖像高頻區(qū)域,如圖像中邊緣處色差大的區(qū)域,則不能很好地控制走樣現(xiàn)象。神經(jīng)網(wǎng)絡(luò)插值算法的特點(diǎn)是圖像質(zhì)量好,但運(yùn)算時(shí)間長(zhǎng)。
為了使神經(jīng)網(wǎng)絡(luò)插值算法更加適合使用FPGA來實(shí)行,該系統(tǒng)中采用雙線性插值法。這種插值方法具有算法計(jì)算量少,算法結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn),適合該系統(tǒng)的算法結(jié)構(gòu)要求。算法的核心思想是:利用需要處理的原始圖像中當(dāng)前像素點(diǎn)周圍3×3像素矩陣之內(nèi)的9個(gè)像素點(diǎn)的相關(guān)性,將每個(gè)像素的RGB分量都由以這個(gè)像素為中心的3×3像素矩陣進(jìn)行線性插值而成。按照這個(gè)思想可以將所有圖像中的3×3矩陣分成三類[5,6]。它的分類情況如表1所示。
表1 Bayer圖像格式分類
奇行偶列奇行奇列偶行偶列偶行奇列
BGBGBGGRGRGR
GRGRGRBGBGBG
BGBGBGGRGRGR
按照表1的分類,便可以得到各個(gè)矩陣的具體計(jì)算方式。例如,對(duì)于奇行偶列的像素點(diǎn)而言,它的紅色分量為其本像素點(diǎn)的像素值,它的綠色分量為其上下左右的4個(gè)綠色像素和的1/4,它的藍(lán)色分量為其左上、左下、右上和右下的4個(gè)藍(lán)色像素和的1/4。其他圖像矩陣的計(jì)算方式如下所示:
奇數(shù)行偶數(shù)列像素:
R(2,2)=R(2,2)
G(2,2)=(1/4)(G(1,2)+G(2,1)+G(2,3)+G(3,2))
B(2,2)=(1/4)(B(1,1)+B(1,3)+B(3,1)+B(3,3))
奇數(shù)行奇數(shù)列像素:
R(2,2)=(1/2)(R(2,1)+R(2,3))
G(2,2)=G(2,2)
B(2,2)=(1/2)(B(1,2)+B(3,2))
偶數(shù)行偶數(shù)列像素:
R(2,2)=(1/2)(R(1,2)+R(3,2))
G(2,2)=G(2,2)
B(2,2)=(1/2)(B(2,1)+B(2,3))
偶數(shù)行奇數(shù)列像素:
R(2,2)=(1/4)(R(1,1)+R(1,3)+R(3,1)+R(3,3))
G(2,2)=(1/4)(G(1,2)+G(2,1)+G(2,3)+G(3,2))
B(2,2)=B(2,2)
FPGA具有豐富的邏輯資源和觸發(fā)器資源,其內(nèi)嵌大量乘法器和豐富的RAM資源,特別適合大量數(shù)據(jù)的并行運(yùn)算,軟件設(shè)計(jì)時(shí)應(yīng)該充分發(fā)揮FPGA的特長(zhǎng),以提高處理速度[7,8]。由于鄰域線性插值法不可避免地需要將圖像數(shù)據(jù)變換成3×3的圖像矩陣。為了解決這一問題,該系統(tǒng)中采用了一種合理結(jié)合FPGA硬件結(jié)構(gòu)的FIFO_FD算法模型。具體算法模型如圖3所示。
圖3 FIFO_FD的算法模型
運(yùn)行流程: 8位圖像信號(hào)送到第一個(gè)移位寄存器,經(jīng)過移位操作從移位寄存器(FD)存入左邊第一個(gè)4 192-Byte-FIFO(先入先出寄存器),存入一行圖像數(shù)據(jù)后,當(dāng)?shù)诙袌D像數(shù)據(jù)送達(dá)并經(jīng)過移位操作從FD存入左邊第一個(gè)FIFO時(shí),存儲(chǔ)在第一個(gè)FIFO的數(shù)據(jù)開始讀出到第四個(gè)FD,再經(jīng)過移位操作存入第二個(gè)FIFO,等兩行圖像數(shù)據(jù)都存儲(chǔ)之后,當(dāng)?shù)谌袌D像數(shù)據(jù)送達(dá)至第三個(gè)FD時(shí),后兩個(gè)FIFO分別讀出前兩行中前三個(gè)圖像數(shù)據(jù),此時(shí)就可以從FD和FIFO的輸出端口讀取到一個(gè)3×3的圖像數(shù)據(jù)矩陣:
DIDHDG
DFDEDD
DCDBDA
然后可以根據(jù)插值計(jì)算公式計(jì)算R,G,B信號(hào)。
模板計(jì)算,不可避免地存在邊界效應(yīng)。運(yùn)用本方法也可以簡(jiǎn)便地對(duì)其進(jìn)行處理,對(duì)邊界處理如下:對(duì)圖像四周全部補(bǔ)零,即先將圖像擴(kuò)展成2 594×1 946大小,然后計(jì)算得到2 592×1 944大小的圖像,這樣得到的圖像仍具完整尺寸。只需在運(yùn)算時(shí),針對(duì)不同四周特殊的像素采用裁減公式(系統(tǒng)中不產(chǎn)生零像素,只是對(duì)計(jì)算公式中相應(yīng)邊界元素補(bǔ)零)獲得。過程如下:
第一行圖像讀入第一個(gè)FIFO后,第二行圖像開始讀入左邊第一個(gè)FD時(shí),開始計(jì)算第一行真彩數(shù)據(jù),這時(shí)候第二個(gè)FIFO 沒有數(shù)據(jù),相當(dāng)于在第一行的數(shù)據(jù)前面補(bǔ)零。第1 944行圖像讀入第一個(gè)FIFO后,第1 943行圖像讀入第二個(gè)FIFO時(shí),開始計(jì)算最后一行(第1 944行),這時(shí)候第一個(gè)FD已經(jīng)沒有數(shù)據(jù)讀入,相當(dāng)于在第1 944行的數(shù)據(jù)后面補(bǔ)零。
對(duì)列的操作也是如此,每一行的第一個(gè)元素讀出到B,E,H位置時(shí)開始計(jì)算,這樣每一列的第一個(gè)元素前相當(dāng)于是零元素。每一行的最后一個(gè)元素讀出到B,E,H位置時(shí)開始計(jì)算,這樣每一列的最后一個(gè)元素后相當(dāng)于是零元素。
3結(jié) 語
針對(duì)Bayer濾色器彩色特性,結(jié)合FPGA的硬件結(jié)構(gòu),充分考慮了圖像數(shù)據(jù)處理時(shí)所消耗的硬件資源和處理速度之間的矛盾,提出一種高流水深并行的FIFO加FD的圖像處理架構(gòu)。
這里提出的硬件架構(gòu)對(duì)于處理一般的3×3的圖像矩陣可以節(jié)省1/3的RAM或FIFO的資源開銷,簡(jiǎn)便了邊界效應(yīng)的處理,實(shí)時(shí)性也達(dá)到了最高[9]。此方法更可以適用于FPGA對(duì)于一般圖像信號(hào)的算法處理,例如Sobel算子、中值濾波、Bayer圖像的彩色恢復(fù)等[10]。
參考文獻(xiàn)
[1]Micron.1/2.5-inch 5 MP CMOS Digital Image Sensor[EB/OL].http://www.micron.com/imaging.
[2]Pei S C,Tam I K.Effective Color Interpolation in CCD Color Filter Arrays using Signal Correlation [J].IEEE Trans.on Circuits and Systems for Video Technology,2003,13(6):503-513.
[3]王開軍,姜宇柏.面向CPLD/FPGA的VHDL[M].北京:機(jī)械工業(yè)出版社,2006.
[4]劉皖,何道君,譚明.FPGA設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2006.
[5]劉方.基于Bayer彩色濾波陣列插值算法的研究[D].成都:電子科技大學(xué),2006.
[6]彭俊,高偉.基于FPGA的Bayer圖像彩色恢復(fù)快速算法研究及實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2007,13(7):1 671-1 819.
[7]石英,李新新,姜宇柏.ISE 應(yīng)用與開發(fā)技巧[M].北京:機(jī)械工業(yè)出版社,2007.
[8]華清遠(yuǎn)見.FPGA應(yīng)用開發(fā)入門與典型實(shí)例[M].北京:人民郵電出版社,2008.
[9]劉曉松,楊新,文逡,等.一種用于數(shù)字圖像傳感器的彩色插值算法[J].中國(guó)圖像圖形學(xué)報(bào),2003,8(5):516-521.
[10]Meyeer Baese.數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2006.
[11]許建,王福明.指紋圖像預(yù)處理算法研究[J].現(xiàn)代電子技術(shù),2009,32(1):84-86.