摘要:針對圖像邊緣檢測,傳統的Canny算法通常采用高斯濾波和固定雙閾值的方式來處理,并使用2×2小鄰域窗口計算梯度幅值,這導致該算法易產生假邊緣、無法適應復雜多變的環境。基于此,提出了基于現場可編程邏輯門陣列(field programmable gate array,FPGA)的改進Canny算法,設計了視頻圖像邊緣實時檢測系統。采用快速自適應中值濾波代替高斯濾波,使銳化圖像邊緣保留了更多細節;使用4方向梯度模板代替2×2小鄰域窗口計算梯度幅值,有效降低了噪聲敏感性;引進線性插值算法與局部自適應閾值算法來進行非極大值抑制(non-maximum suppression,NMS)以生成最大和最小閾值,成功提高了算法的自適應能力。結果表明,與傳統Canny算法相比,改進Canny算法能夠獲取更為完整的邊緣信息,且具備較好的自適應能力和實時性。
關鍵詞:邊緣檢測;FPGA;改進Canny算法
中圖分類號:TN79+1 文獻標識碼:A
0 引言
邊緣檢測是圖形圖像處理、計算機視覺和機器視覺領域的一項基本工具,常用于特征提取與特征檢測,旨在捕捉亮度急劇變化的區域[1]。在基于現場可編程邏輯門陣列(field programmable gate array,FPGA)的邊緣檢測算法實現中,Sobel算法、改進Sobel算法、Canny算法等得到了持續應用。其中,Sobel算法的抗噪性較弱,且在檢測時無法保證能夠獲取圖像的邊緣信息。而傳統的Canny算法使用高斯濾波,會增加丟失弱邊緣和出現孤立邊緣的概率;使用2×2小鄰域窗口計算得到的有限差分均值來表示梯度幅值,易導致假邊緣的產生;采用固定的雙閾值進行計算,無法適應復雜多變的環境。在這種背景下,本文對Canny算法進行改進,以實現基于FPGA的圖像邊緣檢測,在保證圖像實時性、抗噪性的同時,還能保留更完整的圖像邊緣細節。
1 Canny算法原理及改進措施
1.1 傳統Canny算法原理
Canny 算法具有兩個明顯的特征:一是錯誤率低,可以標記出更多的實際邊緣,同時能夠最大限度地降低噪聲造成的影響;二是響應性小,這意味著在只有一個邊緣點的情況下,不會檢測到多個像素邊緣[2]。使用傳統Canny算法進行邊緣檢測的過程如下。
(1)對于彩色圖像,在進行邊緣檢測之前必須將其轉換為灰色圖像。
(2)對原圖像進行高斯濾波,并根據具體情況合理選擇半徑。
(3)采用2×2鄰域一階偏導的有限差分來計算經過高斯平滑后的圖像梯度的幅度和方向[3]。
(4)引入線性插值算法進行非極大值抑制(non-maximum suppression,NMS),實現邊緣細化。NMS在梯度方向上,能夠保留灰度值變化最大的像素點,同時去除其他像素點,使得邊緣更加清晰[4]。
(5)采用雙閾值進行邊緣連接,通過比較邊緣像素點的閾值和最大、最小閾值的大小來歸類邊緣點的強弱。
1.2 Canny算法的改進
(1)使用快速自適應中值濾波代替高斯濾波,可以銳化圖像邊緣以保留更多細節。
(2)采用4方向Sobel算子代替2×2小鄰域窗口來計算梯度幅值,可以減少噪聲對梯度計算的干擾,從而降低噪聲敏感性。
(3)在利用線性插值算法進行非極大值抑制的同時,結合局部自適應算法生成最大和最小閾值,有效提高圖像質量。
2 系統設計與實現
視頻圖像邊緣實時檢測系統總體設計如圖1所示。系統采用豪威科技(OmniVision)公司生產的OV5640攝像頭進行圖像采集。對采集到的數據進行灰度轉換預處理,之后使用快速自適應中值濾波算法去除噪聲。將去噪后的圖像數據發送至FPGA,利用改進Canny進行邊緣檢測,檢測完畢后,借助高清多媒體接口(high-definition multimedia interface,HDMI)顯示器展示檢測結果。
2.1 圖像預處理
由于彩色圖像數據龐大,不利于后續圖像處理,需要先將彩色圖像進行灰度處理以便進行邊緣檢測[5]。通常做法是將RGB888格式數據轉為YCbCr格式,然后取Y分量。而OV5640攝像頭采集到的圖像數據為RGB565格式,因此,需要先進行格式轉換。通過位拼接的方式,將高位數據補充到低位,實現RGB565格式到RGB888格式的轉換,然后再將RGB888格式轉換為YCbCr格式。該過程的計算公式如下:
Y = (77R+150G +29B)>>8," " " " " " " " " " " " (1)
Cb = ((-43R-85G +128B+128)>>8)+128,(2)
Cr = ((128R-107G -21B+128)>>8)+128。(3)
式中,Y 為像素灰度值,Cb、Cr 分別為藍色色度分量與紅色色度分量。
2.2 視頻圖像采集和顯示
在攝像頭驅動的所有寄存器配置完畢后,開始圖像采集。由于系統需要一定的反應時間,所以需要先等待10幀數據以確保配置有效。之后,在行場同步信號的控制下,OV5640 攝像頭輸出RGB565 格式數據,此時輸出的是 16 位數據,但實際有效的僅有 8 位。當行同步信號輸出為高電平時,圖像為有效數據。圖像采集仿真波形如圖2所示。
2.3 快速自適應中值濾波算法
本文采用快速自適應中值濾波算法去除圖像噪聲,保留更多的圖像邊緣細節。快速自適應中值濾波器的核心思想是根據當前像素的噪聲情況動態調整濾波窗口的大小,然后根據窗口內像素值的分布情況判斷是否執行中值濾波,其具體步驟如下。
步驟1:判斷3×3濾波窗口內所有灰度值的中值點是否為噪聲點。若中值位于窗口最小灰度值和最大灰度值之間,說明3×3窗口內的中值點不是噪聲點,轉到步驟2;若為噪聲點,跳到步驟3。
步驟2:判斷3×3濾波窗口的中心點是否為噪聲點。若中心點的灰度值位于最小灰度值和最大灰度值之間,說明 3×3 窗口內的中心點不是噪聲點,輸出中心點;否則輸出中值點。
步驟3:將濾波窗口尺寸擴大到 5×5,重復步驟1和步驟2,若 5×5 濾波窗口內的中值點是噪聲點,則將濾波窗口尺寸擴展到 7×7 。
步驟4:達到預先設定的最大濾波窗口尺寸 N×N時,判斷 N×N窗口內的中心點是否為噪聲點。如果是噪聲點,則輸出窗口中值點,否則輸出中心點。
使用傳統濾波算法和快速自適應中值濾波算法對外加椒鹽噪聲的Lena灰度圖像進行濾波,并與原圖進行對比,可知快速自適應中值濾波效果明顯強于傳統濾波方式,效果對比如圖3所示。
2.4 4方向梯度模板
傳統Canny算子一般采用2×2小鄰域來計算經過高斯平滑后的陣列幅度和方向,其計算結果易受到外界噪聲干擾。本文利用Sobel算子模板,通過擴展算子方向增強其適應能力。假設目標圖像函數為
f(x,y),其角度(θ)和幅值的計算公式如下:
式中,Gx和Gy分別為水平方向和豎直方向的梯度,f(x,y)為梯度方向的幅值。
一般來說,Sobel算子在水平和豎直方向的邊緣檢測效果較好,但是在其他方向的邊緣檢測結果不夠精細,因此本文新增了45°和135°兩個角度的模板算子,4方向合成梯度幅值(I)的計算公式如下:
式中,Ii為i方向的卷積結果,i取值0、1、2、3時,分別表示0°、45°、135°和180°;P(x,y)為圖像信息;H為卷積矩陣。
2.5 線性插值方法
在梯度方向上對像素梯度幅值進行求解,以實現非極大值抑制[6]。傳統Canny算法進行非極大值抑制時,直接將所求像素點視作位于梯度方向上,然而圖像中的像素點是離散的二維矩陣,梯度方向上的相鄰點可能并非真實存在的像素,而只是一個亞像素點,這種近似會導致算法無法準確比較梯度幅值,從而引入虛假邊緣。對此,引入線性插值方法對這個不存在的點的位置與梯度幅值進行
計算。
假設P點為目標像素點,W0和W1分別為水平和豎直方向上A點到P點、P點到B點的距離,目標圖像像素值的計算公式如下:
f(P)=f(A)W1+f(B)W0。" " " " " " " " " " " (6)
式中,f(P)、f(A)、f(B) 分別為P點、A點、B點的像素值。
將梯度方向和梯度幅值相結合,并把最大、最小閾值與中心像素的梯度幅值進行比較:
C = 。" " " " " " " " " " " (7)
式中,G為中心像素的梯度幅值,Tmin為最小閾值,Tmax為最大閾值,C為常數。
2.6 局部自適應閾值
傳統Canny算法通過設置閾值的大小,較好地實現了邊緣檢測的精細化。然而,該方法也存在一定局限性,如人為設定的閾值主觀性較強且靈活性較低。而局部自適應閾值能夠根據圖像數據的變化而動態調整閾值,因此本文采用局部自適應閾值來判斷圖像卷積后的像素梯度幅值,以3×3窗口為例,具體步驟如下。
(1)利用快速自適應中值濾波的流水線方式對3×3圖像邊緣檢測窗口的像素點進行排序,篩選出最大值、中間值和最小值。
(2)利用設定系數的方法求出高低閾值,其計算公式如下:
Tmax = 2Tmin = 0.3×Max(P)+0.4×Med(P)+0.3×
Min(P)。" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "(8)
式中,Max(P)、Med(P)、Min(P)分別為像素值的最大值、中間值和最小值。
(3)進行邊緣信息的閾值檢測,自適應閾值T的計算公式如下:
T" = 。" " " " " " " " " " " " " " " " (9)
式中,C為待定常數,M為待定邊緣點的梯度幅值。
當像素梯度幅值小于低閾值時,將該像素值賦值為0;當像素梯度幅值大于高閾值時,將該像素值賦值為255;當像素梯度幅值處于高閾值和低閾值之間時,將其賦值為C,此時,若所有方向的像素平均梯度幅值小于M,則賦值為0;若大于M,則將其賦值為255。
2.7 視頻顯示
在實現HDMI視頻顯示時,需遵循視頻圖形陣列(video graphics array,VGA)的掃描驅動時序規范,即按照從左到右、從上到下的順序逐行掃描。行同步信號拉高后開始第一行掃描,一行掃描完成后進行下一行掃描,此時場同步信號拉高;一個行掃描時鐘周期包括行同步、行顯示后沿、行有效和行顯示前沿,場掃描同理。使用ModelSim軟件對視頻顯示頂層模塊進行仿真,在仿真測試過程中觀察到,每當系統時鐘信號取反時,差分信號也會同步進行電平取反操作,具體的仿真結果如圖4所示。
3 仿真分析
本文使用FPGA對圖像進行邊緣檢測,利用其并行運算的優勢,在算法執行過程中提高運行的效率。在檢測過程中,以Xilinx公司的Vivado作為硬件平臺,MATLAB用于圖像處理算法的仿真驗證,Modelsim則承擔波形仿真任務,選用型號為XC7A35TFGG484-2的芯片作為開發板芯片。
首先,在攝像頭端采集原始圖像并進行灰度處理,然后將灰度處理后的圖像發送到圖像處理模塊,并使用MATLAB來驗證算法的可行性。同時,使用Lena圖像對比傳統Canny算法與改進Canny算法的處理效果。如圖5所示,可以清晰地看到,改進Canny算法提取到的邊緣信息更加完整、清晰,準確性也大幅提高。
4 總結
本文針對傳統Canny算法的缺陷提出了一系列改進措施,并取得了優異的成果。實驗結果表明,改進Canny算法不僅保留了更多圖像細節,而且抑制噪聲的效果也更好。該算法還可通過FPGA板級驗證,說明其實時性良好,具有一定的應用價值。
參考文獻
[1] 趙鴻亮,郭佑民. 基于機器視覺的軌道線檢測方法[J]. 機電工程技術,2024,53(5):162-166.
[2] 陳先瑞. 基于FPGA的實時圖像邊緣檢測系統設計[D]. 大慶:東北石油大學,2023.
[3] 喻孟昊,鄭鵬,李巖,等. 雙閾值Canny優化OTSU煙支缺陷檢測方法[J]. 制造業自動化,2025,47(1):75-81.
[4] 劉澤皓,王新宇,王媛媛,等. 邊緣檢測算法的對比研究及FPGA的實現[J]. 計算技術與自動化,2023,42(1):146-152.
[5] 閆澤汕. 基于LED和慣導組合的室內定位方法研究[D]. 西安:西安電子科技大學,2023.
[6] 趙思嫻. 面向暗光條件的雙波段時空域濾波圖像增強方法研究[D]. 南京:南京理工大學,2023.