蔣誠恒,唐立軍
(1.長沙理工大學物理與電子科學學院,湖南長沙 410114;2.近地空間電磁環(huán)境監(jiān)測與建模湖南省普通高校重點實驗室,湖南長沙 410114)
遠程實驗設(shè)備終端視頻圖像處理主要有小型ARM 系統(tǒng)[1-3]、大型計算機[4]和FPGA+ARM[5-7]三種實現(xiàn)方案。小型ARM 系統(tǒng)大多調(diào)用封裝好的圖像處理庫進行處理,但其本身算力和資源限制,導(dǎo)致在對實驗數(shù)據(jù)的處理提取有很大延遲;使用大型計算機可以對圖像數(shù)據(jù)高速處理,但占地空間大、成本高;FPGA+ARM 具有體積小、成本低、速度快的優(yōu)勢。目前ARM+FPGA 的視頻圖像處理方案利用FPGA 硬件運算優(yōu)勢進行預(yù)處理,把實驗圖像識別放到搭載linux 系統(tǒng)的ARM 上。FPGA 通過相應(yīng)的圖像處理IP核來實現(xiàn)圖像的模塊化處理,使用的圖像處理IP 核是封裝好的現(xiàn)成IP 核,處理過程數(shù)據(jù)存在重復(fù)處理、運算周期長的問題,處理好的實驗圖像被移植到Linux 系統(tǒng)上的OPENCV 庫進行識別,最終實驗圖像結(jié)果并不能保證系統(tǒng)整體的實時性[8]。因此,文中以減少遠程實驗平臺延遲為目標,探索ARM+FPGA 的遠程實驗設(shè)備終端視頻圖像處理方法,為提高遠程實驗操作平臺的性能提供一定的支撐條件。
實驗設(shè)備終端負責整個系統(tǒng)對實驗現(xiàn)象的采集、處理傳輸?shù)热蝿?wù)。該實驗采用ARM+FPGA 架構(gòu),該架構(gòu)包含PS 端和PL 兩部分,PS 端集成雙核ARM 處理器芯片,PL 端由FPGA 芯片組成,架構(gòu)設(shè)計如圖1 所示,包括圖像數(shù)據(jù)采集、緩存、圖像處理、網(wǎng)絡(luò)傳輸四個部分。
圖1 遠程實驗平臺設(shè)備終端架構(gòu)設(shè)計
實驗終端視頻圖像通過視頻接口傳輸進入PL端。圖像數(shù)據(jù)流經(jīng)過濾波、邊緣檢測、幀間差分IP 核進行視頻圖像處理以及實驗現(xiàn)象信息提取,得到的圖像數(shù)據(jù)通過AXI-stream IP 核進行格式轉(zhuǎn)換,并送入VDMA IP 核,VDMA 利用其特有的幀緩存和緩沖機制,實現(xiàn)高效視頻數(shù)據(jù)存取。PL 和PS 通過AXI 片內(nèi)協(xié)議進行通信,PS 端控制PL 端寄存器的配置以及DDR3、以太網(wǎng)模塊等外設(shè)的控制,處理好的圖像數(shù)據(jù)存入DDR3 進行存儲,待準備好送入PS 端進行進一步的處理,最終將處理所得的實驗現(xiàn)象信息通過以太網(wǎng)口進行發(fā)送,并與遠程實驗平臺進行通信。
考慮到遠程實驗平臺實際使用場景,選取在實驗室場景下濾噪效果好的中值濾波。文中選擇3×3的濾波窗,通過三個步驟來求得最終的中值[9]。
中值濾波算法劃分為兩級流水線任務(wù),其實現(xiàn)步驟如圖2 所示,第一級流水線的行列計數(shù)模塊對濾波窗滑過的圖像行列進行計數(shù),此步的目的是判斷濾波窗滑動是否到達圖像邊界,到達邊界像素值因為沒有鄰域像素則需要獨立進行處理[10-11]。
圖2 中值濾波兩級流水線設(shè)計
第一級流水線的濾波窗口生成模塊將圖像數(shù)據(jù)分成三通道并行陣列方便后續(xù)進行并行處理,中值濾波算法將輸入的三通道圖形數(shù)據(jù)分別進行運算,文中采用的3×3 濾波窗口模塊結(jié)構(gòu)如圖3 所示。可以采用同步FIFO 或者shift_ram 來完成對圖像的遍歷,在圖中為硬件實現(xiàn)濾波窗口框圖,該濾波窗口由兩個FIFO(或是帶抽頭的shift_ram)和六個寄存器構(gòu)成,圖像數(shù)據(jù)在同步時鐘驅(qū)動下,從FIFO 輸入端口串行輸入,圖像數(shù)據(jù)通過FIFO 一次向下和向右通過,將圖像數(shù)據(jù)分割成九個獨立像素,從而轉(zhuǎn)變?yōu)椴⑿袛?shù)據(jù),以便通過中值濾波進行處理。
圖3 濾波窗口生成模塊
第二級流水線是中值濾波部分,如圖4 所示。根據(jù)中值濾波原理,可以將處理過程分成三級子流水線。
圖4 中值濾波模塊結(jié)構(gòu)
第一級子流水線將濾波窗對應(yīng)的3×3 圖像9 個數(shù)據(jù)按行進行分組(L1,L2,L3),對它們進行大小排序。
第二級子流水線進行重新分組,將每組中最大值、中值、最小值分別篩選出來。
第三級子流水線在三組數(shù)據(jù)中挑選最大值組中的最小值、中值組的中值、最小值組的最大值,將三個數(shù)據(jù)再做比較,最終將這三個值的中值作為9 個數(shù)據(jù)的中值。
將快速中值濾波算法進行原理分析,將算法計算任務(wù)劃分為兩級流水線,其中濾波窗體生成模塊和中值濾波模塊又細分為多級子流水線,同時有多個圖像數(shù)據(jù)在重疊執(zhí)行,子流水線將三通道數(shù)據(jù)進行并行處理,從而大大提高了圖像數(shù)據(jù)處理速度。
文中采用Sobel 邊緣檢測算法進行邊緣檢測,為避免像素點其他方向幅值較高,但水平和垂直方向梯度幅值較低的情況出現(xiàn),采用x、y、45°、135°方向算子進行梯度計算,如式(1)所示:
梯度幅值采用向量[Gx,Gy,G45°,G135°]T的一范數(shù)進行表示。
根據(jù)Sobel 邊緣檢測算法的原理[12],其硬件實現(xiàn)包括三個部分,如圖5 所示。
圖5 邊緣檢測流水線設(shè)計
根據(jù)邊緣檢測原理將處理任務(wù)分成三級流水線,將梯度計算的四個方向梯度分成四路并行陣列。圖像輸入與前文一樣不做贅述。第一級流水線卷積運算通常使用觸發(fā)器、加法器和乘法器方式或可編程乘法器的altmult_add 模塊方式進行實現(xiàn),但這些方法基于乘法器的結(jié)構(gòu),存在圖像處理過程復(fù)雜速度較慢和缺乏輸入的連續(xù)性的問題。針對這些不足,該模板設(shè)計采用移位加法運算,第二級流水線將四個方向的梯度值進行合成,第三級流水線與閾值T進行比較篩選出邊緣。
圖6 所示為垂直方向的梯度計算子電路,該子電路將三行數(shù)據(jù)分成并行陣列垂直方向Sobel 算子模板和對應(yīng)的像素灰度值做移位乘法,算子模板儲存在寄存器中,與相對應(yīng)的圖像模板數(shù)據(jù)進行移位乘法運算,將每一行結(jié)果送入并行相加模塊進行相加。
圖6 卷積計算流水線設(shè)計
第二級流水線將第一級流水線四路有符號梯度結(jié)果求一范數(shù)并進行相加,得出該像素點的梯度值。
第三級流水線采用自適應(yīng)的閾值方法[13],以像素窗口中的中值作為該局部圖像的閾值,實現(xiàn)閾值的自適應(yīng)。將每個像素梯度值與其自適應(yīng)閾值進行比較來判斷是否為邊緣。這種方式調(diào)用模塊較少,可以簡化設(shè)計,因為沒有乘法器的使用,增加了運算效率和減少資源使用率,流水線設(shè)計和并行處理三通道可以讓任務(wù)重疊執(zhí)行,提高了邊緣檢測效率。
該設(shè)計以邁克爾遜干涉儀為場景,根據(jù)實驗步驟,實驗現(xiàn)象信息為干涉條紋“冒出”和“湮滅”數(shù)量和微動鼓輪讀數(shù)。
文中使用邏輯復(fù)雜度低、易于實現(xiàn)的幀間差分法對條紋狀態(tài)信息進行提取[14-15]。
當條紋發(fā)生位移時,每幀圖像運動區(qū)域的像素點與上一幀相比,灰度值會發(fā)生變化,此時對兩幀做差分,可以將運動部分像素分割出來,根據(jù)兩幀圖像差分的正負值便可以得出條紋位移方向。兩幀圖像差分得到的像素由攝像頭與觀察屏進行標定可得出每一幀相比上一幀的微位移dx1,將每幀的dx進行累加,那么一段時間內(nèi)的條紋運動距離為當變化的像素對應(yīng)的位移距離大于閾值T時,則判定“冒出”或“湮滅”條紋,記作一次標志位,如圖7所示。
圖7 條紋邊緣幀間差分過程
實現(xiàn)過程如圖8 所示,將圖像數(shù)據(jù)分為兩路,前一幀做一次緩存處理,在當前幀到來時,將兩幀圖像進行差分,將所得的差分結(jié)果放入累加器,累加器累加得位移結(jié)果,將位移結(jié)果通過AXI 總線與PS端進行通信,存入DDR 中,PS 端訪問DDR 對結(jié)果進行最終的閾值判斷,最終發(fā)送到以太網(wǎng)模塊與服務(wù)器通信。
圖8 實驗數(shù)據(jù)提取
文中對加速方案的測試分為兩種,一種是實驗結(jié)果準確性測試,將線下實驗數(shù)據(jù)與遠程實驗操作實驗數(shù)據(jù)進行對比;另一種是對加速環(huán)節(jié)延遲性進行測試,將原有遠程終端視頻處理方案和傳統(tǒng)方案的延遲進行對比。原有平臺為樹莓派3b+,擁有1.4 GHz 處理器,雙頻2.4 GHz;傳統(tǒng)FPGA 硬件實現(xiàn)采用zynq-7000,100 MHz 工作頻率;實驗均使用邁克爾遜干涉儀實驗進行測試。
該實驗為測量He-Ne 激光的波長,需要轉(zhuǎn)動微調(diào)鼓輪并記錄刻度讀數(shù),在觀察屏上觀察干涉條紋的“冒出”和“湮滅”,記錄干涉條紋“冒出”和“湮滅”的次數(shù),最終使用逐差法計算波長的平均值[16]。每當“冒出”或“湮滅”條紋時,新條紋會取代舊條紋的位置,因此“冒出“或“湮滅”條紋的標志是位移距離等于條紋間距。邁克爾遜干涉條紋半徑可表示為:
根據(jù)條紋半徑公式可以求出指定條紋的間距,經(jīng)過標定,可以根據(jù)條紋間距設(shè)定閾值T,當位移距離大于閾值T時,可以判斷條紋狀態(tài)變化,進行一次標記。根據(jù)收到的條紋“冒出”和“湮滅”信息Δk和M1 鏡移動Δd,可以求出He-Ne 激光波長為:
準確率結(jié)果通過對比線下實驗操作和遠程實驗操作得到,遠程實驗平臺實驗可得條紋數(shù)Δk(X1-X10 表示每變化50 個條紋進行一次計數(shù))與對應(yīng)的M1 鏡位置Δd如表1 所示。
表1 實驗數(shù)據(jù)表
經(jīng)過逐差法得出M1 鏡平均位置變化:
延遲性測試針對硬件加速模塊進行測試,結(jié)果如圖9 所示。
圖9 測試結(jié)果
加速后的延遲與原平臺、傳統(tǒng)硬件實現(xiàn)方案延遲如表2 所示。
表2 三種實現(xiàn)方案對比
根據(jù)三種方案對比中值濾波和邊緣檢測兩項延遲表現(xiàn),可以發(fā)現(xiàn),原有平臺和傳統(tǒng)硬件實現(xiàn)方案在中值濾波環(huán)節(jié)延遲分別是文中方案的180 倍和2.4倍;原有平臺和傳統(tǒng)方案在邊緣檢測環(huán)節(jié)延遲分別是文中方案的114 倍和3 倍;最終遠程視頻圖像處理總延遲相較于原有平臺方案縮短了97.17%。
采用ARM+FPGA 作為遠程實驗設(shè)備終端視頻圖像處理架構(gòu),設(shè)計流水線、并行陣列以及幀間差分的方法實現(xiàn)了圖像處理以及實驗特征信息提取的加速,有效解決了遠程實驗過程中圖像處理效率低、實驗特征信息提取速度慢的問題,有效縮短了遠程實驗平臺的延遲。在該實驗室的遠程實驗操作平臺應(yīng)用結(jié)果表明,應(yīng)用文中方法使原有平臺的總延遲縮短了97.17%,提升了遠程實驗平臺的性能。