,,,,
(1.北華航天工業學院 電子與控制工程學院,廊坊 065000;2.北京航星機器制造公司)
X射線檢查儀是安全檢查工作中被廣泛應用的裝置,操作人員通過對安檢圖像中被檢物品的形狀、顏色等進行辨識,不需要打開包裹就可以將其中的違禁物品檢查出來[1],其準確度取決于安檢員的經驗、素質以及是否視覺疲勞等因素,存在一定的安全隱患[2]。因此,對安檢圖像中危險品進行智能判斷,預先將危險品標注在安檢圖像上,能夠輔助安檢人員的工作,使安全檢查更加智能、高效、準確。
由于X射線穿透不同有效原子序數的物體具有不同的衰減率,因此在安檢圖像上表現出不同的灰度級[3]。針對這一特性,便可區分出原子序數較大的金屬危險品和其他物品。通過FPGA將采集到的安檢圖像數據進行預處理,找到并標記出疑似危險品所在位置,不僅能夠滿足危險品智能判讀的需求,還可以充分發揮FPGA的實時性和高效的并行處理能力,使安檢圖像更快地顯示在安檢人員面前。
X射線安檢機的原始圖像數據噪聲特點顯著,采用中值濾波的方法來對安檢圖像進行去噪處理,同時保護圖像的邊緣[4-5]。為了減小采集到的安檢圖像的邊框對處理結果產生影響,在進行中值濾波前,首先對安檢圖像進行截取,去除了灰度值較高的外圍區域。為解決尋找安檢圖像中灰度值較小區域的問題,運用了兩種灰度投影算法來尋找圖像中灰度值最小的區域:分塊灰度投影算法和灰度積分投影算法。對這兩種方法找到的疑似存在危險品的圖像區域進行評價,選取更好的處理結果呈現在安檢人員的面前。算法的處理流程如圖1所示。

圖1 算法處理流程圖
首先分塊灰度投影算法需要對經過中值濾波處理后的安檢圖像實行子區域的劃分。子區域按照陣列的形式進行排列,以子區域為單位計算每個子區域中灰度值的均值。考慮到安檢圖像的大小、子區域內灰度信息的豐富程度以及子區域數量等因素,根據經驗判斷選取了大小為40×40的子區域[6]。然后對各個子區域的均值進行排列,求出均值最小的區域所在陣列的地址,通過對這個地址分別進行行列方向的擴展,得到安檢X光機圖像中灰度值最小的區域。
灰度積分投影算法是根據圖像在水平和垂直方向上的投影分布特征,并結合安檢圖像特征對灰度值較小的區域進行定位。首先對濾波后的安檢圖像分別進行水平和垂直方向的投影,得到兩個方向上的像素灰度值的累加結果,然后根據投影結果中波峰波谷的分布及安檢圖像的特征定位灰度值較小的區域。
由于FPGA具有運行速度快、并行運行的優勢,能夠更多更好地集成安檢機中的圖像處理算法,因此選用FPGA來設計實現。為增強代碼的可移植性與可讀性,對中值濾波算法、分塊灰度投影算法和灰度積分投影算法進行了模塊化設計。
該模塊的功能為通過分塊灰度投影算法尋找安檢圖像中灰度值最小的區域,主要分為劃分子區域模塊和最小值模塊。
劃分子區域模塊的功能是將安檢圖像劃分為若干個40×40的子區域,對每個區域中的像素值進行累加并求出每個區域中像素值的均值。該模塊采用循環型除法器來進行除法操作。循環型的除法器是典型的硬件除法器,在本次設計中除數和被除數的位寬為11位,除法器需要循環11次完成除法操作,并取得11位商和11位余數,將取得的商輸出給最小值模塊。
最小值模塊的功能是根據劃分子區域模塊的輸出結果找到最小值及最小值所在的地址,然后對最小值所在地址分別進行行列方向的擴展,得到灰度值最小的區域,完成定位。
MATLAB求子區域均值的結果如圖2所示,FPGA的劃分子區域模塊仿真結果如圖3所示。通過驗證比較,兩者對子區域求均值的結果是相同的,說明劃分子區域模塊的設計在FPGA上是正確的。

圖2 MATLAB求子區域均值結果

圖3 劃分子區域模塊仿真結果
該模塊的功能為通過灰度積分投影算法在安檢X光機圖像中尋找灰度值最小的區域,主要分為橫向投影模塊、縱向投影模塊和尋找峰值模塊。
2.2.1 橫向投影模塊
該模塊的功能為對圖像進行水平方向的投影,即將圖像陣列的行數據的灰度值進行累加。因為X射線安檢機是由線陣式探測器來采集圖像數據的,即一行一行傳遞圖像數據[7]。所以可以直接對數據進行累加,只需將每一行的數據累加完成后進行復位即可。將每一行的數據累加結果輸出給尋找峰值模塊。
2.2.2 縱向投影模塊
該模塊的功能是對圖像進行垂直方向的投影,即將圖像陣列的列數據的灰度值進行累加。由于FPGA不能直接進行縱向的求和,因此需要調用一個RAM來存儲每次求和的結果。縱向投影模塊的主要實現步驟為:首先將第一行數據寫入RAM中,當第二行數據到來時,拉高讀數據有效信號,讀出之前存入RAM中的第一行數據,并將兩行數據進行累加,將累加結果再次存入RAM中,替換上一次的累加結果,當最后一行數據讀完時,RAM中寫入的便是縱向投影的最終結果。為了減少資源的消耗,橫向投影模塊和縱向投影模塊需要復用尋找峰值模塊,因此縱向投影的最終結果要在橫向投影尋找峰值之后再讀出。
圖像第191列至第208列的MATLAB縱向投影結果如圖4所示,FPGA縱向投影模塊仿真結果如圖5所示。通過驗證比較,兩者進行縱向投影后的結果是相同的,說明縱向投影模塊的設計在FPGA上是正確的。

圖4 MATLAB 縱向投影結果

圖5 縱向投影模塊仿真結果
2.2.3 尋找峰值模塊
該模塊的功能為實現MATLAB中的尋找峰值函數。由于MATLAB算法中對橫縱投影結果進行尋找峰值,最終確定一個峰值,因此該算法可以簡化為尋找橫縱投影結果中的最小值,從而可以調用分塊灰度投影算法中的尋找最小值模塊。最后對最小值所在地址分別進行行列方向的擴展,從而定位到灰度值最小的區域。
通過對比MATLAB和FPGA對同一幅安檢圖像進行預處理后的像素值,來驗證算法在FPGA上的設計是正確的。通過編寫測試文件將FPGA處理后的數據輸出到文本文件中,再由MATLAB形成圖像,由此便可觀察FPGA處理后的圖像效果。得到正確的仿真波形后,經過綜合、布局布線,可以得到資源利用情況,如表1所列。

表1 資源利用情況
圖6為利用FPGA對安檢圖像進行處理后的效果,白色方框內即為最終找到安檢圖像中灰度值最小的區域。

圖6 FPGA處理圖像前后對比
