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