王 玨,李智偉,陳 松
(中國科學技術(shù)大學 信息科學技術(shù)學院,安徽 合肥 230026)
圖像在采集、傳輸、處理、接收及成像過程中會因各種干擾而引入椒鹽噪聲。椒鹽噪聲是由圖像傳感器、傳輸信道、解碼處理等產(chǎn)生的黑白相間的亮暗點噪聲,是一種因為信號脈沖強度引起的噪聲。這種噪聲的存在惡化了圖像的質(zhì)量,影響了圖像本身的特征,妨礙了對圖像的研究,所以如何實現(xiàn)更好的圖像去噪是一個很值得研究的問題[1]。
目前,去除脈沖干擾及椒鹽噪聲最常用的算法是中值濾波,它可以很好地抑制脈沖噪聲提高信噪比,同時還能保護圖像的邊緣[2]。中值濾波的基本原理是把數(shù)字圖像中一點的值用該點鄰域內(nèi)的各個點值的中值來代替。一般的排序算法思想就是對像素的值進行比較和交換,典型的有冒泡排序、插入排序。這些算法和當前的比較操作必須基于上一次的比較操作結(jié)果,所以對于大窗口的中值濾波,軟件運行需要很長時間,而硬件計算起來就需要大量的硬件邏輯資源。目前大部分使用的是3×3的中值濾波算法,但是在較為復雜的圖像中,濾波效果不是很好。所以本文采用了5×5的窗口設(shè)計。但是基于一般的排序中值濾波算法硬件實施起來會消耗較多的邏輯資源,因此本文設(shè)計了一種基于位級中值濾波算法的硬件架構(gòu)[3],減少了比較的次數(shù)和進行數(shù)據(jù)計算操作的位寬,從而實現(xiàn)了節(jié)約硬件邏輯資源,且易于FPGA的實現(xiàn)。
整個位級中值濾波算法的原理是基于不斷找到所有排序的數(shù)中較大的數(shù)并淘汰的這個原理來實現(xiàn)的。
圖像數(shù)據(jù)要求以二進制形式進行計算,從最高位到最低位,依次對窗口內(nèi)所有數(shù)據(jù)在相同位上的數(shù)值進行操作。假設(shè)當前窗口內(nèi)有N個非0數(shù)據(jù)需要排序,則窗口內(nèi)非0數(shù)據(jù)的一半為M(向下取整)。從最高位開始,統(tǒng)計在當前位有效數(shù)據(jù)中所有數(shù)值為1的數(shù)據(jù)個數(shù)。最高位計算時,數(shù)據(jù)非0即為有效數(shù)據(jù)。再將數(shù)值為1的個數(shù)與被淘汰的較大的數(shù)累加,累加的和與M進行比較,若大于M,則在下一位的計算中,當前計算位值為1所對應的數(shù)據(jù)為有效數(shù)據(jù);否則,在下一位的計算中,當前計算位值為0所對應的數(shù)值為有效數(shù)據(jù)。
對于被淘汰的較大的數(shù)據(jù)個數(shù)的計算,在每一位的計算中,如果在當前位值為1的數(shù)據(jù)集合沒有進入下一位的計算,則說明在當前計算位值為1的數(shù)據(jù)被淘汰,將這個在當前位淘汰的數(shù)據(jù)個數(shù)與在前面的位計算中淘汰的數(shù)據(jù)個數(shù)累加,即為總的被淘汰的數(shù)據(jù)個數(shù)。
從最高位到最低位,依次進行上述的位操作,直到最后一位計算完之后,留下的仍然有效的數(shù)據(jù)就是所需要找到的中值。
本次硬件架構(gòu)主要由兩個部分組成:數(shù)據(jù)緩存模塊和位計算單元模塊,圖1展示了總體的一個硬件架構(gòu)圖。
圖1 總體設(shè)計硬件架構(gòu)圖
圖2 位計算單元結(jié)構(gòu)圖
對于數(shù)據(jù)緩存模塊,由于本次設(shè)計使用了5×5的中值濾波窗口,且為了提高處理速度要求整個硬件設(shè)計是一個流水線結(jié)構(gòu),也就是窗口內(nèi)25個數(shù)據(jù)會同時送入到下一個計算模塊中,因此需要4個RAM來緩存每一行的數(shù)據(jù),和5×5的寄存器陣列來緩存窗口內(nèi)的數(shù)據(jù)。RAM是調(diào)用FPGA的IP核來實現(xiàn)的。4個RAM的連接關(guān)系和數(shù)據(jù)流走向如圖1中虛線所示,d_1~d_5口同時輸出相鄰的5行在同一列下的數(shù)據(jù)到寄存器陣列中。
由數(shù)據(jù)輸入端逐行輸入圖像數(shù)據(jù),并按照虛線的箭頭方向依次送入RAM1~RAM4中。每一個周期從輸入端送入一個新的圖像數(shù)據(jù),所以d_1~d_5口每個周期都會輸出一組新的列數(shù)據(jù),再送入后面的窗口寄存器中。這樣就可以實現(xiàn)采樣窗口在每個時鐘的控制下可以沿被處理圖像數(shù)據(jù)的行方向逐個像素滑動[4]。對于邊界處的像素數(shù)據(jù),只考慮在圖像內(nèi)的窗口數(shù)據(jù)參與后續(xù)的計算單元。當RAM3和RAM4緩存滿時,即可以將窗口寄存器內(nèi)的數(shù)據(jù)送入后續(xù)的位計算單元來實現(xiàn)流水線的結(jié)構(gòu)設(shè)計。
這個寄存器陣列中的25個數(shù)據(jù)需要同時送入到下一個計算單元中,每個數(shù)據(jù)都是8 bit的,所有的25個數(shù)據(jù)都需要從最高位bit_7依次運算到最低位bit_0。所以一共需要進行8次相同的位計算,也就是需要8個位計算單元(bit Operation Unit,BOU)。
對于每一個位計算單元,結(jié)構(gòu)如圖2所示:假設(shè)25個窗口數(shù)據(jù)在同一位的值為d0,d1,…,d24,它們對應的使能信號是d0_en,d1_en,…,d24_en。最高位每個非0數(shù)據(jù)的使能信號都為1,否則為0。
將每一個數(shù)據(jù)在當前位的值di及其使能信號di_en相與,然后通過累加這25個數(shù)得到sum_c,這個值代表了當前位有效數(shù)據(jù)中值為1的數(shù)據(jù)個數(shù)。再將sum_c和sum_pre這個值累加起來的值sum與窗口內(nèi)非0數(shù)據(jù)總數(shù)的一半M進行比較,來計算標志位flag。若大于M,則flag為1,否則flag為0;當flag為1,則在下一個位計算單元中,當前位的有效數(shù)據(jù)中,值為1的數(shù)據(jù)的使能信號為1,且傳遞到下一個位計算單元中的淘汰的較大值個數(shù)為sum_pre_o;flag為0時,下一個位計算單元中,當前位的有效數(shù)據(jù)中,值為0的數(shù)據(jù)的使能信號為1,且傳遞到下一個位計算單元中的淘汰的較大值個數(shù)為sum_pre_o。上述等價為邏輯計算就是,在下一個位計算單元中,每個數(shù)據(jù)的使能信號:di_en_o=di ⊙ flag。
每個位計算單元在一個周期內(nèi)完成,因為每個像素是8 bit的數(shù)據(jù),所以需要8個周期才能完成一個窗口內(nèi)的中值排序輸出結(jié)果。位計算單元仍是流水線結(jié)構(gòu)。
根據(jù)上述的硬件架構(gòu)設(shè)計可知,每個位計算單元僅為1 bit的邏輯操作,位計算單元的個數(shù)等于數(shù)據(jù)的位寬,所以本文設(shè)計的中值濾波的硬件設(shè)計的一個重要優(yōu)點就是硬件資源的消耗和窗口模板大小以及數(shù)據(jù)的二進制表示位寬呈線性關(guān)系,這在中值濾波窗口較大的情況下有利于節(jié)約資源。
本次實驗使用了Xilinx公司下的硬件開發(fā)工具Vivado平臺來進行開發(fā),完成了架構(gòu)設(shè)計、代碼撰寫、功能仿真、綜合實現(xiàn)等一系列的開發(fā)流程。首先將一幅加了高斯噪聲的256×256分辨率大小的圖像通過MATLAB轉(zhuǎn)化為數(shù)據(jù)文件,來作為硬件設(shè)計的激勵文件,再經(jīng)過Vivado Simulator進行仿真來得到中值濾波后的數(shù)據(jù)結(jié)果,將仿真得到的數(shù)據(jù)再寫入.txt文件中,再用MATLAB來處理這個文件并顯示數(shù)據(jù)。所得到的結(jié)果如圖3所示,其中圖gray-img表示原圖,圖noise-img為加了高斯噪聲后的圖像,圖med-img為通過仿真得到的5×5窗口大小下的中值濾波的效果。
圖3 實驗結(jié)果圖
表1對比了一些常規(guī)的中值濾波算法和本文的設(shè)計在硬件實現(xiàn)時,所消耗的LUT(Look Up Table)硬件資源。從表中可見,在5×5窗口下的,本設(shè)計中的硬件資源LUT消耗遠低于一些傳統(tǒng)的中值濾波算法。
表1 中值濾波器硬件LUT資源使用情況對比
本文的硬件設(shè)計中,對于從第一個數(shù)據(jù)串行輸入到第一個有效中值輸出總共間隔了2×256+16=528個周期,所以對于處理一幅分辨率大小為256×256的圖像,采用本文的設(shè)計,在100 MHZ的處理頻率下,所花費時間為:(528+256×256)=0.66 ms,完全滿足實時性處理的要求。
為了解決數(shù)字圖像中常遇見的噪聲問題,本文從去噪性能、資源消耗、運算速度等方面綜合考慮,設(shè)計了一種基于位比較算法的中值濾波器的硬件架構(gòu),選擇了5×5大小的窗口,相對于一些常規(guī)的中值濾波算法,本文的設(shè)計大大地減小了硬件資源的消耗。本文所設(shè)計的結(jié)構(gòu)簡單,系統(tǒng)實時性高,硬件資源消耗較小,易于在FPGA上實現(xiàn),為高效率、低資源的中值濾波硬件設(shè)計提供了進一步的參考。