程偉濤 郭來功 汪強(qiáng)
摘要: Sobel邊緣檢測技術(shù)是圖像處理中最基本的技術(shù)之一。傳統(tǒng)算法速度較慢且只有垂直和水平兩個(gè)方向的梯度,對于一些其他方向的邊緣檢測效果不明顯。文章設(shè)計(jì)了一種四方向(0°,45°,90°,135°)的Sobel算法來提高邊緣檢測的準(zhǔn)確性,針對傳統(tǒng)Sobel邊緣檢測算法閾值設(shè)置會(huì)出現(xiàn)偏差的缺點(diǎn),基于中值濾波,采用自適應(yīng)算法提高閾值準(zhǔn)確性。本設(shè)計(jì)采用Verilog語言編程。仿真結(jié)果表明:多方向閾值自適應(yīng)Sobel處理速度快,自適應(yīng)閾值合理,邊緣的完整性比傳統(tǒng)方法有顯著提高。
關(guān)鍵詞:Sobel;自適應(yīng)閾值;FPGA;MATLAB
中圖分類號(hào): TP391
文獻(xiàn)標(biāo)志碼:A
0 引言
傳統(tǒng)Sobel算子只有水平和垂直兩個(gè)方向[1]。傳統(tǒng)Sobel算法具有閾值無法自適應(yīng)的缺點(diǎn)。本實(shí)驗(yàn)采用多方向的自適應(yīng)閾值Sobel算法[2],利用中值濾波的思想來實(shí)現(xiàn)自適應(yīng)閾值。邊緣檢測在速度和準(zhǔn)確性上,已經(jīng)有多種提高方式[3]。應(yīng)用單片機(jī)、數(shù)字信號(hào)處理芯片來進(jìn)行圖像處理,采用串行方式,實(shí)時(shí)性和系統(tǒng)性能并不理想[4]。因此,實(shí)驗(yàn)采用FPGA的瞬時(shí)并行處理數(shù)據(jù)的特點(diǎn),可以滿足實(shí)時(shí)性要求[5]。FPGA這一特性的處理速度遠(yuǎn)遠(yuǎn)快于軟件處理平臺(tái)[6]。
1 傳統(tǒng)Sobel邊緣檢測
傳統(tǒng)Sobel算子是一階的邊緣檢測算子,采用的是x和y方向的兩個(gè)3×3的卷積因子,記為Gx 和Gy,卷積因子由圖1所示。
Gx為垂直梯度方向,用于檢測水平邊緣;Gy為水平梯度方向,用于檢測垂直邊緣[7],如圖1所示。將x和y兩個(gè)方向的卷積因子和原灰度圖像對應(yīng)位置的灰度值進(jìn)行卷積,f(x,y)為圖像的矩形窗口,見公式(1)和(2)。
選取一個(gè)3×3窗口的灰度值,記為:a1、a2、a3、b1、b2、b3、c1、c2和c3。將它們和x、y方向的卷積因子分別進(jìn)行卷積,得出結(jié)果就是x和y方向的灰度值,為g1和g2,根據(jù)公式(1)和(2)可得g1和g2的結(jié)果。根據(jù)公式(3)計(jì)算出這個(gè)3×3的窗口的梯度值大小,記為Gxy。但是考慮到FPGA的資源占用問題,本實(shí)驗(yàn)采用簡單的絕對值求和的方式來計(jì)算最終的梯度值。如公式(4):
Gxy=g1+|g2|(4)
實(shí)驗(yàn)計(jì)算出窗口的梯度值,然后進(jìn)行圖像分割。將公式(4)的結(jié)果和給出的閾值做比較,設(shè)閾值大小為T,大于閾值的賦值為1,小于閾值的賦值為0。
2 改進(jìn)的Sobel算子
2.1 四方向Sobel算子
傳統(tǒng)Sobel算子的檢測方向只有x和y兩個(gè)方向,當(dāng)像素點(diǎn)其他方向的幅值較高,而x和y方向的幅值較低,傳統(tǒng)算法無法檢測到邊緣點(diǎn)。本文在水平和豎直兩個(gè)方向的基礎(chǔ)上,增加了45°和135°兩個(gè)方向,同樣采用3×3大小的窗口,全部4個(gè)卷積因子如圖2所示,從左到右分別是0°、45°、90°和135°,分別記為G1、G2、G3和G4。
將0°、45°、90°和135°方向的算子與目標(biāo)窗口進(jìn)行卷積,得到改進(jìn)的梯度計(jì)算結(jié)果為記為g1,g2,g3,g4,見公式(8):
將所求的4個(gè)方向的差分的絕對值相加,即為最終的梯度值,如公式(9)所示。
Gxy=|g1|+|g2|+|g3|+|g4|(9)
2.2 自適應(yīng)閾值
計(jì)算自適應(yīng)閾值通常采用大津法或基于直方圖的方法等,這一類的算法較為復(fù)雜,一般應(yīng)用于軟件實(shí)現(xiàn),而在硬件上這一類方法不太容易實(shí)現(xiàn)。本文參考的是中值濾波的思想,考慮到圖像灰度值都是非負(fù)數(shù),所以比較大小對的方式可以直接使用有符號(hào)數(shù)減法來表示。同時(shí),本研究對張琪等[5]的方法做出改進(jìn):第一步,在3×3的窗口中,先將每一行按照從大到小的順序排列,得到一個(gè)新矩陣。第二步,找出這個(gè)新矩陣第一列的最大值(MAX_MAX)和最小值(MAX_MIN),第二列的中間值(MID_MID)以及第三列的最大值(MIN_MAX)和最小值(MIN_MIN)。第三步,找出第二步5個(gè)數(shù)值的中值,即為閾值T。這種方法所需要比較的數(shù)值較多,步驟較為煩瑣,因此對第二步做出改進(jìn)。第二步中第一列的最大值就已經(jīng)確定為第三步的最大值,同理第三列的最小值也是第三步的最小值,因此可以直接將這兩個(gè)數(shù)值去掉,在MAX_MIN,MID_MID,MIN_MAX中比較出中值。
3 系統(tǒng)框架
3.1 FIFO數(shù)據(jù)處理
Sobel數(shù)據(jù)處理采用的FIFO求和的思想。本實(shí)驗(yàn)選取一個(gè)3×3的窗口數(shù)據(jù),因此采用FIFO來處理數(shù)據(jù)[8]。兩個(gè)FIFO的作用是緩存兩行,可以得到三行數(shù)據(jù)。這里用到了FPGA的流水線特性,其優(yōu)點(diǎn)可以實(shí)現(xiàn)數(shù)據(jù)的無縫緩存和處理,不僅節(jié)約了緩存區(qū)空間,而且提高了數(shù)據(jù)流的處理速度[9]。
將數(shù)據(jù)寫入寄存器之后,需要將寄存器里的數(shù)據(jù)進(jìn)行Sobel處理,因此,再次定義一個(gè)讀出標(biāo)志信號(hào),當(dāng)行計(jì)數(shù)器計(jì)數(shù)到第三行的時(shí)候,將緩存的數(shù)據(jù)往外讀出。對數(shù)據(jù)進(jìn)行Sobel運(yùn)算和閾值計(jì)算。
3.2 Sobel模塊
數(shù)據(jù)由FIFO進(jìn)入Sobel模塊之后,由于時(shí)序信號(hào)需要延遲一個(gè)周期,因此,每一列的數(shù)據(jù)都會(huì)比前一列慢一個(gè)時(shí)鐘周期,當(dāng)FPGA標(biāo)志信號(hào)有效時(shí),可以得出Sobel計(jì)算所需要的9個(gè)數(shù)據(jù)。根據(jù)公式(8)和公式(9),計(jì)算出灰度值。模塊由一個(gè)最高位判斷框和一個(gè)數(shù)據(jù)選擇器組成,當(dāng)最高位是0時(shí),表示正數(shù),此時(shí)輸出的絕對值就是本身,當(dāng)最高位是1的時(shí)候,表示為負(fù)數(shù),就需要對負(fù)數(shù)進(jìn)行取反碼再加一位。利用加法器和減法器計(jì)算出g1,g2,g3,g4,然后對這4個(gè)梯度值進(jìn)行絕對值求和,所得結(jié)果為梯度值gxy。
3.3 閾值自適應(yīng)模塊
4個(gè)方向的Sobel算法抗噪能力并沒有多高,因此使用自適應(yīng)閾值盡可能地避免噪聲的干擾。本實(shí)驗(yàn)根據(jù)中值濾波的原理,找出窗口的中值作為圖像的閾值,這種方法相對簡單,易于實(shí)現(xiàn)。實(shí)驗(yàn)利用FPGA的并行特性,信號(hào)進(jìn)入Sobel模塊之后,分成兩個(gè)方向,一個(gè)方向是進(jìn)入Sobel灰度值計(jì)算模塊,另一部分是進(jìn)行閾值自適應(yīng)。
3.4 邊緣判定模塊
邊緣判定條件是閾值比較。計(jì)算所得的灰度值和自適應(yīng)閾值模塊給出的常數(shù)做出對比,大于這個(gè)常數(shù),則判斷為邊緣,高電平為FF,顯示為白色;小于或者等于給定的閾值,則判斷不是邊緣,為低電平00,顯示為黑色。
4 實(shí)驗(yàn)結(jié)果與分析
本過FPGA對圖像進(jìn)行邊緣檢測。首先使用
MATLAB2018a版本對圖像進(jìn)行預(yù)處理。所處操作環(huán)境是Windows10系統(tǒng),CPU為i5-7300,GPU為1050Ti。采用的數(shù)據(jù)是一個(gè)大小為541×541的Lena灰度圖。經(jīng)過QuartusⅡ13.1軟件編寫Verilog HDL語言來實(shí)現(xiàn)數(shù)據(jù)的傳遞、處理,通過Modelsim10.4和MATLAB雙重驗(yàn)證算法的可行性。在Verilog的測試文件中,新建一個(gè)txt文件,將最終仿真的數(shù)據(jù)存入這個(gè)txt文件,然后在MATLAB中打開這個(gè)txt文件,得到最終的邊緣檢測圖。圖片選用的是一張541×541的Lena圖。實(shí)驗(yàn)結(jié)果如圖3所示。從a,b,c,d依次是原灰度圖、人為設(shè)置閾值為116的傳統(tǒng)Sobel檢測圖、認(rèn)為設(shè)置閾值為70的傳統(tǒng)Sobel檢測圖以及改進(jìn)之后的自適應(yīng)閾值的Sobel檢測圖。結(jié)合原圖發(fā)現(xiàn),圖3(a)對比圖3(d),兩者使用同樣的閾值,有4處比較明顯的邊緣沒有檢測到,由圖中紅色圈標(biāo)記可以看出。圖3(c)和圖3(d)也有3處比較明顯的差距??傮w來說都是在45°和135°方向上差距明顯,邊緣的完整性比兩方向的Sobel檢測算法好。在運(yùn)算速度上,F(xiàn)PGA的所用時(shí)間約為0.05 s,而傳統(tǒng)Sobel時(shí)間約為2.63 s,速度提升了50倍。
5 結(jié)語
本文分析了邊緣檢測的作用以及傳統(tǒng)Sobel邊緣檢測算子的優(yōu)缺點(diǎn),并針對缺點(diǎn)做出兩處改進(jìn)。第一個(gè)改進(jìn)就是將邊緣檢測的方向由x和y兩個(gè)方向增加到0°、45°、90°和135°4個(gè)方向。第二個(gè)是對閾值設(shè)定做出改進(jìn),將原先的人為設(shè)置改成自適應(yīng)閾值。在速度方面,結(jié)合FPGA并行特性和流水性,運(yùn)行速度高于軟件的運(yùn)行速度,處理一張大小為541×541的圖片所用時(shí)間僅為0.05 s,而軟件平臺(tái)的處理時(shí)間為2.6 s,速度提升了50倍。對比傳統(tǒng)Sobel算子,改進(jìn)之后檢測的邊緣效果明顯優(yōu)于傳統(tǒng)算法。
參考文獻(xiàn)
[1]劉逢丁,曹杰,王營博,等.激光雷達(dá)距離像的實(shí)時(shí)邊緣檢測[J].光學(xué)技術(shù),2021(4):404-409.
[2]陳磊,葉焱.多方向自適應(yīng)閾值邊緣檢測算法及FPGA并行實(shí)現(xiàn)[J].無線通信技術(shù),2019(4):21-26.
[3]ALMOMANY A,ALOMARI A M,JARRAH A,et al.An OpenCL-based parallel acceleration of a Sobel edge detection algorithm Using Intel FPGA technology[J].South African Computer Journal,2020(1):3-26.
[4]祁欣,陳劍鋒,羅偉林.圖像預(yù)處理算法的FPGA實(shí)現(xiàn)[J].國外電子測量技術(shù),2021(2):102-107.
[5]張棋,賈方秀,殷婷婷.基于改進(jìn)Sobel算法的實(shí)時(shí)圖像邊緣檢測系統(tǒng)設(shè)計(jì)[J].儀表技術(shù)與傳感器,2018(2):101-104,108.
[6]葉惠嬌,冉全,成果.FPGA圖像邊緣檢測系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2018(12):237-240,302.
[7]譚媛,黃輝先,徐建閩,等.基于改進(jìn)Sobel算子的遙感圖像道路邊緣檢測方法[J].國土資源遙感,2016(3):7-11.
[8]SUDHARSHAN K M.Design of a Sobel Edge Detection Algorithm on FPGA[J].Turkish Journal of Computer and Mathematics Education(TURCOMAT),2021(12):2458-2462.
[9]陳鑫元,李筠,楊海馬,等.自適應(yīng)閾值圖像二值化及形態(tài)學(xué)處理的FPGA實(shí)現(xiàn)[J].電子測量技術(shù),2016(7):67-71.
(編輯 王永超)
Implementation of multidirectional threshold adaptive Sobel algorithm based on FPGA
Cheng Weitao, Guo Laigong, Wang Qiang
(School of Electrical and Information Engineering,Anhui University of Science and Technology, Huainan 232001, China)
Abstract: Sobel edge detection technology is one of the most basic technologies in image processing. The traditional algorithm is slow and has only two gradients in the vertical and horizontal directions. The effect of edge detection in some other directions is not obvious. This paper designs a four-direction (0°, 45°, 90°, 135°) Sobel algorithm to improve the accuracy of edge detection. Aiming at the defect that the threshold setting of the traditional Sobel edge detection algorithm may deviate, based on median filtering, adaptive algorithm is adopted to improve the accuracy of the threshold. The design is programmed in Verilog language. The simulation results show that the multi-directional threshold adaptive Sobel processing speed is fast, the adaptive threshold is reasonable, and the integrity of the edge is significantly improved than the traditional method.
Key words: Sobel; adaptive threshold; FPGA; MATLAB