林琦琛,姚敏,趙敏,趙增浩,吳蓉
(南京航空航天大學 自動化學院,江蘇 南京 211106)
隨著可編程邏輯器件的發展以及芯片制造技術的更新,FPGA這種獨特的芯片結構越發頻繁地被應用于快速圖像處理中[1]。在資源上,FPGA擁有千萬數量級別的門電路,可勝任復雜的圖像處理任務;在結構上,FPGA的可編程開發方式打破了傳統定制電路固有的模式,可以靈活地完成電路設計,其獨特的并行流水線結構能快速高效地實現邊緣檢測等一系列高級圖像算法[2-4]。
在圖像處理中,邊緣被定義為像素點變化最為劇烈的點[5]。邊緣檢測的基本思想是在圖像中找尋符合的邊緣點后,將邊緣點通過特定算法描繪成輪廓信息,提取分界線從而達到分離圖像前景與背景的目的[6],邊緣檢測一般由濾波算子與邊緣算子組成,常用的濾波算子有中值濾波、高斯濾波;常用的邊緣算子有Sobel算子、Canny算子[7]等。根據PET圖像特點,本文在FPGA上實現了一種基于中值濾波的多方向快速邊緣檢測優化算法,可快速、有效地提取PET圖像的清晰邊緣。
在利用邊緣算子判定圖像邊緣之前,會對圖像進行濾波處理,目的在于消除測量成像與環境變化所引入的噪聲帶來的虛假特征點。正電子圖像中的噪聲類型通常為椒鹽噪聲,因此采用中值濾波對椒鹽噪聲進行平滑處理。中值濾波屬于非線性濾波器的一種,在中值濾波模板滑過圖像時,將模板中所有像素值進行升序或降序排列,并取得序列的中位數作為對模板中心像素的濾波結果。本文給出一種改進的快速并行排序方法,該方法無需實現序列的全排序,可在更短的時間內使用更少的資源實現中值濾波。
設置中值濾波的模板大小為3×3,則從模板內共計9個數據中確定中值的步驟如下:
1)將第1行的3個數據進行比較,得到最大值max_1、中間值mid_1、最小值min_1,以此類推,得到第2行數據的最大值max_2、中間值mid_2、最小值min_2與第3行數據的最大值max_3、中間值mid_3、最小值min_3。
2)將3行數據中的最大值進行比較,取最小值min;將3行數據的中間值進行比較,取中間值mid;將3行數據的最小值進行比較,取最大值max。
3)最終從min、mid、max中取中間值即為中值濾波的結果F_mid。
以圖1為例,設置具體實例展示快速中值排序的步驟流程。

圖1 快速中值濾波步驟流程圖
本文實現的邊緣檢測的對象主要為正電子發射斷層掃描成像(PET)探測成像的工業件邊緣以及缺陷。為了保證圖像中缺陷與被測件中缺陷的位置匹配,邊緣算子需保留圖像的方向信息,因此選擇Sobel算子作為邊緣算子。傳統Sobel算子實現了對0°水平方向與90°垂直方向的邊緣信息的檢測,模板如式(1)所示。
(1)
其中:Sx為0°水平方向模板;Sy為90°垂直方向的模板。
由于傳統Sobel只對圖像兩方向的邊緣進行檢測,這勢必會導致其他方向的邊緣信息丟失,影響最終的邊緣檢測效果[8]。因此在傳統兩方向Sobel算子的基礎上,增加45°與135°方向的邊緣模板,用四方向的改進Sobel算子替代傳統兩方向Sobel算子以獲得更為完整的邊緣信息,45°與135°方向模板如式(2)所示。
(2)
則圖像在中心像素(x,y)的四方向邊緣強度G(x,y)可表示為
(3)
其中α為防止像素溢出的衰減因子,本文中取α=2。由于硬件不擅長處理根號運算,為了方便FPGA的實現將式(3)以一階范數近似表示為
(4)
圖2展示快速中值濾波步驟的同時也反映了中值濾波在FPGA上的設計思路。對于3×3的濾波模板而言,設計單位比較單元,實現對3個數據的全排序。根據圖2中的流程結構,共需設計7組比較單元,并將7組比較單元以3→3→1的形式組合成并行流水結構,如圖3所示。其中比較單元通過并行全比較排序電路實現,其基本思路為:將每個數依次作為比較數與其他數進行比較,通過比較結果進行排序值的記錄,規定比較數大于排序數則排序值為1,比較數小于等于排序數則排序值為0。將每個比較數對應的排序值相加,即可獲得相應的排序序列。考慮到輸入數據中存在相同數據的情況,若仍以上述規則求解排序值,則可能會出現排序值求和相同的情況,造成邏輯電路的數據沖突。因此為避免輸入相同數據而產生數據沖突的情況,對電路輸入數據的優先級和比較準則進行規定:
1)數據的優先級從高到低依次為din_1、din_2、din_3。

圖2 中值濾波電路RTL結構分析圖

