摘 要:邊緣信息是數(shù)字圖像的重要特征,用于描述圖像中物體和背景之間的分界線。隨著計算機(jī)視覺算法的復(fù)雜度不斷提高,傳統(tǒng)的軟件平臺逐漸無法滿足實時性要求。為了解決該問題,本文提出了一種基于現(xiàn)場可編程門陣列FPGA的實時邊緣檢測系統(tǒng)設(shè)計,利用FPGA可并行處理、運(yùn)行速度快等優(yōu)點(diǎn),對CMOS攝像頭實時采集的視頻數(shù)據(jù)進(jìn)行邊緣檢測。板級測試結(jié)果表明設(shè)計達(dá)到預(yù)期效果,具有一定實用價值。
關(guān)鍵詞:FPGA;邊緣檢測;實時性數(shù)據(jù)處理
中圖分類號: TN 919" " " " " " " " " " " " " " " " " 文獻(xiàn)標(biāo)志碼:A
邊緣檢測是機(jī)器視覺領(lǐng)域的一項基礎(chǔ)技術(shù),其主要目的是從圖像中提取目標(biāo)物體的輪廓和邊緣信息。通過邊緣檢測,可以將圖像分割為不同的區(qū)域,并對這些區(qū)域進(jìn)行進(jìn)一步分析、識別和跟蹤[1-2]。隨著實時圖像處理技術(shù)的快速發(fā)展,圖像處理算法復(fù)雜度不斷提高,傳統(tǒng)的軟件平臺逐漸無法滿足需要實時性處理的場景要求。為克服該難題,許多學(xué)者嘗試通過硬件來提高復(fù)雜算法的執(zhí)行效率。其中FPGA作為一種具有可編程性和并行處理能力的集成電路芯片,將圖像處理算法運(yùn)行在FPGA上可以大幅提高系統(tǒng)的運(yùn)算速度和實時性,因此采用FPGA搭建的硬件平臺在實時性圖像處理的場景上逐漸成為主流[3]。基于此,本文設(shè)計了一種基于FPGA的實時圖像邊緣檢測系統(tǒng),該系統(tǒng)整合了圖像數(shù)據(jù)采集、存儲、算法處理和顯示等多個功能,適用于廣泛的嵌入式設(shè)計應(yīng)用,具有一定的應(yīng)用價值。
1 Sobel邊緣檢測
Sobel邊緣檢測是利用濾波器的應(yīng)用來實現(xiàn)的一種圖像處理技術(shù)。在圖像中,物體的邊緣通常表現(xiàn)為物體與背景或不同物體之間的差異,反映為像素值的變化差異。常見的邊緣檢測算法通過比較圖像中每個像素點(diǎn)周圍區(qū)域內(nèi)的灰度值變化來標(biāo)記數(shù)字圖像中灰度變化明顯的點(diǎn)。這些像素點(diǎn)保留了圖像重要的結(jié)構(gòu)信息,對邊緣的一階或二階導(dǎo)數(shù)進(jìn)行分析,可以有效地檢測圖像中的邊緣特征[4]。
1幅圖像可以看作1個圖像函數(shù)f(x,y),圖像的一階導(dǎo)數(shù)用梯度表示,梯度與像素點(diǎn)坐標(biāo)(x,y)如公式(1)所示。
(1)
式中:Δf為圖像函數(shù)的梯度;Δf指出了圖像f(x,y)在點(diǎn)(x,y)處最大變化率的方向;gx為圖像函數(shù)f(x,y)在x方向上的偏導(dǎo)數(shù);gy為圖像函數(shù)f(x,y)在y方向上的偏導(dǎo)數(shù)。
偏導(dǎo)數(shù)的常用計算方式是使用一些空域模板來計算梯度分量[5]。在一般情況下,奇數(shù)的模板更多,因為奇數(shù)模板考慮了中心點(diǎn)與其周圍數(shù)據(jù)的關(guān)系,可以提供更多關(guān)于邊緣方向的信息,所以可以更好地表達(dá)圖像的邊緣特征。最小的奇數(shù)模板是3×3的模板,索貝爾(Sobel )算子和Prewitt算子都是實際應(yīng)用中常見的算子,Sobel算子比Prewitt算子具有更好的抑制噪聲性能,因此本文選用Sobel算子。3×3空間域和Sobel算子x和y方向的卷積因子如圖1所示。3×3空間域與卷積因子進(jìn)行矩陣乘積,計算過程如公式(2)所示。
(2)
(3)
式中:Z為像素數(shù)據(jù);在得到偏導(dǎo)數(shù)gx、gy后通過mag函數(shù)可計算像素點(diǎn)的梯度M(x,y),如公式(3)所示,將梯度大小M(x,y)與所設(shè)閾值比較,大于閾值則表示該像素點(diǎn)為邊緣,反之,則表示該像素點(diǎn)不是邊緣。FPGA具有并行處理數(shù)據(jù)的特點(diǎn),其中,很多計算都是同時進(jìn)行,極大地節(jié)省圖像數(shù)據(jù)處理時間,滿足數(shù)據(jù)實時性處理的需求。
2 系統(tǒng)架構(gòu)
本研究采用模塊化的研究方法來設(shè)計實時邊緣檢測系統(tǒng),該系統(tǒng)由多個模塊組成,包括攝像頭采集模塊、FPGA處理模塊以及顯示器輸出模塊等,這些模塊共同完成了圖像采集、DDR3緩存數(shù)據(jù)、邊緣檢測算法處理和HDMI顯示等功能。系統(tǒng)架構(gòu)框圖如圖2所示。其中,系統(tǒng)的核心部分是基于FPGA的硬件編程。在系統(tǒng)架構(gòu)中,攝像頭配置模塊通過SCCB總線與攝像頭的寄存器進(jìn)行通信和配置,以保證攝像頭處于設(shè)定的工作模式,攝像頭采集的數(shù)據(jù)經(jīng)DDR3緩存后進(jìn)行邊緣檢測,最后在HDMI顯示屏上顯示。本研究引入了鎖相環(huán)分頻模塊來對FPGA的時鐘進(jìn)行分頻操作,以提供穩(wěn)定的時鐘信號給其他各模塊使用,有效地解決時鐘頻率不穩(wěn)定或者不匹配的問題,從而保證整個系統(tǒng)的性能和可靠性。
3 模塊設(shè)計
3.1 攝像頭采集模塊
攝像頭是圖像采集模塊的核心,設(shè)計系統(tǒng)需要基于 FPGA 實現(xiàn)圖像的實時性處理,對采集速度的要求高于對畫質(zhì)采集質(zhì)量的要求,因此,系統(tǒng)選用500 W(2592×1944)像素高清攝像頭模塊,其CMOS圖像傳感器為OV5640。FPGA內(nèi)部設(shè)有OV5640驅(qū)動模塊,其內(nèi)部例化了3個模塊,分別是IIC驅(qū)動模塊、OV5640配置模塊和OV5640數(shù)據(jù)接收模塊。OV5640攝像頭通過SCCB通信協(xié)議對其內(nèi)部寄存器進(jìn)行配置,由于SCCB通信協(xié)議和IIC協(xié)議的單次寫入時序基本相同,因此本設(shè)計中采用IIC對其寄存器進(jìn)行配置。因此本設(shè)計中采用IIC對其寄存器進(jìn)行配置。在IIC驅(qū)動模塊中,通過計數(shù)器的方式生成SCL的四倍頻率時鐘IIC_CLK,用該四倍頻率時鐘結(jié)合狀態(tài)機(jī)的設(shè)計思路,可以更加方便地描述IIC通信協(xié)議的時序要求。OV5640配置模塊采用IIC_LCK時鐘操作,按照時序給出IIC驅(qū)動模塊啟動信號,同時給出需要配置的寄存器地址和需要配置的參數(shù)。初始化配置的目的是讓攝像頭在預(yù)設(shè)模式下工作,使其輸出滿足設(shè)計需求的圖像數(shù)據(jù)格式和圖像尺寸大小。本設(shè)計中攝像頭輸出的數(shù)據(jù)格式為RGB565,而OV5640的數(shù)據(jù)線中只有高8位是有效的,因此需要2個像素時鐘才能得到1個完整的像素數(shù)據(jù)。OV5640數(shù)據(jù)接收模塊采用像素時鐘接收像素數(shù)據(jù),然后通過移位寄存,將2個從攝像頭接收過來的8位數(shù)據(jù)拼成1個完成的16位RGB565像素數(shù)據(jù)。從第一個數(shù)據(jù)進(jìn)來,到拼接完成送出去,共經(jīng)歷2個時鐘周期。因此,在OV5640數(shù)據(jù)接收模塊中,還需要對行場同步信號進(jìn)行2個時鐘延時,保證數(shù)據(jù)的同步。
3.2 圖像數(shù)據(jù)處理
數(shù)據(jù)處理模塊例化了RGB轉(zhuǎn)YCbCr模塊、邊緣檢測模塊和Sobel邊緣檢測模塊。RGB轉(zhuǎn) YCbCr模塊負(fù)責(zé)接收在OV5640驅(qū)動模塊中拼接好的16位RGB像素數(shù)據(jù),并將其轉(zhuǎn)換為YUV444格式的數(shù)據(jù),隨后將轉(zhuǎn)換的數(shù)據(jù)傳給Sobel邊緣檢測模塊進(jìn)行邊緣判定。
在數(shù)字圖像處理領(lǐng)域,YUV是一種常用的圖像格式,其特點(diǎn)是將亮度和色度進(jìn)行分離,更適合運(yùn)用于圖像處理領(lǐng)域。本設(shè)計采用YUV444格式,RGB與YCbCr色彩空間轉(zhuǎn)換的計算過程如公式(5)所示。
(5)
式中:Y為圖像的強(qiáng)度、亮度;Cb為圖像藍(lán)色色度;Cr為圖像紅色色度;R為紅色數(shù)據(jù)通道;G為綠色數(shù)據(jù)通道;B為藍(lán)色數(shù)據(jù)通道,它們按照5∶6∶5的比例關(guān)系構(gòu)成16位的RGB565數(shù)據(jù)。
由于Verilog HDL不支持浮點(diǎn)運(yùn)算,因此使用擴(kuò)大256倍,再向右移8 Bit的方式,來轉(zhuǎn)換得到公式(6),為了防止運(yùn)算過程中出現(xiàn)負(fù)數(shù),對公式(6)進(jìn)行進(jìn)一步變換,如公式(7)所示。
(6)
(7)
轉(zhuǎn)換好的YUV444數(shù)據(jù)進(jìn)入邊緣檢測模塊,在該模塊內(nèi)部設(shè)置1個3×3的矩陣,數(shù)據(jù)按照流水線的方式依次存入矩陣中,根據(jù)公式(4)、公式(5)同時計算水平和豎直2個方向上的偏導(dǎo)數(shù)和,并在下一個時鐘計算和的平方,得到結(jié)果后使用cordic IP核計算開方,得到梯度長度M(x,y)。將梯度長度與設(shè)定閾值進(jìn)行比較,如果大于閾值,那么該像素點(diǎn)為邊緣;反之,該像素點(diǎn)不是邊緣。為了保持信號同步,還需要統(tǒng)計在非并行計算的過程中消耗了的時鐘周期數(shù),并對行場同步信號延遲對應(yīng)數(shù)目的時鐘周期,以保證給出的邊緣判定信號判定的是當(dāng)前像素點(diǎn)。
3.3 DDR3控制模塊
為解決數(shù)據(jù)的跨時域問題,本設(shè)計選取DDR3芯片,它配置雙通道的wrFIFO和rdFIFO,可滿足數(shù)據(jù)流的寫入、讀取和緩存需求。該模塊中例化了DDR3讀寫模塊、MIG模塊和FIFO調(diào)度模塊3個模塊。DDR3讀寫模塊負(fù)責(zé)與MIG模塊進(jìn)行讀寫命令和地址的交互。通過對FIFO調(diào)度模塊中fifo的剩余數(shù)據(jù)量進(jìn)行判斷,DDR3讀寫模塊可以實時切換讀寫命令和地址,對DDR3存儲器進(jìn)行讀寫操作。MIG模塊提供了與外設(shè)之間的接口,使FPGA能夠與外部設(shè)備進(jìn)行數(shù)據(jù)交換和通信,處理來自外設(shè)的輸入和輸出數(shù)據(jù),并將其傳遞給其他模塊進(jìn)行進(jìn)一步處理。FIFO調(diào)度模塊負(fù)責(zé)對輸入和輸出的數(shù)據(jù)切換時鐘域和轉(zhuǎn)換位寬。該模塊根據(jù)不同模塊之間的時鐘信號進(jìn)行數(shù)據(jù)的時鐘域轉(zhuǎn)換,以保證數(shù)據(jù)在不同時鐘域之間的同步和穩(wěn)定傳輸。此外,F(xiàn)IFO調(diào)度模塊還可以在不同數(shù)據(jù)位寬之間進(jìn)行轉(zhuǎn)換,使數(shù)據(jù)能夠在不同位寬的模塊之間正確傳遞和處理。為避免當(dāng)前讀取的圖像與上一次存入的圖像交錯,可以在DDR3中的其他bank中開辟1個同樣大小的存儲空間。通過乒乓操作寫入和讀取數(shù)據(jù)。攝像頭初始化后,將來自攝像頭的第一個數(shù)據(jù)寫入DDR3存儲空間的首地址,在DDR3控制模塊中,對圖像數(shù)據(jù)進(jìn)行計數(shù),確定下一個數(shù)據(jù)應(yīng)該寫入的地址,通過遞增計數(shù)值,依次將后續(xù)的圖像數(shù)據(jù)寫入相應(yīng)的地址空間。計數(shù)達(dá)存入DDR3的最大寫地址后,完成1幀圖像的存儲,當(dāng)幀復(fù)位時,切換bank以完成乒乓操作,同時回到存儲空間的首地址,繼續(xù)下一幀圖像的存儲。
4 試驗驗證
本文使用Verilog HDL語言對各模塊進(jìn)行代碼編寫,在Vivado19.2軟件下進(jìn)行編譯綜合,將生成的比特流下載到FPGA開發(fā)板上,試驗結(jié)果如圖3所示。在給定的試驗中,圖3(a)代表原始圖像,圖3(b)代表閾值為64的邊緣檢測圖像,圖3(c)代表閾值為128的邊緣檢測圖像,圖3(d)代表閾值為192的邊緣檢測圖像。當(dāng)閾值增加時,被判斷為邊緣的像素點(diǎn)數(shù)目減少,邊緣線條會變細(xì),同時有些本來是邊緣的線條會被判斷為非邊緣像素點(diǎn)。因為邊緣檢測算法是基于像素值的變化來判斷邊緣,所以較低的閾值會使更多的像素點(diǎn)被判定為邊緣。隨著閾值增加,只有那些像素值變化明顯的區(qū)域才能被判斷為邊緣,這就導(dǎo)致邊緣線條變得更細(xì)并且一些細(xì)微的邊緣可能被判定為非邊緣像素點(diǎn)。試驗結(jié)果符合設(shè)計預(yù)期,觀察和比較不同閾值下的邊緣檢測圖像,根據(jù)實際需求選擇適當(dāng)?shù)拈撝祦砥胶膺吘墮z測的靈敏度和準(zhǔn)確性,以獲得最佳的邊緣檢測效果。較低的閾值可用于檢測細(xì)微的邊緣,而較高的閾值則可以過濾掉一些噪聲或不重要的邊緣。
5 結(jié)語
本設(shè)計采用FPGA作為主控芯片,實現(xiàn)了實時圖像邊緣檢測的功能。通過CMOS圖像傳感器OV5640采集實時的彩色視頻圖像數(shù)據(jù),并將其傳輸至FPGA中進(jìn)行處理。在FPGA內(nèi)部,采集的圖像數(shù)據(jù)經(jīng)過Sobel算法處理后,進(jìn)行DDR3緩存,再從 DDR3中讀取,最后通過HDMI接口傳輸至顯示設(shè)備上,顯示實時的邊緣檢測圖像。整個系統(tǒng)中,各模塊分工明確、合理,相互配合良好,能夠滿足各項目標(biāo)需求。該系統(tǒng)能夠?qū)D像進(jìn)行實時邊緣檢測,提供有用的視覺信息和分析結(jié)果,可以應(yīng)用于許多領(lǐng)域,例如機(jī)器視覺、智能監(jiān)控等,具有一定應(yīng)用價值。
參考文獻(xiàn)
[1]XIE K, LEI D, DU W, et al. A new operator based on edge"detection for monitoring the cable under different illumination[J]."Mechanical systems and signal processing, 2023(187):109926.
[2]HUANG M, LIU Y, YANG Y. Edge detection of ore and rock"on the surface of explosion pile based on improved canny operator[J]."Alexandria engineering journal, 2022, 61(12):10769-10777.
[3]伍思同,郭來功.基于FPGA的Sobel邊緣檢測架構(gòu)[J].華北科技學(xué)院學(xué)報,2023,20(1):72-79.
[4]李芳,沈培,溫娜,等.基于Sobel邊緣檢測算法的FPGA硬件實現(xiàn)[J].萍鄉(xiāng)學(xué)院學(xué)報,2022,39(3):83-86.
[5]葉斌,楊云國.基于FPGA的轉(zhuǎn)轍機(jī)表示缺口檢測模塊設(shè)計[J].鐵道通信信號,2023,59(2):23-27.