林琦琛,姚敏,趙敏,趙增浩,吳蓉
(南京航空航天大學(xué) 自動(dòng)化學(xué)院,江蘇 南京 211106)
隨著可編程邏輯器件的發(fā)展以及芯片制造技術(shù)的更新,F(xiàn)PGA這種獨(dú)特的芯片結(jié)構(gòu)越發(fā)頻繁地被應(yīng)用于快速圖像處理中[1]。在資源上,F(xiàn)PGA擁有千萬(wàn)數(shù)量級(jí)別的門(mén)電路,可勝任復(fù)雜的圖像處理任務(wù);在結(jié)構(gòu)上,F(xiàn)PGA的可編程開(kāi)發(fā)方式打破了傳統(tǒng)定制電路固有的模式,可以靈活地完成電路設(shè)計(jì),其獨(dú)特的并行流水線結(jié)構(gòu)能快速高效地實(shí)現(xiàn)邊緣檢測(cè)等一系列高級(jí)圖像算法[2-4]。
在圖像處理中,邊緣被定義為像素點(diǎn)變化最為劇烈的點(diǎn)[5]。邊緣檢測(cè)的基本思想是在圖像中找尋符合的邊緣點(diǎn)后,將邊緣點(diǎn)通過(guò)特定算法描繪成輪廓信息,提取分界線從而達(dá)到分離圖像前景與背景的目的[6],邊緣檢測(cè)一般由濾波算子與邊緣算子組成,常用的濾波算子有中值濾波、高斯濾波;常用的邊緣算子有Sobel算子、Canny算子[7]等。根據(jù)PET圖像特點(diǎn),本文在FPGA上實(shí)現(xiàn)了一種基于中值濾波的多方向快速邊緣檢測(cè)優(yōu)化算法,可快速、有效地提取PET圖像的清晰邊緣。
在利用邊緣算子判定圖像邊緣之前,會(huì)對(duì)圖像進(jìn)行濾波處理,目的在于消除測(cè)量成像與環(huán)境變化所引入的噪聲帶來(lái)的虛假特征點(diǎn)。正電子圖像中的噪聲類(lèi)型通常為椒鹽噪聲,因此采用中值濾波對(duì)椒鹽噪聲進(jìn)行平滑處理。中值濾波屬于非線性濾波器的一種,在中值濾波模板滑過(guò)圖像時(shí),將模板中所有像素值進(jìn)行升序或降序排列,并取得序列的中位數(shù)作為對(duì)模板中心像素的濾波結(jié)果。本文給出一種改進(jìn)的快速并行排序方法,該方法無(wú)需實(shí)現(xiàn)序列的全排序,可在更短的時(shí)間內(nèi)使用更少的資源實(shí)現(xiàn)中值濾波。
設(shè)置中值濾波的模板大小為3×3,則從模板內(nèi)共計(jì)9個(gè)數(shù)據(jù)中確定中值的步驟如下:
1)將第1行的3個(gè)數(shù)據(jù)進(jìn)行比較,得到最大值max_1、中間值mid_1、最小值min_1,以此類(lèi)推,得到第2行數(shù)據(jù)的最大值max_2、中間值mid_2、最小值min_2與第3行數(shù)據(jù)的最大值max_3、中間值mid_3、最小值min_3。
2)將3行數(shù)據(jù)中的最大值進(jìn)行比較,取最小值min;將3行數(shù)據(jù)的中間值進(jìn)行比較,取中間值mid;將3行數(shù)據(jù)的最小值進(jìn)行比較,取最大值max。
3)最終從min、mid、max中取中間值即為中值濾波的結(jié)果F_mid。
以圖1為例,設(shè)置具體實(shí)例展示快速中值排序的步驟流程。
圖1 快速中值濾波步驟流程圖
本文實(shí)現(xiàn)的邊緣檢測(cè)的對(duì)象主要為正電子發(fā)射斷層掃描成像(PET)探測(cè)成像的工業(yè)件邊緣以及缺陷。為了保證圖像中缺陷與被測(cè)件中缺陷的位置匹配,邊緣算子需保留圖像的方向信息,因此選擇Sobel算子作為邊緣算子。傳統(tǒng)Sobel算子實(shí)現(xiàn)了對(duì)0°水平方向與90°垂直方向的邊緣信息的檢測(cè),模板如式(1)所示。
(1)
其中:Sx為0°水平方向模板;Sy為90°垂直方向的模板。
由于傳統(tǒng)Sobel只對(duì)圖像兩方向的邊緣進(jìn)行檢測(cè),這勢(shì)必會(huì)導(dǎo)致其他方向的邊緣信息丟失,影響最終的邊緣檢測(cè)效果[8]。因此在傳統(tǒng)兩方向Sobel算子的基礎(chǔ)上,增加45°與135°方向的邊緣模板,用四方向的改進(jìn)Sobel算子替代傳統(tǒng)兩方向Sobel算子以獲得更為完整的邊緣信息,45°與135°方向模板如式(2)所示。
(2)
則圖像在中心像素(x,y)的四方向邊緣強(qiáng)度G(x,y)可表示為
(3)
其中α為防止像素溢出的衰減因子,本文中取α=2。由于硬件不擅長(zhǎng)處理根號(hào)運(yùn)算,為了方便FPGA的實(shí)現(xiàn)將式(3)以一階范數(shù)近似表示為
(4)
圖2展示快速中值濾波步驟的同時(shí)也反映了中值濾波在FPGA上的設(shè)計(jì)思路。對(duì)于3×3的濾波模板而言,設(shè)計(jì)單位比較單元,實(shí)現(xiàn)對(duì)3個(gè)數(shù)據(jù)的全排序。根據(jù)圖2中的流程結(jié)構(gòu),共需設(shè)計(jì)7組比較單元,并將7組比較單元以3→3→1的形式組合成并行流水結(jié)構(gòu),如圖3所示。其中比較單元通過(guò)并行全比較排序電路實(shí)現(xiàn),其基本思路為:將每個(gè)數(shù)依次作為比較數(shù)與其他數(shù)進(jìn)行比較,通過(guò)比較結(jié)果進(jìn)行排序值的記錄,規(guī)定比較數(shù)大于排序數(shù)則排序值為1,比較數(shù)小于等于排序數(shù)則排序值為0。將每個(gè)比較數(shù)對(duì)應(yīng)的排序值相加,即可獲得相應(yīng)的排序序列??紤]到輸入數(shù)據(jù)中存在相同數(shù)據(jù)的情況,若仍以上述規(guī)則求解排序值,則可能會(huì)出現(xiàn)排序值求和相同的情況,造成邏輯電路的數(shù)據(jù)沖突。因此為避免輸入相同數(shù)據(jù)而產(chǎn)生數(shù)據(jù)沖突的情況,對(duì)電路輸入數(shù)據(jù)的優(yōu)先級(jí)和比較準(zhǔn)則進(jìn)行規(guī)定:
1)數(shù)據(jù)的優(yōu)先級(jí)從高到低依次為din_1、din_2、din_3。
圖2 中值濾波電路RTL結(jié)構(gòu)分析圖
圖3 并行全比較電路
2)當(dāng)優(yōu)先級(jí)高的數(shù)據(jù)作為比較數(shù),出現(xiàn)與優(yōu)先級(jí)低的數(shù)據(jù)比較結(jié)果相同的情況時(shí),排序值記為1。
3)當(dāng)優(yōu)先級(jí)低的數(shù)據(jù)作為比較數(shù),出現(xiàn)與優(yōu)先級(jí)高的數(shù)據(jù)比較結(jié)果相同的情況時(shí),排序值記為0。
以上規(guī)則保證了在輸入數(shù)據(jù)序列中存在相同數(shù)據(jù)的情況下,仍能得到有效的排序序列,避免邏輯電路數(shù)據(jù)沖突的產(chǎn)生。
輸入數(shù)據(jù)的判定電路由大于等于比較器和大于比較器的相互組合實(shí)現(xiàn)。電路經(jīng)過(guò)4個(gè)時(shí)鐘周期即可獲得對(duì)3個(gè)數(shù)據(jù)的排序結(jié)果。中值濾波模塊被設(shè)計(jì)為并行式輸入,這意味著在同一時(shí)鐘沿下需同時(shí)獲取相鄰的3行圖像數(shù)據(jù)。FPGA一般以時(shí)序?qū)R的技巧實(shí)現(xiàn),具體實(shí)現(xiàn)方法在下節(jié)詳細(xì)介紹。
數(shù)據(jù)時(shí)序?qū)R是FPGA處理空域圖像常用的技巧,簡(jiǎn)單來(lái)說(shuō),圖像數(shù)據(jù)是以數(shù)據(jù)流的形式輸入的,為了同時(shí)獲取多組相鄰行的數(shù)據(jù),需將數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行寄存,經(jīng)過(guò)指定深度的延時(shí)后輸出。對(duì)于一個(gè)3×3的模板,一般由正在輸入的數(shù)據(jù)流組合兩個(gè)級(jí)聯(lián)移位寄存器,實(shí)現(xiàn)3行數(shù)據(jù)的時(shí)序?qū)R。移位寄存器由Shift_RAM IP核提供,該IP核在一個(gè)時(shí)鐘周期內(nèi)可實(shí)現(xiàn)指定位數(shù)的移位操作,并在深度溢出后按照先進(jìn)先出的原則輸出寄存的數(shù)據(jù)。由于四方向Sobel算子的模板加權(quán)系數(shù)均由1、2、0組成,在FPGA中方向梯度計(jì)算時(shí),對(duì)于2次冪的乘法可由左移實(shí)現(xiàn),避免了乘法器的使用。特別的,由式(4)可知各方向的梯度均以絕對(duì)值的形式給出,為避免引入負(fù)數(shù)計(jì)算,本文使用分類(lèi)的方式,比較正負(fù)加權(quán)系數(shù)對(duì)應(yīng)的乘積和的絕對(duì)值大小,通過(guò)較大數(shù)減去較小數(shù)實(shí)現(xiàn)各方向梯度絕對(duì)值的運(yùn)算。為了加快圖像邊緣檢測(cè)過(guò)程,在FPGA上列了四方向模板的處理模塊,設(shè)計(jì)了四方向梯度值的并行計(jì)算電路,并根據(jù)不同方向模板的加權(quán)系數(shù)分配模塊I/O引腳輸入。四方向Sobel算子的并行電路結(jié)構(gòu)圖如圖4所示。四方向梯度值通過(guò)3個(gè)加法器進(jìn)行疊加,將疊加結(jié)果右移一位,實(shí)現(xiàn)對(duì)梯度的衰減處理,得出的梯度計(jì)算結(jié)果與設(shè)定的閾值相比較,大于閾值認(rèn)定為邊緣,小于閾值認(rèn)定為非邊緣。邊緣檢測(cè)算法的整體電路RTL結(jié)構(gòu)分析圖如圖5所示。其中:clk為驅(qū)動(dòng)時(shí)鐘信號(hào);per_clken為像素使能信號(hào);per_img_Y為像素?cái)?shù)據(jù)流;rst_n為異步復(fù)位信號(hào);post_clken驅(qū)使下一級(jí)電路的像素使能信號(hào);sobel_threshold為設(shè)定的閾值;post_img_bit為邊緣判定輸出,1代表邊緣,0代表非邊緣。
圖4 四方向Sobel算子的并行電路結(jié)構(gòu)圖
圖5 邊緣檢測(cè)電路RTL結(jié)構(gòu)圖
本文設(shè)計(jì)了兩組PET探測(cè)實(shí)驗(yàn),實(shí)驗(yàn)?zāi)P偷慕Y(jié)構(gòu)尺寸設(shè)計(jì)在Solidworks上完成。通過(guò)在實(shí)心長(zhǎng)方體上挖槽來(lái)仿真工業(yè)件內(nèi)部管道結(jié)構(gòu)及缺陷情況,從不同的角度驗(yàn)證邊緣檢測(cè)算法在FPGA上的實(shí)現(xiàn)效果與優(yōu)勢(shì)體現(xiàn)。
第一組實(shí)驗(yàn)為整體輪廓提取實(shí)驗(yàn),設(shè)計(jì)了工業(yè)件內(nèi)部最常見(jiàn)的直通道與環(huán)形管道模型,用以驗(yàn)證算法對(duì)于不同形狀邊緣的提取能力。其中,粗通道直徑為15 mm,細(xì)管道直徑為9 mm;環(huán)形管道內(nèi)徑為20 mm,外徑為30 mm,模型設(shè)計(jì)如圖6所示。
圖6 第一組實(shí)驗(yàn)?zāi)P?/p>
第二組實(shí)驗(yàn)為缺陷輪廓檢測(cè)實(shí)驗(yàn),在環(huán)形管道模型的基礎(chǔ)上,增加一處膨脹缺陷和一處不規(guī)則裂紋缺陷用以驗(yàn)證算法對(duì)于細(xì)小缺陷邊緣的提取能力。其中膨脹缺陷的最大膨脹深度為5 mm,裂紋缺陷的最小寬度為3 mm,最大寬度不超過(guò)5 mm,最大深度為10 mm,模型設(shè)計(jì)如圖7所示。
圖7 第二組實(shí)驗(yàn)?zāi)P?/p>
實(shí)驗(yàn)流程如圖8所示。使用注射器緩慢地將配置好的正電子溶液注入模型內(nèi)部,防止產(chǎn)生氣泡影響實(shí)驗(yàn)結(jié)果,每組實(shí)驗(yàn)PET探測(cè)器掃描時(shí)間均為5 min,最終通過(guò)以太網(wǎng)將實(shí)驗(yàn)獲得的PET圖像輸入到FPGA (XILINX ARTIXTM7 XC7A100T)中進(jìn)行邊緣檢測(cè)。
圖8 實(shí)驗(yàn)流程示意圖
兩組實(shí)驗(yàn)數(shù)據(jù)重建出的PET圖像如圖9(a)所示。由于重建算法中引入了窗口濾波器,因此在急劇而突出的強(qiáng)邊緣區(qū)域存在一定的振鈴條紋噪聲,重建出的切片圖尺寸為128×128,在FPGA上進(jìn)行邊緣檢測(cè)得到圖像邊緣檢測(cè)的處理效果圖如圖9(b)所示。
圖9 實(shí)驗(yàn)效果圖
邊緣檢測(cè)完成了圖像主要邊界信息的提取,完整保留缺陷信息的同時(shí)去除了圖像周?chē)恼疋彈l紋噪聲,能很好地反映出被測(cè)件的輪廓信息。圖10(b)能清晰地顯示出設(shè)計(jì)模型的膨脹與裂紋缺陷,盡管邊緣圖像會(huì)在被測(cè)物內(nèi)部產(chǎn)生部分誤判亮點(diǎn),但是并不影響圖像邊緣的整體提取效果。這表明在FPGA上能很好地實(shí)現(xiàn)圖像邊緣檢測(cè)操作,提取出的圖像邊緣符合檢測(cè)要求。經(jīng)多組重復(fù)實(shí)驗(yàn)可知,在FPGA上對(duì)單張重建圖像進(jìn)行預(yù)處理所需的平均時(shí)間為276 μs,與仿真結(jié)果基本一致。邊緣檢測(cè)算法在CPU上的執(zhí)行時(shí)間由MATLAB給出,對(duì)兩組實(shí)驗(yàn)圖像進(jìn)行了10次重復(fù)實(shí)驗(yàn),得到平均執(zhí)行時(shí)間為0.19 s,因此在FPGA上可實(shí)現(xiàn)對(duì)邊緣檢測(cè)算法700倍的加速。
本文在FPGA上設(shè)計(jì)了一種基于中值濾波的多方向Sobel邊緣檢測(cè)算法,實(shí)現(xiàn)了對(duì)PET圖像邊緣的快速提取,在得到清晰圖像邊緣信息的同時(shí),可在276 μs內(nèi)完成對(duì)圖像邊緣的提取,相比于同等價(jià)位CPU提升了上百倍的算法執(zhí)行速度。