鄭 杰,劉 杰,黃 超,陳更生
(復(fù)旦大學(xué) 專用集成電路與系統(tǒng)國家重點(diǎn)實(shí)驗(yàn)室,上海 201203)
一種改進(jìn)的基于角點(diǎn)檢測的并行化電子穩(wěn)像算法
鄭 杰,劉 杰,黃 超,陳更生
(復(fù)旦大學(xué) 專用集成電路與系統(tǒng)國家重點(diǎn)實(shí)驗(yàn)室,上海 201203)
針對攝像設(shè)備拍攝視頻抖動(dòng)問題和實(shí)時(shí)處理要求,本文提出一種改進(jìn)的基于角點(diǎn)檢測的并行化電子穩(wěn)像算法.該算法采用并行計(jì)算和軟硬件協(xié)同計(jì)算的方法,對基于Harris角點(diǎn)檢測及Hu幾何不變矩的電子穩(wěn)像算法進(jìn)行了改進(jìn),算法通過網(wǎng)格劃分和區(qū)域極限值的并行計(jì)算,減少了角點(diǎn)檢測的計(jì)算量,采用并行化改進(jìn)的RANSAC計(jì)算提升了剔除誤匹配的處理效率,并基于圖形處理器(Graphic Processing Unit, GPU)和FPGA完成了電子穩(wěn)像算法的優(yōu)化設(shè)計(jì)實(shí)現(xiàn).實(shí)驗(yàn)結(jié)果表明,本文算法在保證良好穩(wěn)像質(zhì)量的同時(shí),對720p視頻進(jìn)行單幀穩(wěn)像的時(shí)間僅為25.48ms,能夠完成幀率為30幀/s的分辨率為1280×720的視頻實(shí)時(shí)穩(wěn)像.
電子穩(wěn)像; 并行加速; Harris; FPGA; GPU; 軟硬件協(xié)同
攝像設(shè)備在進(jìn)行影像采集時(shí),載體的突發(fā)、無序運(yùn)動(dòng)會(huì)使得拍攝的視頻產(chǎn)生不穩(wěn)定的抖動(dòng)現(xiàn)象,造成畫面模糊不清[1].圖像的抖動(dòng)會(huì)使觀察者失去觀察目標(biāo),并極易產(chǎn)生視覺疲勞.從計(jì)算機(jī)視覺的角度來看,抖動(dòng)的視頻破壞了圖像的細(xì)節(jié),給正確理解和提取圖像中的有用信息增加了難度,導(dǎo)致誤判或者漏判.電子穩(wěn)像的目的就是要通過圖像處理的方法消除各種不規(guī)則的抖動(dòng),得到相對穩(wěn)定和平滑的視頻圖像.
視頻圖像的電子穩(wěn)像有著非常高的實(shí)時(shí)性要求,近年來對電子穩(wěn)像技術(shù)的研究主要有兩個(gè)方向.一個(gè)是側(cè)重于提升視頻圖像處理的效果以及適應(yīng)多變的應(yīng)用環(huán)境,已經(jīng)有非常多的這個(gè)方面的研究,包括吉淑嬌[2]等人提出的基于改進(jìn)的運(yùn)動(dòng)矢量估計(jì)方法的穩(wěn)像算法、Litvin[3]提出的基于概率估計(jì)的穩(wěn)像方法等,這一類算法通常復(fù)雜度高、計(jì)算量大,難以完成實(shí)時(shí)處理.
電子穩(wěn)像的另一個(gè)研究方向是側(cè)重于提升處理速度、滿足實(shí)時(shí)性的要求.程德強(qiáng)[4]等人提出的基于改進(jìn)光流法的電子穩(wěn)像算法,通過避免對所有像素點(diǎn)進(jìn)行光流計(jì)算,以減少數(shù)據(jù)的計(jì)算量,實(shí)現(xiàn)了480p的視頻實(shí)時(shí)處理.崔少輝[5]等人提出的二進(jìn)制魯棒不變尺度特征點(diǎn)的穩(wěn)像算法,對光照變化及復(fù)雜環(huán)境具有較強(qiáng)的魯棒性,實(shí)現(xiàn)了分辨率為856×480的視頻實(shí)時(shí)穩(wěn)像.李剛[6]等人提出的基于位平面匹配算法的現(xiàn)場可編程門陣列(Field Programmable Gate Array, FPGA)實(shí)時(shí)電子穩(wěn)像平臺,采用格雷碼位平面算法來完成運(yùn)動(dòng)估計(jì),采用簡單的異或運(yùn)算的硬件電路實(shí)現(xiàn),以犧牲部分圖像處理效果為代價(jià),實(shí)現(xiàn)了分辨率為720×576的視頻的實(shí)時(shí)穩(wěn)像.蔡耀儀[7]等人提出的基于圖像分塊投影匹配算法的FPGA穩(wěn)像系統(tǒng),可以適應(yīng)帶有旋轉(zhuǎn)與縮放的運(yùn)動(dòng)畫面,能夠完成分辨率640×480的視頻實(shí)時(shí)穩(wěn)像.上述算法以及算法的系統(tǒng)實(shí)現(xiàn)對某些特定應(yīng)用環(huán)境有較好的電子穩(wěn)像效果,可以滿足一定的實(shí)時(shí)穩(wěn)像需求,但針對720p的高清視頻,算法和系統(tǒng)的處理速度依然不夠.同時(shí),這一類的算法在圖像處理上都較為簡單,算法的適用性、實(shí)時(shí)處理的效果和圖像質(zhì)量等都有待提高.
實(shí)時(shí)電子穩(wěn)像的難點(diǎn)在于其處理速度的提升受到算法復(fù)雜度和計(jì)算量的嚴(yán)重限制,其應(yīng)用環(huán)境越復(fù)雜,計(jì)算量就越大.在穩(wěn)像過程中通常需要考慮的情況包括平移、旋轉(zhuǎn)和尺度變換,如果只考慮平移運(yùn)動(dòng),處理速度較快且易于實(shí)現(xiàn),但處理效果不佳;而考慮尺度變換會(huì)導(dǎo)致計(jì)算量急劇增大,難以滿足高清視頻的實(shí)時(shí)穩(wěn)像要求.由于在大部分抖動(dòng)視頻中,前后幀的尺度變換并不劇烈,基于這一前提,吳國楠[8]等人提出了一種基于Harris角點(diǎn)與改進(jìn)Hu矩的電子穩(wěn)像算法,在角點(diǎn)檢測計(jì)算過程中采用灰度的一階差分以及高斯濾波,較大程度上降低了計(jì)算復(fù)雜度,且對存在平移抖動(dòng)、繞主光軸旋轉(zhuǎn)抖動(dòng)和輕微尺度縮放的視頻圖像具有良好的處理效果,其缺點(diǎn)是算法的處理速度仍然較低,無法滿足實(shí)時(shí)性處理的要求.
針對文獻(xiàn)[8]算法的特點(diǎn)和不足之處,本文通過對電子穩(wěn)像算法過程的分析,對算法主要計(jì)算耗時(shí)部分進(jìn)行提取,從并行計(jì)算和軟硬件協(xié)同計(jì)算的角度對文獻(xiàn)[8]算法進(jìn)行了改進(jìn),采用CPU+GPU+FPGA的計(jì)算架構(gòu)實(shí)現(xiàn)對算法的并行計(jì)算加速和硬件計(jì)算加速,以滿足電子穩(wěn)像算法的實(shí)時(shí)性處理要求.
基于Harris角點(diǎn)檢測的穩(wěn)像算法的框架見圖1,具體步驟見文獻(xiàn)[8].
對于一幀圖像,一般采用公式(1)進(jìn)行角點(diǎn)的檢測:
(1)
其中,Ix為圖像x方向上的梯度,Iy為圖像在y方向上的梯度,det(M)為矩陣的行列式,trace(M)為矩陣的跡,k為常數(shù).當(dāng)響應(yīng)函數(shù)R的值大于設(shè)定的閾值時(shí),判斷當(dāng)前的點(diǎn)是一個(gè)角點(diǎn).
電子穩(wěn)像算法的大部分計(jì)算集中在運(yùn)動(dòng)估計(jì)部分,因此選擇合適的運(yùn)動(dòng)估計(jì)技術(shù)是提升電子穩(wěn)像算法性能的關(guān)鍵.基于特征點(diǎn)匹配的方法是運(yùn)動(dòng)估計(jì)中較多采用的方法,在匹配過程中,特征點(diǎn)的選取非常重要,Harris角點(diǎn)檢測的優(yōu)點(diǎn)見文獻(xiàn)[9].
基于Harris角點(diǎn)檢測的穩(wěn)像算法在特征點(diǎn)提取上計(jì)算簡單迅速,具有良好的旋轉(zhuǎn)不變性,在特征描述上對旋轉(zhuǎn)和尺度變換具有不變性,具有良好的特征辨識度,能較好地適用于存在平移抖動(dòng)、旋轉(zhuǎn)抖動(dòng)而尺度變換不大的應(yīng)用環(huán)境,采用灰度的一階差分進(jìn)行角點(diǎn)檢測的計(jì)算方法較大程度上降低了計(jì)算復(fù)雜度,但其處理速度較低,難以滿足實(shí)時(shí)處理要求.
針對文獻(xiàn)[8]算法在計(jì)算速度和實(shí)時(shí)性上的不足,本文提出了一種基于角點(diǎn)檢測的并行化電子穩(wěn)像算法,采用CPU+GPU+FPGA的計(jì)算架構(gòu),通過軟硬件協(xié)同計(jì)算的方法對算法進(jìn)行并行計(jì)算加速和硬件計(jì)算加速,提高算法的計(jì)算性能以獲得電子穩(wěn)像的實(shí)時(shí)處理要求.
2.1 基于角點(diǎn)檢測的并行化電子穩(wěn)像算法設(shè)計(jì)
對于文獻(xiàn)[8]算法,分別采用包括了1280×720(720p)、640×480(VGA)以及320×240等多種分辨率的視頻樣本,對其各個(gè)模塊在GPU上的處理時(shí)間進(jìn)行測試,結(jié)果如表1和表2所示.可以發(fā)現(xiàn),在文獻(xiàn)[8]算法的各個(gè)模塊中,角點(diǎn)檢測和高斯濾波是穩(wěn)像算法中計(jì)算耗時(shí)最多的兩個(gè)部分,其中角點(diǎn)檢測耗時(shí)超過單幀穩(wěn)像總時(shí)間的70%,貢獻(xiàn)了最主要的計(jì)算耗時(shí).同時(shí),RANSAC計(jì)算需要多次抽樣以確保在一定的置信度內(nèi)得到含有正確模型參數(shù)的采樣,其相互獨(dú)立的采樣可以并行完成.因此,對于電子穩(wěn)像的實(shí)時(shí)處理要求來說,上述三個(gè)算法模塊具有較大的優(yōu)化空間和提升價(jià)值.
表1 文獻(xiàn)[8]算法處理時(shí)間
表2 文獻(xiàn)[8]算法各個(gè)部分占總耗時(shí)的百分比
根據(jù)上述分析,本文采用并行化計(jì)算的思想對角點(diǎn)檢測以及RANSAC算法模塊進(jìn)行改進(jìn)和優(yōu)化.
在角點(diǎn)檢測過程中,滿足閾值的角點(diǎn)數(shù)比較多,計(jì)算量較大,所以需要采取一些措施減少角點(diǎn)數(shù)量,以減少后續(xù)步驟的計(jì)算量;RANSAC算法中每次采樣相互獨(dú)立,所以存在并行化優(yōu)化空間.具體改進(jìn)如下:
1) 網(wǎng)格化角點(diǎn)檢測
由于在角點(diǎn)檢測過程中計(jì)算梯度、極大值抑制和閾值獲取時(shí)數(shù)據(jù)間有相關(guān)性,不能簡單的進(jìn)行并行.針對角點(diǎn)數(shù)量過多導(dǎo)致后續(xù)計(jì)算量過大的問題,首先對圖像進(jìn)行了網(wǎng)格劃分,如圖2(a)所示,將整幀圖像劃分為若干個(gè)大小(2n-1)×(2n-1)的正方形網(wǎng)格,計(jì)算出每個(gè)網(wǎng)格內(nèi)角點(diǎn)響應(yīng)函數(shù)的最大值,然后對這些網(wǎng)格進(jìn)行極大值濾波.這樣可以避免特征點(diǎn)過于集中.與直接對響應(yīng)函數(shù)進(jìn)行極大值濾波相比,采用先網(wǎng)格劃分再濾波會(huì)使得計(jì)算量減小很多.假設(shè)一幀圖像的像素點(diǎn)總數(shù)為N,這部分需要進(jìn)行的比較運(yùn)算的次數(shù)如公式(2)所示:
(2)
而文獻(xiàn)[8]采用的是鄰域最大值的方法,對一幀圖像中以每一個(gè)像素點(diǎn)為中心,進(jìn)行大小為(2n-1)×(2n-1)的鄰域檢測,當(dāng)像素點(diǎn)的響應(yīng)函數(shù)為鄰域內(nèi)最大值時(shí),才將其標(biāo)為特征點(diǎn),如圖2(b)所示.可以看到對像素點(diǎn)的響應(yīng)函數(shù)進(jìn)行鄰域比較時(shí),鄰域之間有很多重疊部分,考慮計(jì)算量最大的情況,文獻(xiàn)[8]需要對每個(gè)像素點(diǎn)的響應(yīng)函數(shù)進(jìn)行(2n-1)×(2n-1)次比較運(yùn)算,總運(yùn)算次數(shù)如公式(3)所示:
n2=N×(2n-1)×(2n-1)
(3)
因此,這部分的計(jì)算量約為文獻(xiàn)[8]算法的1/(2n-1)2,n取決于網(wǎng)格大?。?/p>
2) 并行化RANSAC算法[10]
基于文獻(xiàn)[11],本文提出了一種并行化RANSAC算法,能夠并行進(jìn)行數(shù)據(jù)抽樣、運(yùn)動(dòng)模型參數(shù)計(jì)算以及內(nèi)點(diǎn)計(jì)算.并行化RANSAC算法的基本思路是: 對給定的數(shù)據(jù)和參數(shù),對匹配點(diǎn)采樣、運(yùn)動(dòng)模型參數(shù)計(jì)算以及局內(nèi)數(shù)據(jù)計(jì)算工程進(jìn)行并行處理,選擇局內(nèi)數(shù)據(jù)最多的采樣作為最優(yōu)解,再通過最小二乘法獲得最優(yōu)參數(shù).
并行化RANSAC算法實(shí)現(xiàn)流程如下:
· 根據(jù)公式(4)通過置信度p計(jì)算采樣次數(shù):
(4)
其中ε為誤匹配率,p為置信度.
· 在每次采樣中使用隨機(jī)函數(shù)進(jìn)行匹配對的抽樣,然后將所得到的抽樣結(jié)果保存到共享內(nèi)存里.
· 在每個(gè)塊中采用多線程的方式計(jì)算出運(yùn)動(dòng)模型的參數(shù).
· 在每個(gè)線程塊中使用多個(gè)線程訪問集合中的匹配對,根據(jù)前面計(jì)算的參數(shù)以及預(yù)先設(shè)定的閾值,判斷每個(gè)匹配對是否是當(dāng)前抽樣的局內(nèi)數(shù)據(jù).
· 將每次采樣時(shí)局內(nèi)外點(diǎn)的判斷信息放入到預(yù)先申請的緩存空間中,統(tǒng)計(jì)每次采樣的局內(nèi)點(diǎn)數(shù).
· 然后找出m次采樣中內(nèi)點(diǎn)數(shù)量最多的采樣,并認(rèn)為該采樣抽取到的數(shù)據(jù)都是有效數(shù)據(jù).
· 對該采樣確定的局內(nèi)點(diǎn)進(jìn)行最小二乘法再次計(jì)算運(yùn)動(dòng)模型的參數(shù),最終得到最優(yōu)解.
根據(jù)第2.1節(jié)測試結(jié)果,高斯濾波耗時(shí)較多,約占20%的算法總耗時(shí),需要進(jìn)行優(yōu)化.高斯濾波在算法原理上的優(yōu)化空間有限,因此本文對總體的算法設(shè)計(jì)在實(shí)現(xiàn)上進(jìn)行了改進(jìn),采用在浮點(diǎn)運(yùn)算等科學(xué)運(yùn)算中性能更好的GPU來完成.改進(jìn)后的算法框圖如圖3所示,圖中陰影部分為本文進(jìn)行優(yōu)化和改進(jìn)的部分.
2.2 基于GPU的算法并行化設(shè)計(jì)和優(yōu)化
采用CPU+GPU的算法實(shí)現(xiàn)架構(gòu)對文獻(xiàn)[8]的算法進(jìn)行改進(jìn),采用Nvidia GT240 GPU對整個(gè)文獻(xiàn)[8]算法流程以及包括角點(diǎn)檢測、特征提取、高斯濾波、角點(diǎn)匹配、RANSAC計(jì)算及雙線性插值部分等的算法各個(gè)模塊進(jìn)行了并行化改進(jìn)設(shè)計(jì),并利用GPU的并行計(jì)算和資源共享特性對算法過程中耗時(shí)較多的角點(diǎn)檢測和高斯濾波部分進(jìn)行優(yōu)化設(shè)計(jì):
1) Harris角點(diǎn)檢測
在對圖像數(shù)據(jù)進(jìn)行Harris角點(diǎn)檢測時(shí),在梯度、濾波等前幾個(gè)計(jì)算步驟中,將GPU的每個(gè)線程對應(yīng)到畫面的每個(gè)像素上,使執(zhí)行過程充分并行化.為保證特征點(diǎn)的數(shù)量適中并兼顧處理速度和穩(wěn)像質(zhì)量,在網(wǎng)格劃分時(shí)選取網(wǎng)格大小為16×16.同時(shí)在角點(diǎn)判定時(shí),采用閾值的自適應(yīng),閾值一般取響應(yīng)函數(shù)最大值的0.01倍.
2) 計(jì)算特征向量前的高斯濾波
針對高斯濾波進(jìn)行了兩方面的性能優(yōu)化:
· 以共享內(nèi)存的方式[12]訪問像素點(diǎn)數(shù)據(jù).CUDA編程的存儲器層次主要分為3層: 全局內(nèi)存(global memory)、共享內(nèi)存(shared memory)和本地內(nèi)存(local memory).三者的區(qū)別主要體現(xiàn)在不同線程級別對其的可見度上面: 全局內(nèi)存,核函數(shù)中所有線程都可以訪問;共享內(nèi)存,同一個(gè)線程塊(block)內(nèi)的線程可以訪問;本地內(nèi)存,只提供給單獨(dú)的一個(gè)線程訪問.在訪存速度上,全局內(nèi)存最慢,共享內(nèi)存快于全局內(nèi)存,本地內(nèi)存最快.在高斯濾波模塊中,利用共享內(nèi)存來訪問像素點(diǎn)數(shù)據(jù)能有效提高濾波算法的速度,共享內(nèi)存的機(jī)制是: 在核函數(shù)啟動(dòng)后,每一個(gè)線程塊(block)都有各自的一塊共享內(nèi)存,編程時(shí),對共享內(nèi)存的訪問只對相應(yīng)的線程塊可見,因此對于高斯濾波這樣與線程塊位置無關(guān)的算法而言,能夠很方便地使用共享內(nèi)存.
· 將線程塊內(nèi)線程數(shù)量設(shè)置為32的倍數(shù).在GT240 GPU的流多處理器(Stream Multiprocessors),對于每一個(gè)block,每次能夠并行發(fā)射的線程數(shù)為32,也就是一個(gè)線程束(wrap)的大小,而能夠同時(shí)處理的block數(shù)量有限.因此對于同樣的線程數(shù)量,分配到每一個(gè)block中的線程數(shù)量最少應(yīng)該是32或是32的倍數(shù),從而能夠充分利用流多處理器的并行能力,同時(shí)也減少了所需的block數(shù)量,減小了整個(gè)核函數(shù)的運(yùn)行耗時(shí).在高斯濾波并行算法的優(yōu)化中,將線程塊內(nèi)線程的數(shù)量設(shè)置為64.
3) GPU加速結(jié)果分析
根據(jù)之前所述的優(yōu)化方案,對算法在CUDA平臺上進(jìn)行了實(shí)現(xiàn),測試了多種分辨率的樣本測試穩(wěn)像算法在GPU上的運(yùn)行時(shí)間,包括1280×720(720p)、640×480(VGA)以及320×240的視頻,并與GPU上原算法的處理時(shí)間進(jìn)行了對比.
表3列出了整個(gè)穩(wěn)像所需要花費(fèi)的時(shí)間以及進(jìn)行Harris角點(diǎn)檢測所耗費(fèi)時(shí)間.其中計(jì)算加速比的定義為: 文獻(xiàn)[8]算法用時(shí)/本文改進(jìn)算法用時(shí).可以看到改進(jìn)之后的穩(wěn)像算法和文獻(xiàn)[8]算法相比,對于不同分辨率的視頻圖像獲得了5.80的平均加速比,處理速度明顯提升.
在整個(gè)穩(wěn)像過程中,Harris角點(diǎn)檢測用時(shí)為單幀穩(wěn)像用時(shí)的70%左右,所以盡可能的減少Harris角點(diǎn)檢測所花費(fèi)的時(shí)間可以有效地提高加速效果.改進(jìn)之后,這部分的耗時(shí)減少了很多,平均加速比為6.47,但是對于高實(shí)時(shí)性的應(yīng)用環(huán)境,以30幀/s的720p視頻為例,單幀穩(wěn)像時(shí)間不能超過33ms,所以這部分的耗時(shí)仍然較長.這是因?yàn)樵贖arris角點(diǎn)檢測中有一些不利于并行化的地方,比如自適應(yīng)閾值的獲取、網(wǎng)格中最大值的獲取、角點(diǎn)的整理等,由于這部分的數(shù)據(jù)具有一定的相關(guān)性,無法以多線程的方式利用流多處理器進(jìn)行并行加速,使得這部分難以在GPU上實(shí)現(xiàn)高清視頻的實(shí)時(shí)處理.
表3 單幀穩(wěn)像用時(shí)和Harris角點(diǎn)檢測用時(shí)
注: 1) 單幀穩(wěn)像;2) Harris角點(diǎn)檢測.
表4列出了使用并行RANSAC算法進(jìn)行誤匹配剔除時(shí)所耗費(fèi)的時(shí)間以及特征點(diǎn)描述中高斯濾波所花費(fèi)的時(shí)間.在采用CUDA實(shí)現(xiàn)時(shí)以采樣的次數(shù)為函數(shù)的線程塊數(shù)量,以角點(diǎn)預(yù)設(shè)最大值為線程塊大?。瑫r(shí),在GPU中生成隨機(jī)數(shù)進(jìn)行隨機(jī)采樣,減小與主機(jī)端的數(shù)據(jù)交互.可以看到這一部分平均加速比為6.41,并且對分辨率更高的視頻有更高的加速比.
根據(jù)第2.1節(jié)的測試結(jié)果,在用Hu矩進(jìn)行特征點(diǎn)描述前進(jìn)行的高斯濾波占用了特征點(diǎn)描述用時(shí)的大多數(shù)時(shí)間,約為90%.通過基于GPU的算法優(yōu)化,可以獲得17.12的平均加速比,具有很好的加速效果.
根據(jù)上述采用GPU進(jìn)行并行加速的測試結(jié)果,可以看到改進(jìn)和優(yōu)化設(shè)計(jì)后的本文算法在整體上加速效果非常明顯,平均加速比為5.80.而其中Harris角點(diǎn)檢測耗時(shí)仍然較長,不足以滿足高實(shí)時(shí)性的應(yīng)用需求,需要更進(jìn)一步的優(yōu)化和提高.
表4 RANSAC算法用時(shí)和特征點(diǎn)描述中高斯濾波用時(shí)
注: 1) RANSAC算法;2) 高斯濾波.
2.3 基于FPGA的并行化設(shè)計(jì)和硬件加速
針對第2.2節(jié)改進(jìn)方案的測試結(jié)果,引入CPU+GPU+FPGA的計(jì)算架構(gòu),針對耗時(shí)較多的Harris角點(diǎn)檢測部分進(jìn)行基于FPGA的硬件加速.電子穩(wěn)像系統(tǒng)采用帶PCIE接口的DE4 FPGA板卡作為算法的硬件算法電路的承載平臺,軟硬件平臺之間使用PCIE接口進(jìn)行數(shù)據(jù)交互,接口部分以函數(shù)的形式供GPU調(diào)用,整個(gè)算法實(shí)現(xiàn)框架如圖4所示.
整個(gè)系統(tǒng)主要分為3部分:
第一部分是圖像預(yù)處理,主要在PC端進(jìn)行.首先獲得每幀圖像的數(shù)據(jù),把數(shù)據(jù)復(fù)制到顯存,讓GPU獲得待處理數(shù)據(jù).接著對獲得的彩色圖像進(jìn)行灰度化處理,以方便進(jìn)行特征點(diǎn)的檢測.最后通過PCIE接口將灰度化的像素值傳輸至FPGA進(jìn)行特征點(diǎn)檢測處理.
第二部分是角點(diǎn)檢測,在FPGA開發(fā)板上完成.首先通過均值濾波模塊去噪;接著計(jì)算每個(gè)像素點(diǎn)的Harris算子響應(yīng)函數(shù)并求出局部極大值;然后通過設(shè)定的閾值檢測出角點(diǎn)坐標(biāo);最后通過PCIE接口將角點(diǎn)坐標(biāo)信息回送給PC進(jìn)行后續(xù)處理.
第三部分是特征匹配及運(yùn)動(dòng)補(bǔ)償,在GPU上完成.首先根據(jù)檢測到的角點(diǎn),計(jì)算圖像的特征向量,即在每個(gè)角點(diǎn)半徑為n的圓形相鄰中計(jì)算特征點(diǎn)的改進(jìn)后Hu幾何不變矩的值;接著根據(jù)特征向量,進(jìn)行圖像間特征向量的匹配,使用并行RANSAC算法剔除誤匹配點(diǎn);然后計(jì)算出相鄰圖像的局部運(yùn)動(dòng)參數(shù),對累計(jì)的運(yùn)動(dòng)參數(shù)進(jìn)行高斯濾波,得到平滑后的運(yùn)動(dòng)參數(shù);最后計(jì)算補(bǔ)償量,采用雙線性插值算法計(jì)算穩(wěn)定后的視頻圖像,輸出穩(wěn)定后的圖像序列.
在FPGA的實(shí)現(xiàn)中,將角點(diǎn)檢測分為以下幾個(gè)部分進(jìn)行優(yōu)化:
1) 均值濾波模塊
根據(jù)第1節(jié)的公式(1),計(jì)算每個(gè)像素點(diǎn)的角點(diǎn)響應(yīng)函數(shù)需要先計(jì)算梯度并對其進(jìn)行濾波去除噪聲.由于高斯濾波運(yùn)算較為復(fù)雜,不適用于FPGA實(shí)現(xiàn),所以本文采用均值濾波進(jìn)行去噪,采用的均值濾波模板如圖5所示.
在硬件設(shè)計(jì)上,在輸入端,每個(gè)時(shí)鐘讀取一個(gè)像素點(diǎn)灰度值,由控制單元控制存入對應(yīng)的RAM.由于FPGA片上RAM資源有限,無法緩存整幀圖像信息,而計(jì)算梯度需要使用相鄰3行的像素點(diǎn)信息,所以僅對3行的像素點(diǎn)信息進(jìn)行緩存.另外,均值濾波中需用到同一行中相鄰3個(gè)像素點(diǎn)的灰度值,而FPGA的RAM IP核每個(gè)時(shí)鐘只能讀取一個(gè)數(shù)據(jù),所以為了盡可能的提升處理速度,采用并行化設(shè)計(jì)分3次緩存一行像素,使得能夠在同一個(gè)時(shí)鐘讀取3行中相鄰的3個(gè)像素點(diǎn)灰度值,即3×3模板里的9個(gè)數(shù)據(jù)進(jìn)行運(yùn)算.在運(yùn)算過程中,為了盡可能提升時(shí)鐘頻率,需要降低寄存器之間的組合邏輯,而均值濾波需要用到多個(gè)加法和移位運(yùn)算,所以實(shí)現(xiàn)中采用了多級流水線的設(shè)計(jì)結(jié)構(gòu),使得每級之間最多出現(xiàn)一次加法運(yùn)算.實(shí)驗(yàn)結(jié)果表明這樣的結(jié)構(gòu)設(shè)計(jì)能夠大幅提升綜合頻率,最高頻率從80MHz提升至120MHz.
2) 角點(diǎn)響應(yīng)函數(shù)計(jì)算
3) 局部極大值抑制
這個(gè)模塊中本文采用第2.1節(jié)所述的算法優(yōu)化方案,先對圖像進(jìn)行網(wǎng)格劃分,將一幀圖像分為多個(gè)16×16的區(qū)域,對每個(gè)區(qū)域進(jìn)行局部極大值抑制,即只保留每個(gè)區(qū)域響應(yīng)函數(shù)的最大值及其坐標(biāo)信息,使每個(gè)時(shí)鐘周期內(nèi)可以得到一個(gè)響應(yīng)函數(shù)輸入,再和當(dāng)前區(qū)域的最大值進(jìn)行比較.每計(jì)算完一個(gè)16×16區(qū)域的極大值,輸出至下一級進(jìn)行角點(diǎn)閾值計(jì)算.
4) 角點(diǎn)閾值計(jì)算
每幀圖像場景不同,閾值也應(yīng)有所不同.實(shí)現(xiàn)中采用自適應(yīng)的方法調(diào)整閾值,通過每個(gè)區(qū)域的極大值求得整幀圖像的平均值,平均值乘以一定的系數(shù)m(實(shí)現(xiàn)中采用m為4)作為此幀圖像的閾值,大于閾值的點(diǎn)被確認(rèn)為本幀圖像的角點(diǎn),將角點(diǎn)坐標(biāo)緩存至RAM,最后通過PCIE接口傳輸至PC進(jìn)行后續(xù)處理.另外,算法實(shí)現(xiàn)采用PCIE接口來完成GPU和FPGA的數(shù)據(jù)傳輸,需要PCIE接口模塊和行緩存模塊.在PCIE接口設(shè)計(jì)實(shí)現(xiàn)上采用了FPGA開發(fā)板的PCIE IP核以及應(yīng)用層模塊、配置信號采集模塊等.在改進(jìn)設(shè)計(jì)的穩(wěn)像系統(tǒng)中,由于FPGA開發(fā)板資源有限,無法存儲一幀圖像的全部像素點(diǎn)信息,所以將一幀圖像分為8個(gè)部分進(jìn)行傳輸,具體傳輸方案如圖6所示.
綜上所述,改進(jìn)算法的FPGA加速實(shí)現(xiàn)框圖如圖7所示.
在資源方面,包括算法硬件電路和接口在內(nèi)的整個(gè)FPGA上的電路設(shè)計(jì)需要約380KB的片上存儲空間,其中PCIE讀取像素點(diǎn)的RAM大小約為225KB,PCIE寫回坐標(biāo)的RAM大小約為4KB,整個(gè)角點(diǎn)檢測的算法電路部分約為150KB.硬件實(shí)現(xiàn)上以提升處理速度為優(yōu)先,因?yàn)樵谧赃m應(yīng)閾值的獲取中數(shù)據(jù)具有一定的相關(guān)性,無法簡單并行,所以均值濾波、角點(diǎn)響應(yīng)函數(shù)以及局部極大值抑制模塊之間的數(shù)據(jù)交互采用流水線結(jié)構(gòu)設(shè)計(jì),保證一個(gè)時(shí)鐘周期完成一個(gè)像素點(diǎn)的處理.實(shí)現(xiàn)中FPGA工作頻率為100MHz,角點(diǎn)檢測部分總平均用時(shí)為11.55ms,其中用于角點(diǎn)檢測的時(shí)間約為9.3ms,約2.2ms用于PCIE完成DMA數(shù)據(jù)傳輸以及數(shù)據(jù)從內(nèi)存復(fù)制入顯存的時(shí)間損耗.
3.1 實(shí)驗(yàn)平臺
表5 FPGA資源占用情況
改進(jìn)的由CPU、GPU、FPGA 3個(gè)部分組成的電子穩(wěn)像系統(tǒng)包括: CPU為Intel CoreTMi7-4790K,工作主頻為4.0GHz,操作系統(tǒng)為Windows 7;采用NVDIA GeForce GT240 GPU板卡,顯存為1GB,采用CUDA作為GPU的編程接口;選用Stratix IV GX系列的EP4SGX230C2 FPGA開發(fā)板,工作頻率為100MHz.FPGA開發(fā)板的資源使用情況如表5所示,本文系統(tǒng)對于內(nèi)存值(Memory Bits)的使用較多,這主要是因?yàn)樾枰獙Χ嘈邢袼攸c(diǎn)進(jìn)行緩存,并采用了多次緩存來提升系統(tǒng)的并行性.
3.2 處理時(shí)間比較
采用幀率為30幀/s、分辨率為1280×720的視頻作為測試樣本,分別采用文獻(xiàn)[8]算法、第2.1節(jié)的CPU+GPU計(jì)算架構(gòu)的并行化改進(jìn)算法、第2.3節(jié)的CPU+GPU+FPGA計(jì)算架構(gòu)的軟硬件協(xié)同算法,對單幀穩(wěn)像用時(shí)以及角點(diǎn)檢測部分用時(shí)進(jìn)行測試,測試結(jié)果如表6所示.可以看到本文改進(jìn)的采用CPU+GPU+FPGA軟硬件協(xié)同計(jì)算架構(gòu)的穩(wěn)像系統(tǒng),完成720p視頻源穩(wěn)像處理的單幀平均用時(shí)為25.48ms,滿足了720p視頻的實(shí)時(shí)電子穩(wěn)像性能要求,相比于文獻(xiàn)[8]的算法,加速比達(dá)到了12.角點(diǎn)檢測平均用時(shí)為11.55ms,相比于文獻(xiàn)[8]的算法,加速比達(dá)到了19.69.
表6 穩(wěn)像用時(shí)比較
3.3 主觀視覺評價(jià)
對處理前后的視頻樣本進(jìn)行等間隔采樣并進(jìn)行對比,采樣間隔為10幀,圖8和圖9給出了本文的處理效果,分別為第12、22、32、42、52、62、72、82幀圖像穩(wěn)像前后的效果對比.圖8(a)和圖9(a)為原始視頻的圖像,圖8(b)和圖9(b)為本文算法穩(wěn)像后的圖像.
可以看到原先抖動(dòng)的視頻經(jīng)過穩(wěn)像后,圖像中建筑物位移的變化更加平穩(wěn),幀間差異更小,視覺效果更加穩(wěn)定.在穩(wěn)像過程中,部分圖像邊緣的信息會(huì)有缺失,經(jīng)過邊緣擴(kuò)展,圖像邊緣處會(huì)出現(xiàn)少量的模糊現(xiàn)象.
圖10展示了相鄰幀角點(diǎn)匹配的結(jié)果,選取的是第149幀和第150幀圖像的匹配情況.可以看到經(jīng)過雙向匹配和RANSAC算法之后,匹配結(jié)果基本均為有效匹配對.圖11和圖12展示了720p視頻樣本在本文算法下各個(gè)方向上的運(yùn)動(dòng)平滑軌跡,圖中虛線表示原始視頻源拍攝時(shí)的實(shí)際運(yùn)動(dòng)軌跡,實(shí)線表示經(jīng)過高斯濾波后的運(yùn)動(dòng)軌跡.
可以看到經(jīng)過高斯濾波之后,高頻抖動(dòng)分量被濾除,能夠得到平滑的運(yùn)動(dòng)軌跡.
3.4 客觀效果評價(jià)
為了更加客觀的評價(jià)穩(wěn)像處理效果,使用文獻(xiàn)[13]提到的均方差(Mean Squared Error, MSE)和幀間變換保真度(Inter-frame Transformation Fidelity, ITF)來評估穩(wěn)像質(zhì)量.MSE越小、ITF越大,說明圖像差別越小,穩(wěn)像效果越好.表7為本文算法與文獻(xiàn)[8]算法對720p視頻穩(wěn)像后的MSE和ITF的對比情況.
表7 本文算法與文獻(xiàn)[8]算法的MSE和ITF結(jié)果比較
從實(shí)驗(yàn)結(jié)果可以看到,在處理速度大幅提升的同時(shí),本文改進(jìn)后算法的穩(wěn)像效果略優(yōu)于文獻(xiàn)[8].在計(jì)算復(fù)雜度上,由于采用了網(wǎng)格化的方案,角點(diǎn)檢測部分的復(fù)雜度約為原來的1/(2n-1)2,n為網(wǎng)格大小,從而減少了計(jì)算量和開發(fā)資源的使用,降低了開發(fā)和應(yīng)用的復(fù)雜性.
針對電子穩(wěn)像的實(shí)時(shí)性處理要求,本文采用并行計(jì)算和軟硬件協(xié)同計(jì)算方法,提出一種基于角點(diǎn)檢測的并行化電子穩(wěn)像算法.首先通過網(wǎng)格劃分和并行計(jì)算,采用CPU+GPU的協(xié)同計(jì)算架構(gòu),對穩(wěn)像處理中計(jì)算量和計(jì)算耗時(shí)最大的角點(diǎn)檢測和RANSAC計(jì)算進(jìn)行并行化改進(jìn)和優(yōu)化設(shè)計(jì),減少了計(jì)算量,提升了計(jì)算效率,降低了開發(fā)的復(fù)雜度,并獲得了5.8倍的平均加速比.進(jìn)而采用CPU+GPU+FPGA的計(jì)算架構(gòu),通過多次緩存和流水線設(shè)計(jì)等硬件優(yōu)化設(shè)計(jì)進(jìn)一步提高算法的并行計(jì)算特性,在保證高質(zhì)量圖像處理效果的同時(shí),相比于現(xiàn)有算法獲得了超過12倍的平均加速比.實(shí)驗(yàn)結(jié)果表明,該算法對存在平移運(yùn)動(dòng)、繞主光軸旋轉(zhuǎn)劇烈并且尺度縮放不大的抖動(dòng)視頻有良好的穩(wěn)像效果,幀速率30幀/s、分辨率1280×720(720p)視頻的單幀穩(wěn)像處理時(shí)間為25.48,很好地滿足了高清視頻的實(shí)時(shí)穩(wěn)像要求.
[1] VERMEULEN E. Real-time video stabilization for moving platforms[C]∥21st Bristol UAV Systems Conference. Bristol, UK: [s.n.], 2007: 3-4.
[2] 吉淑嬌,朱 明,雷艷敏,等.基于改進(jìn)運(yùn)動(dòng)矢量估計(jì)法的視頻穩(wěn)像[J].光學(xué)精密工程,2015,23(5): 1458-1465.
[3] LITVIN A, KONRAD J, KARL W C. Probabilistic video stabilization using Kalman filtering and mosaicing[C]∥Electronic Imaging 2003. International Society for Optics and Photonics. Santa Clara, USA: [s.n.], 2003: 663-674.
[4] 程德強(qiáng),郭 政,劉 潔,等.一種基于改進(jìn)光流法的電子穩(wěn)像算法[J].煤炭學(xué)報(bào),2015,40(03): 707-712.
[5] 崔少輝,謝 征,王 剛,等.二進(jìn)制魯棒不變尺度特征匹配電子穩(wěn)像[J].光學(xué)精密工程,2015,23(9): 2715-2723.
[6] 李 剛, 程志峰. 基于FPGA的實(shí)時(shí)電子穩(wěn)像[J]. 儀器儀表學(xué)報(bào), 2013,34(12): 1.
[7] 蔡耀儀.基于FPGA的嵌入式穩(wěn)像系統(tǒng)設(shè)計(jì)[J].湖南人文科技學(xué)院學(xué)報(bào),2010(2): 17-20.
[8] 吳國楠,周超超,尹文波.基于Harris角點(diǎn)與改進(jìn)Hu矩的電子穩(wěn)像算法[J].計(jì)算機(jī)工程,2013,39(3): 300-305,310.
[9] HARRIS C, STEPHENS M. A Combined Corner and Edge Detector[C]∥Proc. of the 4th Alvey Vision Conference. Manchester, UK: [s. n.], 1988.
[10] FISCGLER M A, BOLLES R C. Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography[J].CommunicationsoftheACM, 1981,24(6): 381-395.
[11] 苗 青,付忠良,趙向輝,等.基于CUDA的并行改良隨機(jī)抽樣一致性算法[J].四川大學(xué)學(xué)報(bào): 工程科學(xué)版,2010,42(4): 111-116.
[12] KIRK D. NVIDIA CUDA software and GPU parallel computing architecture[C]∥ISMM. Montreal, Canada: [s.n.], 2007: 103-104.
[13] 黃 晨,王建軍,高 昕,等.電子穩(wěn)像中穩(wěn)像質(zhì)量評價(jià)方法研究[J].激光與紅外,2013,43(5): 477-481.
An Improved Parallel Electronic Image Stabilization Algorithm Based on Corner Detection
ZHENG Jie, LIU Jie, HUANG Chao, CHEN Gengsheng
(StateKeyLaboratoryofASIC&System,FudanUniversity,Shanghai201203,China)
In view of the real-time requirement of electronic image stabilization and the problem of video jitter when using video capture devices, an improved parallel electronic image stabilization algorithm based on corner detection is proposed in this paper. The algorithm uses software and hardware co-calculation method and parallel computing to improve the electronic image stabilization algorithm based on Harris corner detection and Hu geometric invariant moments. The algorithm can reduce the computation of corner detection through grid partition and parallel computation of the region limit value. The processing efficiency of eliminating false matching is improved by using parallel RANSAC computing. And optimization design of the electronic image stabilization algorithm based on GPU and FPGA is implemented in this paper. The experimental results show that electronic image stabilization algorithm can stabilize a frame of 720p video in 25.48 ms and it can ensure good quality of stability at the same time. And the algorithm can stabilize the 30 f/s video with 1280×720 pixels in real-time.
electronic image stabilization; parallel acceleration; Harris; FPGA; GPU; software and hardware cooperation
0427-7104(2016)06-0815-11
2016-05-23
鄭 杰(1991—),男,碩士研究生;陳更生,男,高級工程師,通訊聯(lián)系人,E-mail: gschen@fudan.edu.cn.
TP 391.4
A