摘 要:OpenCV目前已擁有數(shù)以萬計的用戶,因OpenCV不用修改就可實現(xiàn)在ARM系統(tǒng)處理器中的高效運行,使其倍受青睞。但OpenCV在實際應用中通常會受來自外部處理器等方面的限制,特別是存儲類寬帶往往會限制OpenCV的性能。基于此,為有效改善這一問題,文章就以基于Xilinx的HLS作為性能優(yōu)化的著手點,首先對OpenCV中的函數(shù)處理以及圖像進行概述,之后對基于Xilinx的HLS如何實現(xiàn)OpenCV函數(shù)及圖像處理的設計原理、性能優(yōu)勢以及具體設計展開研究。
關鍵詞:Xilinx;HLS;OpenCV;研究;設計;編程
OpenCV的圖像處理主要是通過存儲器中緩存的幀實現(xiàn)的,在實際的圖像處理過程中,總是要假設存儲器中存放了圖像數(shù)據(jù),因此圖像處理功能也就受到存儲器的容量限制,也正是因為此種特性,在進行大圖像的局部處理及訪問時,很可能因處理器的容量、性能因素,導致無法完成這一任務。因此為了減少此方面的制約,就需要提升OpenCV設計的復雜性,增加容量、提升性能,也就因此提高了功耗性能[1]。這也就造成了OpenCV難以通過較小功能,滿足較多的應用需求。而基于Xilinx的HLS的高級語言編程工具能夠快捷方便地通過C語言建立RTL,并加以轉換實現(xiàn)OpenCV視頻處理,不會受到外部處理器的限制,有效實現(xiàn)了低耗能、高性能的改進[2]。以下文章就對這種基于Xilinx的HLS如何實現(xiàn)OpenCV函數(shù)及圖像處理的設計原理、性能優(yōu)勢以及設計展開研究,具體如下。
1 OpenCV的函數(shù)及圖像處理
OpenCV的常見圖像處理數(shù)據(jù)容器并不唯一,主要有側重數(shù)據(jù)邏輯數(shù)學計算的MAT、以及側重于圖像處理的IPLIMAGE以及CvMAT等幾種類型,在OpenCV中又進一步強化了圖像操作,如縮小、放大、閾值操作等。
1.1 MAT
MAT是OpenCV中一個十分密集的多維數(shù)據(jù)組,如向量、圖像以及矩陣等數(shù)據(jù)。相對于其它兩種數(shù)據(jù)圖像處理類型來看,MAT的矩陣運算、邏輯推理等能力都相對較強,也正是因MAT邏輯計算性能強的特性,能夠快速將CVMAT以及IPLIMAGE轉變成Mat類型。
1.2 CVMAT與IPLIMAGE
這兩種處理器類型更側重對于圖像的處理功能,在OpenCV中又將這一功能實現(xiàn)進一步優(yōu)化,要注意的是在OpenCV中并不存在向量這一數(shù)據(jù)結構,所以在表示向量時,就需要利用矩陣數(shù)據(jù),相比之下,CVMAT的數(shù)據(jù)處理更為抽象[2]。因此在這兩者關系上來看,IPLIMAGE可以看做是在CVMAT的基礎上增加許多參數(shù),實現(xiàn)進一步拓展。IPLIMAGE在進行數(shù)據(jù)處理方面較CVMAT增加了nChannels以及origin向量原點等,因此在OpenCV中為了實現(xiàn)這一功能,可以讓用戶通過自定義的形式自主設置原點。
2 基于Xilinx的HLS實現(xiàn)OpenCV的研究與設計
2.1 基于Xilinx的HLS實現(xiàn)OpenCV的原理及優(yōu)勢研究
OpenCV目前已被廣泛應用在計算機視覺的開發(fā)中,其函數(shù)庫共包含上千個視頻函數(shù),且能夠對臺式處理器進行針對性GPU優(yōu)化,Xilinx HLS能夠通過C語言編寫實現(xiàn)RTL硬件的建立,從而提升設計質量,此外Xilinx的SoC系列型號器件能夠嵌入到ARM系統(tǒng)處理器中,增強FPGA的可編程能力,在低成本、低耗能的基礎上實現(xiàn)高系統(tǒng)性能[3]。OpenCV目前已擁有數(shù)以萬計的用戶,且OpenCV不用修改就可實現(xiàn)在ARM系統(tǒng)處理器中的高效運行,但OpenCV在實際應用中通常會受來自外部處理器等方面的控制,特別是存儲類寬帶往往會限制OpenCV的性能[4]。而基于Xilinx的HLS的高級語言編程工具能夠快捷方便地通過C語言建立RTL,并加以轉換實現(xiàn)OpenCV視頻處理,不會受到外部處理器的限制。同時Xilinx的Soc的嵌入式結構,通過可編程功能拓展與強化,有效實現(xiàn)了低耗能高性能的優(yōu)化效果,實現(xiàn)圖像集成處理。
基于Xilinx的HLS對于OpenCV的實現(xiàn)并不是直接將來自OpenCV數(shù)據(jù)庫中的數(shù)據(jù)直接轉換成RTL代碼,而是先提取OpenCV的數(shù)據(jù)代碼,生成數(shù)據(jù)鏈,并通過HLS數(shù)據(jù)庫進行轉換,轉變?yōu)榭删C合的HLS圖像代碼,此種代碼由Xilinx公司提供,HLS代碼在接口與算法方面都和OpenCV存在較大相似性,同時還針對FPGA框架構建了相應的優(yōu)化處理函數(shù),能夠有效和FPGA可編程系統(tǒng)實現(xiàn)匹配。
2.2 基于Xilinx的HLS實現(xiàn)OpenCV的設計
首先在計算機上進行OpenCV的應用設計,以C語言進行編輯,并生成可執(zhí)行性文件,編輯完成后,不用修改,就可直接在ARM中實現(xiàn)OpenCV的運用[5-6]。之后以I/O函數(shù)將FPGA系統(tǒng)中的函數(shù)提取出來,并利用基于Xinlinx的HLS數(shù)據(jù)庫將OpenCV函數(shù)轉換為HLS函數(shù)代碼[6-7]。運行HLS代碼并通過C語言生成對應的RTL代碼,在Xilinx開發(fā)環(huán)境下,這些RTL代碼能夠通過ARM中的FPGA系統(tǒng)或嵌入式SOC系統(tǒng)來實現(xiàn)[7],即由FPGA實現(xiàn)這些RTL的運行,最終完成基于Xilinx的HLS的OpenCV圖像處理與調用。
基于Xilinx的HLS實現(xiàn)OpenCV的基本原理就是通過函數(shù)HLS數(shù)據(jù)庫進行RTL代碼的轉換,再通過ARM系統(tǒng)中的FPGA實現(xiàn)視頻處理,在具體的設計與功能實現(xiàn)上,需要同時結合軟硬件,并通過HLS實現(xiàn)OpenCV向FPGA系統(tǒng)的映射,避免了傳統(tǒng)OpenCV受存儲器制約的問題,有效實現(xiàn)了低耗能高性能的優(yōu)化效果。
3 結束語
傳統(tǒng)的OpenCV會受到存儲器等因素的影響,難以實現(xiàn)耗能與性能方面的權衡,綜上所述,為提升OpenCV圖像處理的低能耗、高性能改進,文章首先對OpenCV的函數(shù)及圖像處理類型進行探討,在此基礎上,結合基于Xilinx的HLS實現(xiàn)OpenCV的原理、優(yōu)勢以及具體設計展開探討,希望能對相關人士提供些許參考。
參考文獻
[1]黨宏社,王黎,王曉倩.基于Vivado HLS的FPGA開發(fā)與應用研究[J].陜西科技大學學報(自然科學版),2015,33:155-159.
[2]丁帥帥,柴志雷.基于HLS的SURF特征提取硬件加速單元設計與實現(xiàn)[J].微電子學與計算機,2015,12:133-137+143.
[3]張俊濤,王園偉,龐多.一種硬件加速OpenCV的圖像處理方法研究[J].微型機與應用,2015,14:41-43.
[4]Accelerating Open CV applications with Zynq using Vivado HLS video libraries(XAPP1167)[Z].
[5]Bradski G,Kaebler A.Learning OpenCV.ISBN 978-7-302-20993-5[Z].
[6]Implementing memory structure for video processing inthe VivadoHLS tool(XAPP793) [Z].
[7]Gonzalez R C.Wood R E.Digital Image Processing,3rded.ISBN 978-7-121-11008-5[Z].