文/徐銘君
圖像的卷積運算在圖像處理中十分重要,卷積運算可以有效的提取圖像的特征?,F(xiàn)在機器視覺和機器學習的過程中往往需要對圖像進行多次多層的卷積,對于一幅N2大小的灰度圖像,利用M2的卷積核進行卷積運算(M 圖像卷積是用原始圖像的各個像素及其領域的灰度值與卷積核的對應元素進行逐項相乘后相加的過程,運用式(1)并把結果Y 重新賦值給z5。 自定義指令可以讓開發(fā)者定制Nios II 處理器來滿足特定應用程序的需求。在ALU 上掛載自定義硬件邏輯塊,可以加快軟件的執(zhí)行速度 。因為Nios Ⅱ給出的組合邏輯的自定義指令的傳入接口是兩個32bit 的輸入dataa 和datab。而原始灰度圖像的數(shù)據是8 位的無符號整形的變量,卷積核為有符號的8 位的變量,所以該系統(tǒng)在設計時把輸入數(shù)據分割成為4 個變量,如圖1。并把這四個灰度值和權重進行對應項相乘之后相加,交給輸出接口32 位的result 輸出,這樣可以一次性完成2x2 像素點的灰度值卷積。通過重復調用這個指令并把結果相加,同樣可以完成3x3,4x4 等的圖像卷積運算。 圖1:VHDL 實現(xiàn)數(shù)據分割 圖2:軟件位移合并圖像數(shù)據 圖3:邊緣提取原圖及輸出圖像 運用Nois Ⅱ內核所提供的自定義指令的調用宏ALT_CI_CONVOLUTION_0(A,B),可以調用VHDL 設計的卷積指令。但是因為該宏命令的傳入參數(shù)只有兩個32 位長的整形變量,所以應當依照上面VHDL 硬件描述語言中的數(shù)據劃分方法,在C 語言軟件上需要把四個傳入的8 位灰度像素點進行整合如圖2,對于用位移相或的方法,把原始圖像的灰度移動到32位的變量中再傳入自定義指令的宏中。 利用該自定義指令系統(tǒng)進行圖像卷積,采用Laplacian 算子的卷積核進行邊緣提取。先分別對文字和智能車實驗賽道進行退化處理(圖3a,c),之后再使用Laplacian 算子的卷積核對該圖像卷積,對應得到如下的結果圖像(圖3b,d)。 利用Nios Ⅱ提供的時間戳(timestamp)功能,分別對完全C 語言軟件實現(xiàn)和自定義指令實現(xiàn)的過程進行計時,并且輸出兩者所用的時鐘周期。 對于3×3 的卷積核需要調用三次自定義四點卷積指令。經過測試,通過計時多次得到結果取平均值得到完全軟件實現(xiàn)所用時鐘周期為108397813,而自定義指令需要的時鐘周期為62150273。為純軟件實現(xiàn)的57.34%,速度提升了74.4%。 該自定義指令系統(tǒng),運用VHDL 構建了一個四個灰度像素點的卷積器,相比于以往的完全靠軟件實現(xiàn)圖像卷積,加快了卷積的過程。使速度加快70%以上,特別的現(xiàn)在對于圖像的卷積層數(shù)越來越深,用這種軟硬件結合的方式對于圖像的實時處理有積極的意義。2 SOPC自定義指令構建
2.1 自定義指令部分的實現(xiàn)
2.2 自定義指令軟件調用
3 成果及運用
3.1 功能實現(xiàn)
3.2 效率提升分析
4 結語