圖3 并行全比較電路
2)當優先級高的數據作為比較數,出現與優先級低的數據比較結果相同的情況時,排序值記為1。
3)當優先級低的數據作為比較數,出現與優先級高的數據比較結果相同的情況時,排序值記為0。
以上規則保證了在輸入數據序列中存在相同數據的情況下,仍能得到有效的排序序列,避免邏輯電路數據沖突的產生。
輸入數據的判定電路由大于等于比較器和大于比較器的相互組合實現。電路經過4個時鐘周期即可獲得對3個數據的排序結果。中值濾波模塊被設計為并行式輸入,這意味著在同一時鐘沿下需同時獲取相鄰的3行圖像數據。FPGA一般以時序對齊的技巧實現,具體實現方法在下節詳細介紹。
數據時序對齊是FPGA處理空域圖像常用的技巧,簡單來說,圖像數據是以數據流的形式輸入的,為了同時獲取多組相鄰行的數據,需將數據流中的數據進行寄存,經過指定深度的延時后輸出。對于一個3×3的模板,一般由正在輸入的數據流組合兩個級聯移位寄存器,實現3行數據的時序對齊。移位寄存器由Shift_RAM IP核提供,該IP核在一個時鐘周期內可實現指定位數的移位操作,并在深度溢出后按照先進先出的原則輸出寄存的數據。由于四方向Sobel算子的模板加權系數均由1、2、0組成,在FPGA中方向梯度計算時,對于2次冪的乘法可由左移實現,避免了乘法器的使用。特別的,由式(4)可知各方向的梯度均以絕對值的形式給出,為避免引入負數計算,本文使用分類的方式,比較正負加權系數對應的乘積和的絕對值大小,通過較大數減去較小數實現各方向梯度絕對值的運算。為了加快圖像邊緣檢測過程,在FPGA上列了四方向模板的處理模塊,設計了四方向梯度值的并行計算電路,并根據不同方向模板的加權系數分配模塊I/O引腳輸入。四方向Sobel算子的并行電路結構圖如圖4所示。四方向梯度值通過3個加法器進行疊加,將疊加結果右移一位,實現對梯度的衰減處理,得出的梯度計算結果與設定的閾值相比較,大于閾值認定為邊緣,小于閾值認定為非邊緣。邊緣檢測算法的整體電路RTL結構分析圖如圖5所示。其中:clk為驅動時鐘信號;per_clken為像素使能信號;per_img_Y為像素數據流;rst_n為異步復位信號;post_clken驅使下一級電路的像素使能信號;sobel_threshold為設定的閾值;post_img_bit為邊緣判定輸出,1代表邊緣,0代表非邊緣。

圖4 四方向Sobel算子的并行電路結構圖

圖5 邊緣檢測電路RTL結構圖
本文設計了兩組PET探測實驗,實驗模型的結構尺寸設計在Solidworks上完成。通過在實心長方體上挖槽來仿真工業件內部管道結構及缺陷情況,從不同的角度驗證邊緣檢測算法在FPGA上的實現效果與優勢體現。
第一組實驗為整體輪廓提取實驗,設計了工業件內部最常見的直通道與環形管道模型,用以驗證算法對于不同形狀邊緣的提取能力。其中,粗通道直徑為15 mm,細管道直徑為9 mm;環形管道內徑為20 mm,外徑為30 mm,模型設計如圖6所示。

圖6 第一組實驗模型
第二組實驗為缺陷輪廓檢測實驗,在環形管道模型的基礎上,增加一處膨脹缺陷和一處不規則裂紋缺陷用以驗證算法對于細小缺陷邊緣的提取能力。其中膨脹缺陷的最大膨脹深度為5 mm,裂紋缺陷的最小寬度為3 mm,最大寬度不超過5 mm,最大深度為10 mm,模型設計如圖7所示。

圖7 第二組實驗模型
實驗流程如圖8所示。使用注射器緩慢地將配置好的正電子溶液注入模型內部,防止產生氣泡影響實驗結果,每組實驗PET探測器掃描時間均為5 min,最終通過以太網將實驗獲得的PET圖像輸入到FPGA (XILINX ARTIXTM7 XC7A100T)中進行邊緣檢測。

圖8 實驗流程示意圖
兩組實驗數據重建出的PET圖像如圖9(a)所示。由于重建算法中引入了窗口濾波器,因此在急劇而突出的強邊緣區域存在一定的振鈴條紋噪聲,重建出的切片圖尺寸為128×128,在FPGA上進行邊緣檢測得到圖像邊緣檢測的處理效果圖如圖9(b)所示。

圖9 實驗效果圖
邊緣檢測完成了圖像主要邊界信息的提取,完整保留缺陷信息的同時去除了圖像周圍的振鈴條紋噪聲,能很好地反映出被測件的輪廓信息。圖10(b)能清晰地顯示出設計模型的膨脹與裂紋缺陷,盡管邊緣圖像會在被測物內部產生部分誤判亮點,但是并不影響圖像邊緣的整體提取效果。這表明在FPGA上能很好地實現圖像邊緣檢測操作,提取出的圖像邊緣符合檢測要求。經多組重復實驗可知,在FPGA上對單張重建圖像進行預處理所需的平均時間為276 μs,與仿真結果基本一致。邊緣檢測算法在CPU上的執行時間由MATLAB給出,對兩組實驗圖像進行了10次重復實驗,得到平均執行時間為0.19 s,因此在FPGA上可實現對邊緣檢測算法700倍的加速。
本文在FPGA上設計了一種基于中值濾波的多方向Sobel邊緣檢測算法,實現了對PET圖像邊緣的快速提取,在得到清晰圖像邊緣信息的同時,可在276 μs內完成對圖像邊緣的提取,相比于同等價位CPU提升了上百倍的算法執行速度。