文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.05.017
中文引用格式: 彭習武,張濤. 基于Vivado HLS的邊緣檢測硬件加速應用[J].電子技術應用,2017,43(5):70-73.
英文引用格式: Peng Xiwu,Zhang Tao. Edge detection hardware acceleration based on Vivado HLS[J].Application of Electronic Technique,2017,43(5):70-73.
0 引言
在計算機視覺和圖像處理領域中,圖像邊緣檢測技術起著重要的作用,其效果好壞直接影響整個系統的性能。由于圖像的邊緣蘊含了豐富的內在信息,是進行圖像分割、特征值提取的重要依據。邊緣檢測不僅能減少處理數據,又能保留圖像中物體的形狀信息,是實時圖像處理中的重要內容之一[1]。
在現階段,主要采用軟件方式或者FPGA硬件方式來實現邊緣檢測。文獻[2]-[4]采用軟件方法實現圖像的邊緣檢測,雖然邊緣檢測的效果得到了改善,但是不能在延時和數據帶寬方面做出改善。文獻[5]-[7]采用FPGA方法實現圖像的邊緣檢測,此硬件方法雖然改善了邊緣檢測的延時長和數據帶寬受限的不足,但是由于FPGA硬件設計的復雜性會導致整個電路開發周期變長。
本文采用Xilinx公司的Vivado HLS將邊緣檢測的軟件代碼轉化為RTL硬件電路。這樣不僅解決了軟件方法所帶給系統延時長和數據帶寬窄的缺點,而且避免了FPGA硬件電路設計周期長的不足。
1 邊緣檢測算法設計
基于Sobel算子的邊緣檢測具有算法簡單、實現方便等優勢,但在處理圖像時會存在對噪聲敏感和邊緣界限模糊等不足,所以需要在Sobel算法的基礎上進行優化。優化后的邊緣檢測由中值濾波、膨脹濾波、邊緣檢測模塊和腐蝕濾波模塊構成,如圖1所示。在圖像輸入后,首先中值濾波器對輸入圖像進行平滑圖像噪聲處理,然后由膨脹濾波器求出圖像的局部最大值,再由邊緣檢測模塊來提取圖像的邊緣信息,最后由腐蝕濾波器消除圖像中的“斑點”噪聲,從而得到最佳的圖像邊緣。
2 邊緣檢測軟硬件協同設計
邊緣檢測的軟硬件協同設計主要包括軟件應用設計、硬件加速設計和SoC應用設計。
2.1 軟硬件協作開發流程
軟件應用設計是將邊緣檢測的功能用OpenCV函數或者自定義功能函數實現;硬件加速設計將軟件代碼轉換為RTL電路,其中不可綜合的函數或者語句需用Vivado HLS支持的函數替換;SoC應用設計將Vivado HLS輸出的RTL電路應用到實際的SoC系統[8]。圖2是邊緣檢測硬件加速流程圖。
如圖2所示,首先完成軟件應用的開發,然后將Vivado HLS不能綜合的OpenCV函數鏈替換成HLS視頻庫函數鏈,最后封裝成IP在FPGA中調用。
2.2 邊緣檢測軟硬件協作實現
在軟件實現階段使用OpenCV函數庫或者自定義的C語言函數實現邊緣檢測算法,但Vivado HLS不能綜合所有的軟件代碼。當軟件代碼中存在Vivado HLS不能綜合的函數時就需要將這些函數展開或者替換,如定點運算、片上的行緩存和窗口緩存來完成動態的內存分配、浮點和圖像在外部存儲器中存放和修改的操作。
硬件加速方案是在軟件應用的基礎上實現的。在搭建SoC時,使用的是芯片內部的AXI互聯總線,其所支持的數據類型是AXI4 video stream。在設計邊緣檢測IP接口時需要將AXI4 video stream與Vivado HLS所支持的hls::Mat類型進行相互轉換。數據的轉換模塊見圖2中AXIvideo2Mat和Mat2AXIvideo模塊。Vivado HLS將OpenCV函數鏈轉換成HLS視頻庫函數鏈。硬件加速階段包括邊緣檢測的仿真與優化,只有在優化和仿真通過之后才將RTL級電路封裝成IP核輸出。
3 系統搭建與IP核優化
邊緣檢測的軟硬件協作應用具有一定的局限性,只能在具備處理器和可編程邏輯陣列的SoC中應用。本文是在Xilinx公司的zc7z020clg484-1系列芯片中進行邊緣檢測的系統搭建與功能驗證。
3.1 SoC系統設計
Vivado HLS將邊緣檢測IP輸出到Vivado的IP catalog,在SoC系統設計時調用邊緣檢測IP核即可。搭建的邊緣檢測SoC系統如圖3所示。
在圖3中,粗箭頭表示圖像數據流的路徑,細箭頭表示控制信號的方向。圖3所示的陰影部分為可裁剪系統(PS),白色區域為可編程邏輯(PL)。由于Vivado HLS不支持指針訪問幀緩存,需要用AXI VDMA來訪問幀數據。
視頻流經過HDMI輸入到視頻輸入控制器,數據流通過AXI互聯總線存入到DDR3存儲器中,Cortex-A9通過AXI互聯總線控制AXI VDMA和邊緣檢測IP去存取圖像數據,處理完的數據緩存到DDR3,最后 Cortex-A9將處理好的數據輸出到視頻顯示控制器。硬件加速是將Cortex-A9處理的運算轉移到PL去完成,這樣會減少處理器的負載。
3.2 HLS模塊優化
Vivado HLS有兩種優化方式,一種是在Directive控制欄設置優化變量和參數,另一種方法是在代碼中使用#pragma命令來定義變量實現類型和結構。根據系統的需求對邊緣檢測進行串行和并行實現策略。
3.2.1 串行實現方案
串行實現是保持軟件代碼的順序執行結構,邊緣檢測模塊按照順序串行執行。當硬件電路工作在100 MHz頻率時,處理像素為(1 080×1 092)的圖像速率為0.7幀/s。通過表1可知Sobel子模塊消耗了1 142 ms,導致了整個邊緣檢測功能塊的速率降低。當邊緣檢測IP的數據的寬度為16 bit、像素深度為8 bit時,邊緣檢測的處理速率為825.5 KB/s。
3.2.2 并行實現方案
并行實現是將for循環打平、替換數組和增加流水線操作來實現并行執行。與串行實現對比可知,在速率方面提高68.5倍左右,在100 MHz的頻率下,處理像素為(1 080×1 092)的圖像速率為48幀/s。當邊緣檢測IP的數據的寬度為16 bit、像素深度為8 bit時,邊緣檢測的處理速率為56 609.28 KB/s。
通過以上兩種實現可知,并行比串行實現的處理速率速度提高了68.5倍左右,與處理時間相對應的數據吞吐率也提高了68.5倍。當數據帶寬不滿足要求時,可以通過修改軟件代碼中變量的位寬來增加IP數據端口的寬度,從而提高數據吞吐量。
硬件電路所使用的資源往往也是算法考慮的因素之一。表2是兩種實現策略所需要的硬件資源。
在資源使用方面,并行比串行實現所使用的資源多,占整個芯片的資源分別為BRAM_18K為10%,DSP48E為0,FF為3%,LUT為10%。可知資源滿足設計要求。
4 結果分析
通過三組公路真實場景來驗證本文邊緣檢測的效果。第一組是在白天拍攝的公路場景,見圖4,圖4(a)為輸入的原始圖像,圖4(b)為OpenCV邊緣檢測的結果,圖4(c)為硬件加速邊緣檢測結果。第二組是在晚間拍攝的公路場景(曝光效果差),見圖5,圖5(a)為輸入的原始圖像,圖5(b)為OpenCV邊緣檢測的結果,圖5(c)為硬件加速邊緣檢測結果。第三組是在晚間拍攝的公路場景,見圖6,圖6(a)為輸入的原始圖像,圖6(b)為OpenCV邊緣檢測的結果,圖6(c)為硬件加速邊緣檢測結果。
對圖4、圖5和圖6從橫縱兩個角度來分析硬件加速邊緣檢測的效果。橫向分析,與OpenCV邊緣檢測結果比較可知,硬件加速方案輸出邊緣圖像線條更加的明顯,在圖5曝光效果差的情況下OpenCV存在邊緣漏檢測的情形,而硬件加速方案則不存在漏檢的情況;縱向分析,在白天拍攝的場景邊緣檢測的結果要比晚上輸出的效果好些,在晚上拍攝的場景曝光好的邊緣檢測效果要比曝光差輸出的效果好。
對三組場景下的硬件加速邊緣檢測效果分析可知,硬件加速邊緣檢測明效果顯優于OpenCV邊緣檢測,同時在相機曝光效果差或者外界環境復雜的情況下,硬件加速邊緣檢測都能進行有效邊緣檢測。
5 結論
針對傳統OpenCV圖像處理存在延時長和數據帶寬受限的缺點,采用硬件加速可以彌此不足。采用Vivado HLS在軟件應用的基礎上進一步實現硬件電路設計,大大縮短了系統的開發周期。本文不僅提出邊緣檢測的硬件加速方案,同時提出了在數據處理量大和處理速度快的應用中可以通過軟硬件結合來提供系統設計的方案。
參考文獻
[1] 關新平,趙立興,唐英干.圖像去噪混合濾波方法[J].中國圖象圖形學報,2005,10(3):332-337.
[2] 蔣婷,譚躍剛,劉泉.基于SOBEL算子的圖像清晰度評價函數研究[J].計算機與數字工程,2008(8):129-131,191.
[3] 靳鵬飛.一種改進的Sobel圖像邊緣檢測算法[J].應用光學,2008(4):625-628.
[4] 白俊江,洪春勇.基于Sobel的邊緣檢測方法[J].電腦知識與技術,2009(21):5847-5849.
[5] 李錦明,閆曉俊,江旭東,等.Sobel圖像邊沿檢測算法的優化設計與實現[J].電子技術應用,2016,42(3):71-73.
[6] 楊新華,寇為剛.基于FPGA的Sobel算子圖像邊緣檢測算法[J].儀表技術與傳感器,2013(1):102-104.
[7] 寧賽男,朱明,孫宏海,等.一種改進的Sobel自適應邊緣檢測的FPGA實現[J].液晶與顯示,2014(3):395-402.
[8] 郭豐收.Xilinx FPGA/Zynq設計中使用HLS實現OpenCV的開發流程[J].電子產品世界,2014(2-3):50-52.
作者信息:
彭習武,張 濤
(武漢科技大學 信息科學與工程學院,湖北 武漢430081)