汪珺
關鍵詞:FPGA;加權均值濾波;拉普拉斯;腐蝕膨脹
隨著計算機視覺和圖像處理技術的快速發展,對圖像進行邊緣檢測是圖像分析識別中的一項重要預處理技術[1]。在物體識別、醫學影像、無人駕駛等領域被廣泛應用[2]。然而,現有的邊緣檢測方法在提取目標邊緣時仍然存在斷裂失真和定位偏差問題。例如,經典的Sobel算子容易導致邊緣線條斷裂,而Canny算子雖提高了檢出率,但對細小邊緣的定位準確性仍有限,這降低了后續圖像分析和識別的可靠性。目前圖像去噪與邊緣連續化成為提升邊緣檢測性能的兩大關鍵方向。
基于FPGA的硬件實現由于其強大的并行處理能力,能夠構建高速高效的邊緣檢測系統,因此許多學者選擇將其作為硬件平臺,進行深入研究與應用開發[3-4]。已有研究在基于FPGA的Sobel算子實時圖像邊緣檢測系統設計中取得了一定成果[5],但所提取的邊緣圖片存在噪點和線條斷裂的情況。另一些研究在邊緣檢測中加入了雙邊濾波和形態學濾波處理,最終得到的圖片噪點較少且線條無明顯斷點,但對于不同圖片的邊緣提取的閾值選取不具有通用性,缺乏自適應性[6]。還有研究實現了一種基于Sobel自適應閾值的邊緣檢測系統,利用直方圖統計方法生成自適應閾值,完整地提取出了圖片的外部明顯邊緣,具有通用性,但對邊緣檢測的內部線條信息的完整性和有效性還有待提高[7]。
因此,本文提出了一種新的多算法融合邊緣檢測方法,并在硬件FPGA平臺上進行高效實現。該方法首先采用加權均值濾波,在對圖片進行去噪的同時最大限度保留了有效信息,然后引入了擴展的拉普拉斯算子對邊緣進行提取,不依賴于邊緣方向的二階微分算子,對內部細節邊緣定位準確。最后,加入2×2的腐蝕膨脹算子進行處理,對多目標物體的邊緣輪廓細節進行局部精準處理。測試結果表明,本設計相比傳統檢測算法提高了32%的邊緣完整率,平均定位偏差降低了0.8個像素。該研究為構建高速精確的邊緣提取系統提供了新思路。
1邊緣檢測設計整體架構
整體設計如圖1所示,分為4個模塊。首先對輸入的圖像數據進行濾波,圖像數據中的噪聲往往分布在較高頻段,濾波通過降低高頻段部分的幅度來減弱噪聲對圖像數據的影響[8]。本設計采用的是加權均值濾波器,經過去噪后的圖像數據送入拉普拉斯模塊,進行邊緣信息的提取,完成邊緣提取的數據送入二值化處理模塊,在黑色的背景中突出邊緣細節,最后通過2×2的腐蝕膨脹算子進行形態學濾波模塊處理,突出內部線條,使邊緣信息更加完整。
2邊緣檢測設計算法原理及FPGA實現
2.1加權均值濾波器
均值濾波器常被應用于對圖像去噪,它通過對中心像素周圍像素值進行均值運算來達到平滑噪聲的效果,計算過程如式(1)所示,其中,Pij表示中心像素點在(i,j)處,濾波器的大小為m×n,f(a,b)表示原始圖像數據,S(i,j)表示濾波后的圖像。
均值濾波器在去除噪點的同時會導致圖像模糊,因此本文在FPGA實現中采用3×3的1/9加權均值濾波器。實現原理圖如圖2所示。
加權均值濾波模塊包括控制模塊、基于RAM的移位寄存器和加權均值濾波處理模塊。控制模塊用于管理行列像素點的計數、輸入有效信號以及基于RAM的移位寄存器(shift_RAM)的使能信號。它調用兩個shift_RAM來緩存前后兩行的數據,從而獲取上一行(former)、當前行(current)和下一行(next)的數據。這樣處理可以保持中間像素值和前后列上下行的數據同步,使得輸入數據得到3×3的數據矩陣,并與處理算子進行卷積運算。
圖3(a)中的加權均值濾波處理模塊算子對圖3(b)中的圖像進行處理。它對圖像中心像素點和周圍像素點進行加權處理,定義不同的權重值分配給這些像素點,并與圖像數據進行卷積計算,最終得到中間像素點的均值avg輸出。
原始圖像如圖4(a)所示,包含了樹、建筑物和人物等對象。經過處理后如圖4(b)所示,去除了部分噪點,使圖像更加平滑,且主要信息未丟失。
2.2拉普拉斯邊緣處理算法
拉普拉斯算子是二階微分算子,常用的算子大小有3×3、5×5和7×7,作為邊緣檢測算子是與方向無關的檢測算子[9-10]。在提取圖像邊緣時,具有旋轉不變性。其公式如式(3)所示,一幅圖像中區域的邊緣處灰度值會產生較大的變化,利用二階微分的過零點來檢測圖像邊緣。
原理圖如圖5所示,由控制模塊、基于RAM的移位寄存器和拉普拉斯算法處理模塊組成??刂颇K定義了shift_RAM的使用和調用,以及與加權均值拉普拉斯算法處理模塊的通信。本文采用的是擴展拉普拉斯算子,大小為3×3。傳統拉普拉斯算子忽略了斜對角像素點對中間像素點的影響,而擴展拉普拉斯算子對中間像素點周圍的八個像素點進行卷積運算,并將得到的值代替原像素點。卷積過程如圖6所示。
(x1,y1)和(x2,y2)為紅色框和藍色框內的中間像素點一樣,與拉普拉斯算子進行卷積。一幅圖像數據中,除了第一行第一列和最后一行最后一列的像素點不進行中間像素點運算,其他像素點都進行了處理。經過拉普拉斯算子處理后,邊緣區域的像素點相較于其他區域的像素點會變得更亮,從而突出了邊緣輪廓。
圖4(b)經過拉普拉斯算子處理后的圖像如圖7所示。處理后的圖片邊緣線條基本完整提取出來,且無噪點,但線條與背景不夠分明。
2.3二值化處理算法
二值化是將圖像的像素點按一定的閾值設置為黑白兩個顏色,將整幅圖像呈現出明顯的黑白效果。通過閾值進行定義,高于閾值的設置為白色,低于閾值設置為黑色,輸出的圖像數據只有0和1。對圖像數據進行二值化處理是為了使邊緣輪廓更加清晰,背景為黑色,邊緣輪廓為白色,更加突出邊緣,如圖8所示,但內部線條有缺失和斷裂。
2.4形態學濾波處理算法
形態學濾波處理本設計采用了腐蝕和膨脹操作。腐蝕操作如式(4)所示,用結構元素M掃描圖像N,y表示集合平移的位移量。對于結構元素M和其覆蓋的像素做“與”操作[11]。腐蝕操作可以細化二值化圖像中的物體,消除一些邊沿噪聲點。膨脹操作如式(5)所示,M?式結構元素M關于原點的映射,在原始圖像N上將M?平移y。也就是用結構元素與其覆蓋的原始圖像區域做“或”操作[11]。這樣可以使二值化圖像中的物體突出,使線條連接平滑。
本文選用腐蝕膨脹算子大小為2×2,采用閉操作。閉操作是指先用結構元素M對圖像N進行膨脹,得到處理后的圖像數據,再用結構元素M進行腐蝕。在FPGA實現中,原理圖如圖9所示。膨脹操作和腐蝕操作分別用了一個shift_RAM,產生2×2矩陣數據。膨脹算法處理模塊(dilation_line_0)和腐蝕算法處理模塊(erosion_line_0)使用的算子及其覆蓋的圖像區域如圖10所示。
圖10中,像素點N11經過膨脹操作后得到的像素N'11如式(6)所示。像素點N'11經過腐蝕操作得到的N''11如式(7)所示。閉操作能夠彌合邊緣中較窄的間斷,消除小的孔洞,使邊緣細節更加突出。
3系統仿真測試結果與分析
3.1系統實現結果
本設計采用Vivado2020.2和MatlabR2020聯合仿真,輸入圖像大小為640×480。利用Matlab生成圖像數據,圖像數據以16進制保存,位寬為8位,保存在txt文件中。在仿真激勵文件中,通過txt文件讀取和寫入圖像數據。每個模塊處理后輸出一次圖像數據,輸出的圖像數據經過Matlab代碼處理得到處理后的圖像結果。
經過二值化模塊,8位數據變成了0和1的1位數據。腐蝕膨脹選擇算子大小為2×2,先對圖片進行膨脹再腐蝕,執行閉操作。最終處理結果如圖11所示,一些內部斷裂不夠明顯的線條變得明顯清晰,外部線條平滑。
在處理具有多種物體對象且內部線條密集的圖片時,選擇2×2的膨脹腐蝕算子更加合適。如圖12所示,是3×3膨脹腐蝕算子處理的結果,建筑物線條有部分缺失,樹葉線條過于粘連。
3.2實驗對比與分析
為驗證本文提出的邊緣檢測算法的有效性,選擇了以下兩種典型邊緣檢測算法進行對比實驗分析:
1)Sobel邊緣檢測。
2)Prewitt算子邊緣檢測。
基于Vivado平臺構建了一個實現框架,該框架按照流水線結構依次包含圖像讀取、邊緣檢測和后處理三個處理模塊。將邊緣檢測模塊分別設置為Sobel算子和Prewitt算子,以及本文提出的WAL邊緣檢測方法,圖像讀取和后向處理模塊相同。
3.3結果與分析
輸入樣例圖像,輸出Sobel檢測、Prewitt檢測和WAL邊緣檢測算法的邊緣提取結果,如圖13所示。
如圖13所示,原圖中有多個目標。Sobel算子進行邊緣提取后的圖片,線條不清晰且部分線條丟失。Prewitt算子提取的邊緣顯示出建筑物線條過于粘連。相比之下,本文提出的WAL邊緣檢測方法處理后的邊緣圖片內部線條明顯平滑且噪聲較少,圖中建筑物、樹葉和人物的邊緣線條細化且明顯。由實驗對比結果可知,WAL邊緣檢測方法的性能優于Sobel算子和Prewitt算子。
4總結
本文提出的邊緣檢測方法在硬件平臺上對算法進行部署,解決了占用資源大和耗時的問題。采用加權均值濾波去噪后,再利用拉普拉斯算子進行邊緣提取。拉普拉斯算子由于使用二階導數,對噪聲更加敏感,但結合加權均值濾波去噪處理,得到的圖像邊緣完整且無明顯噪聲點。后向處理中采用了2×2的腐蝕膨脹算子對圖像進行閉操作處理,得到的圖片邊緣完整清晰,與背景分明。對于文中內部線條密集且細節較多的測試圖片,2×2膨脹腐蝕算子的處理性能優于3×3膨脹腐蝕算子,且對于邊緣提取,該方法優于Sobel算子和Prewitt算子的邊緣檢測系統。因此,本文為圖像邊緣檢測提供了一種新的方案,具有一定的實用價值。