,,,,
(1.北華航天工業(yè)學(xué)院 電子與控制工程學(xué)院,廊坊 065000;2.北京航星機(jī)器制造公司)
X射線檢查儀是安全檢查工作中被廣泛應(yīng)用的裝置,操作人員通過對(duì)安檢圖像中被檢物品的形狀、顏色等進(jìn)行辨識(shí),不需要打開包裹就可以將其中的違禁物品檢查出來[1],其準(zhǔn)確度取決于安檢員的經(jīng)驗(yàn)、素質(zhì)以及是否視覺疲勞等因素,存在一定的安全隱患[2]。因此,對(duì)安檢圖像中危險(xiǎn)品進(jìn)行智能判斷,預(yù)先將危險(xiǎn)品標(biāo)注在安檢圖像上,能夠輔助安檢人員的工作,使安全檢查更加智能、高效、準(zhǔn)確。
由于X射線穿透不同有效原子序數(shù)的物體具有不同的衰減率,因此在安檢圖像上表現(xiàn)出不同的灰度級(jí)[3]。針對(duì)這一特性,便可區(qū)分出原子序數(shù)較大的金屬危險(xiǎn)品和其他物品。通過FPGA將采集到的安檢圖像數(shù)據(jù)進(jìn)行預(yù)處理,找到并標(biāo)記出疑似危險(xiǎn)品所在位置,不僅能夠滿足危險(xiǎn)品智能判讀的需求,還可以充分發(fā)揮FPGA的實(shí)時(shí)性和高效的并行處理能力,使安檢圖像更快地顯示在安檢人員面前。
X射線安檢機(jī)的原始圖像數(shù)據(jù)噪聲特點(diǎn)顯著,采用中值濾波的方法來對(duì)安檢圖像進(jìn)行去噪處理,同時(shí)保護(hù)圖像的邊緣[4-5]。為了減小采集到的安檢圖像的邊框?qū)μ幚斫Y(jié)果產(chǎn)生影響,在進(jìn)行中值濾波前,首先對(duì)安檢圖像進(jìn)行截取,去除了灰度值較高的外圍區(qū)域。為解決尋找安檢圖像中灰度值較小區(qū)域的問題,運(yùn)用了兩種灰度投影算法來尋找圖像中灰度值最小的區(qū)域:分塊灰度投影算法和灰度積分投影算法。對(duì)這兩種方法找到的疑似存在危險(xiǎn)品的圖像區(qū)域進(jìn)行評(píng)價(jià),選取更好的處理結(jié)果呈現(xiàn)在安檢人員的面前。算法的處理流程如圖1所示。
圖1 算法處理流程圖
首先分塊灰度投影算法需要對(duì)經(jīng)過中值濾波處理后的安檢圖像實(shí)行子區(qū)域的劃分。子區(qū)域按照陣列的形式進(jìn)行排列,以子區(qū)域?yàn)閱挝挥?jì)算每個(gè)子區(qū)域中灰度值的均值。考慮到安檢圖像的大小、子區(qū)域內(nèi)灰度信息的豐富程度以及子區(qū)域數(shù)量等因素,根據(jù)經(jīng)驗(yàn)判斷選取了大小為40×40的子區(qū)域[6]。然后對(duì)各個(gè)子區(qū)域的均值進(jìn)行排列,求出均值最小的區(qū)域所在陣列的地址,通過對(duì)這個(gè)地址分別進(jìn)行行列方向的擴(kuò)展,得到安檢X光機(jī)圖像中灰度值最小的區(qū)域。
灰度積分投影算法是根據(jù)圖像在水平和垂直方向上的投影分布特征,并結(jié)合安檢圖像特征對(duì)灰度值較小的區(qū)域進(jìn)行定位。首先對(duì)濾波后的安檢圖像分別進(jìn)行水平和垂直方向的投影,得到兩個(gè)方向上的像素灰度值的累加結(jié)果,然后根據(jù)投影結(jié)果中波峰波谷的分布及安檢圖像的特征定位灰度值較小的區(qū)域。
由于FPGA具有運(yùn)行速度快、并行運(yùn)行的優(yōu)勢(shì),能夠更多更好地集成安檢機(jī)中的圖像處理算法,因此選用FPGA來設(shè)計(jì)實(shí)現(xiàn)。為增強(qiáng)代碼的可移植性與可讀性,對(duì)中值濾波算法、分塊灰度投影算法和灰度積分投影算法進(jìn)行了模塊化設(shè)計(jì)。
該模塊的功能為通過分塊灰度投影算法尋找安檢圖像中灰度值最小的區(qū)域,主要分為劃分子區(qū)域模塊和最小值模塊。
劃分子區(qū)域模塊的功能是將安檢圖像劃分為若干個(gè)40×40的子區(qū)域,對(duì)每個(gè)區(qū)域中的像素值進(jìn)行累加并求出每個(gè)區(qū)域中像素值的均值。該模塊采用循環(huán)型除法器來進(jìn)行除法操作。循環(huán)型的除法器是典型的硬件除法器,在本次設(shè)計(jì)中除數(shù)和被除數(shù)的位寬為11位,除法器需要循環(huán)11次完成除法操作,并取得11位商和11位余數(shù),將取得的商輸出給最小值模塊。
最小值模塊的功能是根據(jù)劃分子區(qū)域模塊的輸出結(jié)果找到最小值及最小值所在的地址,然后對(duì)最小值所在地址分別進(jìn)行行列方向的擴(kuò)展,得到灰度值最小的區(qū)域,完成定位。
MATLAB求子區(qū)域均值的結(jié)果如圖2所示,F(xiàn)PGA的劃分子區(qū)域模塊仿真結(jié)果如圖3所示。通過驗(yàn)證比較,兩者對(duì)子區(qū)域求均值的結(jié)果是相同的,說明劃分子區(qū)域模塊的設(shè)計(jì)在FPGA上是正確的。
圖2 MATLAB求子區(qū)域均值結(jié)果
圖3 劃分子區(qū)域模塊仿真結(jié)果
該模塊的功能為通過灰度積分投影算法在安檢X光機(jī)圖像中尋找灰度值最小的區(qū)域,主要分為橫向投影模塊、縱向投影模塊和尋找峰值模塊。
2.2.1 橫向投影模塊
該模塊的功能為對(duì)圖像進(jìn)行水平方向的投影,即將圖像陣列的行數(shù)據(jù)的灰度值進(jìn)行累加。因?yàn)閄射線安檢機(jī)是由線陣式探測(cè)器來采集圖像數(shù)據(jù)的,即一行一行傳遞圖像數(shù)據(jù)[7]。所以可以直接對(duì)數(shù)據(jù)進(jìn)行累加,只需將每一行的數(shù)據(jù)累加完成后進(jìn)行復(fù)位即可。將每一行的數(shù)據(jù)累加結(jié)果輸出給尋找峰值模塊。
2.2.2 縱向投影模塊
該模塊的功能是對(duì)圖像進(jìn)行垂直方向的投影,即將圖像陣列的列數(shù)據(jù)的灰度值進(jìn)行累加。由于FPGA不能直接進(jìn)行縱向的求和,因此需要調(diào)用一個(gè)RAM來存儲(chǔ)每次求和的結(jié)果。縱向投影模塊的主要實(shí)現(xiàn)步驟為:首先將第一行數(shù)據(jù)寫入RAM中,當(dāng)?shù)诙袛?shù)據(jù)到來時(shí),拉高讀數(shù)據(jù)有效信號(hào),讀出之前存入RAM中的第一行數(shù)據(jù),并將兩行數(shù)據(jù)進(jìn)行累加,將累加結(jié)果再次存入RAM中,替換上一次的累加結(jié)果,當(dāng)最后一行數(shù)據(jù)讀完時(shí),RAM中寫入的便是縱向投影的最終結(jié)果。為了減少資源的消耗,橫向投影模塊和縱向投影模塊需要復(fù)用尋找峰值模塊,因此縱向投影的最終結(jié)果要在橫向投影尋找峰值之后再讀出。
圖像第191列至第208列的MATLAB縱向投影結(jié)果如圖4所示,F(xiàn)PGA縱向投影模塊仿真結(jié)果如圖5所示。通過驗(yàn)證比較,兩者進(jìn)行縱向投影后的結(jié)果是相同的,說明縱向投影模塊的設(shè)計(jì)在FPGA上是正確的。
圖4 MATLAB 縱向投影結(jié)果
圖5 縱向投影模塊仿真結(jié)果
2.2.3 尋找峰值模塊
該模塊的功能為實(shí)現(xiàn)MATLAB中的尋找峰值函數(shù)。由于MATLAB算法中對(duì)橫縱投影結(jié)果進(jìn)行尋找峰值,最終確定一個(gè)峰值,因此該算法可以簡(jiǎn)化為尋找橫縱投影結(jié)果中的最小值,從而可以調(diào)用分塊灰度投影算法中的尋找最小值模塊。最后對(duì)最小值所在地址分別進(jìn)行行列方向的擴(kuò)展,從而定位到灰度值最小的區(qū)域。
通過對(duì)比MATLAB和FPGA對(duì)同一幅安檢圖像進(jìn)行預(yù)處理后的像素值,來驗(yàn)證算法在FPGA上的設(shè)計(jì)是正確的。通過編寫測(cè)試文件將FPGA處理后的數(shù)據(jù)輸出到文本文件中,再由MATLAB形成圖像,由此便可觀察FPGA處理后的圖像效果。得到正確的仿真波形后,經(jīng)過綜合、布局布線,可以得到資源利用情況,如表1所列。
表1 資源利用情況
圖6為利用FPGA對(duì)安檢圖像進(jìn)行處理后的效果,白色方框內(nèi)即為最終找到安檢圖像中灰度值最小的區(qū)域。
圖6 FPGA處理圖像前后對(duì)比